// This file has been generated automatically by GrGen (www.grgen.net)
// Do not modify this file! Any changes will be lost!
// Generated from "..\..\tests\TNT\TNT.grg" on Mon Nov 18 19:46:01 CET 2024

//#pragma warning disable CS0219, CS0162
#pragma warning disable 219, 162

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Threading;
using System.Diagnostics;
using GRGEN_LIBGR = de.unika.ipd.grGen.libGr;
using GRGEN_LGSP = de.unika.ipd.grGen.lgsp;
using GRGEN_EXPR = de.unika.ipd.grGen.expression;
using GRGEN_MODEL = de.unika.ipd.grGen.Model_TNT;
using GRGEN_ACTIONS = de.unika.ipd.grGen.Action_TNT;

namespace de.unika.ipd.grGen.Action_TNT
{
	public class Pattern_BenzolRing : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_BenzolRing instance = null;
		public static Pattern_BenzolRing Instance { get { if(instance==null) { instance = new Pattern_BenzolRing(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRing_node_c6_AllowedTypes = null;
		public static bool[] BenzolRing_node_c1_IsAllowedType = null;
		public static bool[] BenzolRing_node_c2_IsAllowedType = null;
		public static bool[] BenzolRing_node_c3_IsAllowedType = null;
		public static bool[] BenzolRing_node_c4_IsAllowedType = null;
		public static bool[] BenzolRing_node_c5_IsAllowedType = null;
		public static bool[] BenzolRing_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRing_edge__edge8_AllowedTypes = null;
		public static bool[] BenzolRing_edge__edge0_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge1_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge2_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge3_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge4_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge5_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge6_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge7_IsAllowedType = null;
		public static bool[] BenzolRing_edge__edge8_IsAllowedType = null;
		public enum BenzolRing_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum BenzolRing_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum BenzolRing_VariableNums { };
		public enum BenzolRing_SubNums { };
		public enum BenzolRing_AltNums { };
		public enum BenzolRing_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_BenzolRing;


		private Pattern_BenzolRing()
			: base("BenzolRing",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] BenzolRing_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] BenzolRing_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] BenzolRing_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] BenzolRing_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode BenzolRing_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c1", "c1", BenzolRing_node_c1_AllowedTypes, BenzolRing_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRing_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c2", "c2", BenzolRing_node_c2_AllowedTypes, BenzolRing_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRing_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c3", "c3", BenzolRing_node_c3_AllowedTypes, BenzolRing_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRing_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c4", "c4", BenzolRing_node_c4_AllowedTypes, BenzolRing_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRing_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c5", "c5", BenzolRing_node_c5_AllowedTypes, BenzolRing_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRing_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRing_node_c6", "c6", BenzolRing_node_c6_AllowedTypes, BenzolRing_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge0", "_edge0", BenzolRing_edge__edge0_AllowedTypes, BenzolRing_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge1", "_edge1", BenzolRing_edge__edge1_AllowedTypes, BenzolRing_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge2", "_edge2", BenzolRing_edge__edge2_AllowedTypes, BenzolRing_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge3", "_edge3", BenzolRing_edge__edge3_AllowedTypes, BenzolRing_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge4", "_edge4", BenzolRing_edge__edge4_AllowedTypes, BenzolRing_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge5", "_edge5", BenzolRing_edge__edge5_AllowedTypes, BenzolRing_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge6", "_edge6", BenzolRing_edge__edge6_AllowedTypes, BenzolRing_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge7", "_edge7", BenzolRing_edge__edge7_AllowedTypes, BenzolRing_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRing_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRing_edge__edge8", "_edge8", BenzolRing_edge__edge8_AllowedTypes, BenzolRing_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_BenzolRing = new GRGEN_LGSP.PatternGraph(
				"BenzolRing",
				"",
				null, "BenzolRing",
				false, false,
				new GRGEN_LGSP.PatternNode[] { BenzolRing_node_c1, BenzolRing_node_c2, BenzolRing_node_c3, BenzolRing_node_c4, BenzolRing_node_c5, BenzolRing_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { BenzolRing_edge__edge0, BenzolRing_edge__edge1, BenzolRing_edge__edge2, BenzolRing_edge__edge3, BenzolRing_edge__edge4, BenzolRing_edge__edge5, BenzolRing_edge__edge6, BenzolRing_edge__edge7, BenzolRing_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				BenzolRing_isNodeHomomorphicGlobal,
				BenzolRing_isEdgeHomomorphicGlobal,
				BenzolRing_isNodeTotallyHomomorphic,
				BenzolRing_isEdgeTotallyHomomorphic
			);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge0, BenzolRing_node_c1);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge0, BenzolRing_node_c2);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge1, BenzolRing_node_c2);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge1, BenzolRing_node_c3);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge2, BenzolRing_node_c3);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge2, BenzolRing_node_c4);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge3, BenzolRing_node_c4);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge3, BenzolRing_node_c5);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge4, BenzolRing_node_c5);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge4, BenzolRing_node_c6);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge5, BenzolRing_node_c6);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge5, BenzolRing_node_c1);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge6, BenzolRing_node_c1);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge6, BenzolRing_node_c2);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge7, BenzolRing_node_c3);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge7, BenzolRing_node_c4);
			pat_BenzolRing.edgeToSourceNode.Add(BenzolRing_edge__edge8, BenzolRing_node_c5);
			pat_BenzolRing.edgeToTargetNode.Add(BenzolRing_edge__edge8, BenzolRing_node_c6);

			BenzolRing_node_c1.pointOfDefinition = pat_BenzolRing;
			BenzolRing_node_c2.pointOfDefinition = pat_BenzolRing;
			BenzolRing_node_c3.pointOfDefinition = pat_BenzolRing;
			BenzolRing_node_c4.pointOfDefinition = pat_BenzolRing;
			BenzolRing_node_c5.pointOfDefinition = pat_BenzolRing;
			BenzolRing_node_c6.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge0.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge1.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge2.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge3.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge4.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge5.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge6.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge7.pointOfDefinition = pat_BenzolRing;
			BenzolRing_edge__edge8.pointOfDefinition = pat_BenzolRing;

			patternGraph = pat_BenzolRing;
		}


		public void BenzolRing_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_BenzolRing_addedNodeNames );
			GRGEN_MODEL.@C node_c1 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_BenzolRing_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
		}
		private static string[] create_BenzolRing_addedNodeNames = new string[] { "c1", "c2", "c3", "c4", "c5", "c6" };
		private static string[] create_BenzolRing_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8" };

		public void BenzolRing_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_BenzolRing curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			GRGEN_LGSP.LGSPEdge edge__edge3 = curMatch._edge__edge3;
			GRGEN_LGSP.LGSPEdge edge__edge4 = curMatch._edge__edge4;
			GRGEN_LGSP.LGSPEdge edge__edge5 = curMatch._edge__edge5;
			GRGEN_LGSP.LGSPEdge edge__edge6 = curMatch._edge__edge6;
			GRGEN_LGSP.LGSPEdge edge__edge7 = curMatch._edge__edge7;
			GRGEN_LGSP.LGSPEdge edge__edge8 = curMatch._edge__edge8;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.Remove(edge__edge3);
			graph.Remove(edge__edge4);
			graph.Remove(edge__edge5);
			graph.Remove(edge__edge6);
			graph.Remove(edge__edge7);
			graph.Remove(edge__edge8);
			graph.RemoveEdges(node_c1);
			graph.Remove(node_c1);
			graph.RemoveEdges(node_c2);
			graph.Remove(node_c2);
			graph.RemoveEdges(node_c3);
			graph.Remove(node_c3);
			graph.RemoveEdges(node_c4);
			graph.Remove(node_c4);
			graph.RemoveEdges(node_c5);
			graph.Remove(node_c5);
			graph.RemoveEdges(node_c6);
			graph.Remove(node_c6);
		}

		static Pattern_BenzolRing() {
		}

		public interface IMatch_BenzolRing : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_BenzolRing : GRGEN_LGSP.MatchListElement<Match_BenzolRing>, IMatch_BenzolRing
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum BenzolRing_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)BenzolRing_NodeNums.@c1: return _node_c1;
				case (int)BenzolRing_NodeNums.@c2: return _node_c2;
				case (int)BenzolRing_NodeNums.@c3: return _node_c3;
				case (int)BenzolRing_NodeNums.@c4: return _node_c4;
				case (int)BenzolRing_NodeNums.@c5: return _node_c5;
				case (int)BenzolRing_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum BenzolRing_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)BenzolRing_EdgeNums.@_edge0: return _edge__edge0;
				case (int)BenzolRing_EdgeNums.@_edge1: return _edge__edge1;
				case (int)BenzolRing_EdgeNums.@_edge2: return _edge__edge2;
				case (int)BenzolRing_EdgeNums.@_edge3: return _edge__edge3;
				case (int)BenzolRing_EdgeNums.@_edge4: return _edge__edge4;
				case (int)BenzolRing_EdgeNums.@_edge5: return _edge__edge5;
				case (int)BenzolRing_EdgeNums.@_edge6: return _edge__edge6;
				case (int)BenzolRing_EdgeNums.@_edge7: return _edge__edge7;
				case (int)BenzolRing_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum BenzolRing_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRing_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRing_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRing_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRing_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_BenzolRing.instance.pat_BenzolRing; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRing(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRing(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRing nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRing cur = this;
				while(cur != null) {
					Match_BenzolRing next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRing that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
			}

			public Match_BenzolRing(Match_BenzolRing that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRing that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
			}

			public Match_BenzolRing(Match_BenzolRing that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRing()
			{
			}

			public bool IsEqual(Match_BenzolRing that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				return true;
			}
		}

	}


	public class Pattern_BenzolRingC123456Exposed : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_BenzolRingC123456Exposed instance = null;
		public static Pattern_BenzolRingC123456Exposed Instance { get { if(instance==null) { instance = new Pattern_BenzolRingC123456Exposed(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC123456Exposed_node_c6_AllowedTypes = null;
		public static bool[] BenzolRingC123456Exposed_node_c1_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_node_c2_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_node_c3_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_node_c4_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_node_c5_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC123456Exposed_edge__edge8_AllowedTypes = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge0_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge1_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge2_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge3_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge4_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge5_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge6_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge7_IsAllowedType = null;
		public static bool[] BenzolRingC123456Exposed_edge__edge8_IsAllowedType = null;
		public enum BenzolRingC123456Exposed_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum BenzolRingC123456Exposed_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum BenzolRingC123456Exposed_VariableNums { };
		public enum BenzolRingC123456Exposed_SubNums { };
		public enum BenzolRingC123456Exposed_AltNums { };
		public enum BenzolRingC123456Exposed_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_BenzolRingC123456Exposed;


		private Pattern_BenzolRingC123456Exposed()
			: base("BenzolRingC123456Exposed",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "BenzolRingC123456Exposed_node_c1", "BenzolRingC123456Exposed_node_c2", "BenzolRingC123456Exposed_node_c3", "BenzolRingC123456Exposed_node_c4", "BenzolRingC123456Exposed_node_c5", "BenzolRingC123456Exposed_node_c6", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] BenzolRingC123456Exposed_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] BenzolRingC123456Exposed_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] BenzolRingC123456Exposed_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] BenzolRingC123456Exposed_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c1", "c1", BenzolRingC123456Exposed_node_c1_AllowedTypes, BenzolRingC123456Exposed_node_c1_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c2", "c2", BenzolRingC123456Exposed_node_c2_AllowedTypes, BenzolRingC123456Exposed_node_c2_IsAllowedType, 5.5F, 1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c3", "c3", BenzolRingC123456Exposed_node_c3_AllowedTypes, BenzolRingC123456Exposed_node_c3_IsAllowedType, 5.5F, 2, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c4", "c4", BenzolRingC123456Exposed_node_c4_AllowedTypes, BenzolRingC123456Exposed_node_c4_IsAllowedType, 5.5F, 3, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c5", "c5", BenzolRingC123456Exposed_node_c5_AllowedTypes, BenzolRingC123456Exposed_node_c5_IsAllowedType, 5.5F, 4, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC123456Exposed_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC123456Exposed_node_c6", "c6", BenzolRingC123456Exposed_node_c6_AllowedTypes, BenzolRingC123456Exposed_node_c6_IsAllowedType, 5.5F, 5, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge0", "_edge0", BenzolRingC123456Exposed_edge__edge0_AllowedTypes, BenzolRingC123456Exposed_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge1", "_edge1", BenzolRingC123456Exposed_edge__edge1_AllowedTypes, BenzolRingC123456Exposed_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge2", "_edge2", BenzolRingC123456Exposed_edge__edge2_AllowedTypes, BenzolRingC123456Exposed_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge3", "_edge3", BenzolRingC123456Exposed_edge__edge3_AllowedTypes, BenzolRingC123456Exposed_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge4", "_edge4", BenzolRingC123456Exposed_edge__edge4_AllowedTypes, BenzolRingC123456Exposed_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge5", "_edge5", BenzolRingC123456Exposed_edge__edge5_AllowedTypes, BenzolRingC123456Exposed_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge6", "_edge6", BenzolRingC123456Exposed_edge__edge6_AllowedTypes, BenzolRingC123456Exposed_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge7", "_edge7", BenzolRingC123456Exposed_edge__edge7_AllowedTypes, BenzolRingC123456Exposed_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC123456Exposed_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC123456Exposed_edge__edge8", "_edge8", BenzolRingC123456Exposed_edge__edge8_AllowedTypes, BenzolRingC123456Exposed_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_BenzolRingC123456Exposed = new GRGEN_LGSP.PatternGraph(
				"BenzolRingC123456Exposed",
				"",
				null, "BenzolRingC123456Exposed",
				false, false,
				new GRGEN_LGSP.PatternNode[] { BenzolRingC123456Exposed_node_c1, BenzolRingC123456Exposed_node_c2, BenzolRingC123456Exposed_node_c3, BenzolRingC123456Exposed_node_c4, BenzolRingC123456Exposed_node_c5, BenzolRingC123456Exposed_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { BenzolRingC123456Exposed_edge__edge0, BenzolRingC123456Exposed_edge__edge1, BenzolRingC123456Exposed_edge__edge2, BenzolRingC123456Exposed_edge__edge3, BenzolRingC123456Exposed_edge__edge4, BenzolRingC123456Exposed_edge__edge5, BenzolRingC123456Exposed_edge__edge6, BenzolRingC123456Exposed_edge__edge7, BenzolRingC123456Exposed_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				BenzolRingC123456Exposed_isNodeHomomorphicGlobal,
				BenzolRingC123456Exposed_isEdgeHomomorphicGlobal,
				BenzolRingC123456Exposed_isNodeTotallyHomomorphic,
				BenzolRingC123456Exposed_isEdgeTotallyHomomorphic
			);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge0, BenzolRingC123456Exposed_node_c1);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge0, BenzolRingC123456Exposed_node_c2);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge1, BenzolRingC123456Exposed_node_c2);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge1, BenzolRingC123456Exposed_node_c3);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge2, BenzolRingC123456Exposed_node_c3);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge2, BenzolRingC123456Exposed_node_c4);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge3, BenzolRingC123456Exposed_node_c4);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge3, BenzolRingC123456Exposed_node_c5);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge4, BenzolRingC123456Exposed_node_c5);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge4, BenzolRingC123456Exposed_node_c6);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge5, BenzolRingC123456Exposed_node_c6);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge5, BenzolRingC123456Exposed_node_c1);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge6, BenzolRingC123456Exposed_node_c1);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge6, BenzolRingC123456Exposed_node_c2);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge7, BenzolRingC123456Exposed_node_c3);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge7, BenzolRingC123456Exposed_node_c4);
			pat_BenzolRingC123456Exposed.edgeToSourceNode.Add(BenzolRingC123456Exposed_edge__edge8, BenzolRingC123456Exposed_node_c5);
			pat_BenzolRingC123456Exposed.edgeToTargetNode.Add(BenzolRingC123456Exposed_edge__edge8, BenzolRingC123456Exposed_node_c6);

			BenzolRingC123456Exposed_node_c1.pointOfDefinition = null;
			BenzolRingC123456Exposed_node_c2.pointOfDefinition = null;
			BenzolRingC123456Exposed_node_c3.pointOfDefinition = null;
			BenzolRingC123456Exposed_node_c4.pointOfDefinition = null;
			BenzolRingC123456Exposed_node_c5.pointOfDefinition = null;
			BenzolRingC123456Exposed_node_c6.pointOfDefinition = null;
			BenzolRingC123456Exposed_edge__edge0.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge1.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge2.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge3.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge4.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge5.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge6.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge7.pointOfDefinition = pat_BenzolRingC123456Exposed;
			BenzolRingC123456Exposed_edge__edge8.pointOfDefinition = pat_BenzolRingC123456Exposed;

			patternGraph = pat_BenzolRingC123456Exposed;
		}


		public void BenzolRingC123456Exposed_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_c1, GRGEN_LGSP.LGSPNode node_c2, GRGEN_LGSP.LGSPNode node_c3, GRGEN_LGSP.LGSPNode node_c4, GRGEN_LGSP.LGSPNode node_c5, GRGEN_LGSP.LGSPNode node_c6)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_BenzolRingC123456Exposed_addedNodeNames );
			graph.SettingAddedEdgeNames( create_BenzolRingC123456Exposed_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
		}
		private static string[] create_BenzolRingC123456Exposed_addedNodeNames = new string[] {  };
		private static string[] create_BenzolRingC123456Exposed_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8" };

		public void BenzolRingC123456Exposed_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_BenzolRingC123456Exposed curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			GRGEN_LGSP.LGSPEdge edge__edge3 = curMatch._edge__edge3;
			GRGEN_LGSP.LGSPEdge edge__edge4 = curMatch._edge__edge4;
			GRGEN_LGSP.LGSPEdge edge__edge5 = curMatch._edge__edge5;
			GRGEN_LGSP.LGSPEdge edge__edge6 = curMatch._edge__edge6;
			GRGEN_LGSP.LGSPEdge edge__edge7 = curMatch._edge__edge7;
			GRGEN_LGSP.LGSPEdge edge__edge8 = curMatch._edge__edge8;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.Remove(edge__edge3);
			graph.Remove(edge__edge4);
			graph.Remove(edge__edge5);
			graph.Remove(edge__edge6);
			graph.Remove(edge__edge7);
			graph.Remove(edge__edge8);
		}

		static Pattern_BenzolRingC123456Exposed() {
		}

		public interface IMatch_BenzolRingC123456Exposed : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_BenzolRingC123456Exposed : GRGEN_LGSP.MatchListElement<Match_BenzolRingC123456Exposed>, IMatch_BenzolRingC123456Exposed
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum BenzolRingC123456Exposed_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC123456Exposed_NodeNums.@c1: return _node_c1;
				case (int)BenzolRingC123456Exposed_NodeNums.@c2: return _node_c2;
				case (int)BenzolRingC123456Exposed_NodeNums.@c3: return _node_c3;
				case (int)BenzolRingC123456Exposed_NodeNums.@c4: return _node_c4;
				case (int)BenzolRingC123456Exposed_NodeNums.@c5: return _node_c5;
				case (int)BenzolRingC123456Exposed_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum BenzolRingC123456Exposed_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge0: return _edge__edge0;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge1: return _edge__edge1;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge2: return _edge__edge2;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge3: return _edge__edge3;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge4: return _edge__edge4;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge5: return _edge__edge5;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge6: return _edge__edge6;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge7: return _edge__edge7;
				case (int)BenzolRingC123456Exposed_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum BenzolRingC123456Exposed_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRingC123456Exposed_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC123456Exposed_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC123456Exposed_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC123456Exposed_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_BenzolRingC123456Exposed.instance.pat_BenzolRingC123456Exposed; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRingC123456Exposed(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRingC123456Exposed(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRingC123456Exposed nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRingC123456Exposed cur = this;
				while(cur != null) {
					Match_BenzolRingC123456Exposed next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRingC123456Exposed that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
			}

			public Match_BenzolRingC123456Exposed(Match_BenzolRingC123456Exposed that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRingC123456Exposed that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
			}

			public Match_BenzolRingC123456Exposed(Match_BenzolRingC123456Exposed that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRingC123456Exposed()
			{
			}

			public bool IsEqual(Match_BenzolRingC123456Exposed that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				return true;
			}
		}

	}


	public class Pattern_BenzolRingC1Exposed : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_BenzolRingC1Exposed instance = null;
		public static Pattern_BenzolRingC1Exposed Instance { get { if(instance==null) { instance = new Pattern_BenzolRingC1Exposed(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1Exposed_node_c6_AllowedTypes = null;
		public static bool[] BenzolRingC1Exposed_node_c1_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_node_c2_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_node_c3_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_node_c4_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_node_c5_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1Exposed_edge__edge8_AllowedTypes = null;
		public static bool[] BenzolRingC1Exposed_edge__edge0_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge1_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge2_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge3_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge4_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge5_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge6_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge7_IsAllowedType = null;
		public static bool[] BenzolRingC1Exposed_edge__edge8_IsAllowedType = null;
		public enum BenzolRingC1Exposed_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum BenzolRingC1Exposed_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum BenzolRingC1Exposed_VariableNums { };
		public enum BenzolRingC1Exposed_SubNums { };
		public enum BenzolRingC1Exposed_AltNums { };
		public enum BenzolRingC1Exposed_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_BenzolRingC1Exposed;


		private Pattern_BenzolRingC1Exposed()
			: base("BenzolRingC1Exposed",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "BenzolRingC1Exposed_node_c1", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] BenzolRingC1Exposed_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] BenzolRingC1Exposed_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] BenzolRingC1Exposed_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] BenzolRingC1Exposed_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c1", "c1", BenzolRingC1Exposed_node_c1_AllowedTypes, BenzolRingC1Exposed_node_c1_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c2", "c2", BenzolRingC1Exposed_node_c2_AllowedTypes, BenzolRingC1Exposed_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c3", "c3", BenzolRingC1Exposed_node_c3_AllowedTypes, BenzolRingC1Exposed_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c4", "c4", BenzolRingC1Exposed_node_c4_AllowedTypes, BenzolRingC1Exposed_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c5", "c5", BenzolRingC1Exposed_node_c5_AllowedTypes, BenzolRingC1Exposed_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1Exposed_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1Exposed_node_c6", "c6", BenzolRingC1Exposed_node_c6_AllowedTypes, BenzolRingC1Exposed_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge0", "_edge0", BenzolRingC1Exposed_edge__edge0_AllowedTypes, BenzolRingC1Exposed_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge1", "_edge1", BenzolRingC1Exposed_edge__edge1_AllowedTypes, BenzolRingC1Exposed_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge2", "_edge2", BenzolRingC1Exposed_edge__edge2_AllowedTypes, BenzolRingC1Exposed_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge3", "_edge3", BenzolRingC1Exposed_edge__edge3_AllowedTypes, BenzolRingC1Exposed_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge4", "_edge4", BenzolRingC1Exposed_edge__edge4_AllowedTypes, BenzolRingC1Exposed_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge5", "_edge5", BenzolRingC1Exposed_edge__edge5_AllowedTypes, BenzolRingC1Exposed_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge6", "_edge6", BenzolRingC1Exposed_edge__edge6_AllowedTypes, BenzolRingC1Exposed_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge7", "_edge7", BenzolRingC1Exposed_edge__edge7_AllowedTypes, BenzolRingC1Exposed_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1Exposed_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1Exposed_edge__edge8", "_edge8", BenzolRingC1Exposed_edge__edge8_AllowedTypes, BenzolRingC1Exposed_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_BenzolRingC1Exposed = new GRGEN_LGSP.PatternGraph(
				"BenzolRingC1Exposed",
				"",
				null, "BenzolRingC1Exposed",
				false, false,
				new GRGEN_LGSP.PatternNode[] { BenzolRingC1Exposed_node_c1, BenzolRingC1Exposed_node_c2, BenzolRingC1Exposed_node_c3, BenzolRingC1Exposed_node_c4, BenzolRingC1Exposed_node_c5, BenzolRingC1Exposed_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { BenzolRingC1Exposed_edge__edge0, BenzolRingC1Exposed_edge__edge1, BenzolRingC1Exposed_edge__edge2, BenzolRingC1Exposed_edge__edge3, BenzolRingC1Exposed_edge__edge4, BenzolRingC1Exposed_edge__edge5, BenzolRingC1Exposed_edge__edge6, BenzolRingC1Exposed_edge__edge7, BenzolRingC1Exposed_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				BenzolRingC1Exposed_isNodeHomomorphicGlobal,
				BenzolRingC1Exposed_isEdgeHomomorphicGlobal,
				BenzolRingC1Exposed_isNodeTotallyHomomorphic,
				BenzolRingC1Exposed_isEdgeTotallyHomomorphic
			);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge0, BenzolRingC1Exposed_node_c1);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge0, BenzolRingC1Exposed_node_c2);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge1, BenzolRingC1Exposed_node_c2);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge1, BenzolRingC1Exposed_node_c3);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge2, BenzolRingC1Exposed_node_c3);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge2, BenzolRingC1Exposed_node_c4);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge3, BenzolRingC1Exposed_node_c4);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge3, BenzolRingC1Exposed_node_c5);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge4, BenzolRingC1Exposed_node_c5);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge4, BenzolRingC1Exposed_node_c6);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge5, BenzolRingC1Exposed_node_c6);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge5, BenzolRingC1Exposed_node_c1);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge6, BenzolRingC1Exposed_node_c1);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge6, BenzolRingC1Exposed_node_c2);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge7, BenzolRingC1Exposed_node_c3);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge7, BenzolRingC1Exposed_node_c4);
			pat_BenzolRingC1Exposed.edgeToSourceNode.Add(BenzolRingC1Exposed_edge__edge8, BenzolRingC1Exposed_node_c5);
			pat_BenzolRingC1Exposed.edgeToTargetNode.Add(BenzolRingC1Exposed_edge__edge8, BenzolRingC1Exposed_node_c6);

			BenzolRingC1Exposed_node_c1.pointOfDefinition = null;
			BenzolRingC1Exposed_node_c2.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_node_c3.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_node_c4.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_node_c5.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_node_c6.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge0.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge1.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge2.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge3.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge4.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge5.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge6.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge7.pointOfDefinition = pat_BenzolRingC1Exposed;
			BenzolRingC1Exposed_edge__edge8.pointOfDefinition = pat_BenzolRingC1Exposed;

			patternGraph = pat_BenzolRingC1Exposed;
		}


		public void BenzolRingC1Exposed_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_c1)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_BenzolRingC1Exposed_addedNodeNames );
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_BenzolRingC1Exposed_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
		}
		private static string[] create_BenzolRingC1Exposed_addedNodeNames = new string[] { "c2", "c3", "c4", "c5", "c6" };
		private static string[] create_BenzolRingC1Exposed_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8" };

		public void BenzolRingC1Exposed_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_BenzolRingC1Exposed curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			GRGEN_LGSP.LGSPEdge edge__edge3 = curMatch._edge__edge3;
			GRGEN_LGSP.LGSPEdge edge__edge4 = curMatch._edge__edge4;
			GRGEN_LGSP.LGSPEdge edge__edge5 = curMatch._edge__edge5;
			GRGEN_LGSP.LGSPEdge edge__edge6 = curMatch._edge__edge6;
			GRGEN_LGSP.LGSPEdge edge__edge7 = curMatch._edge__edge7;
			GRGEN_LGSP.LGSPEdge edge__edge8 = curMatch._edge__edge8;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.Remove(edge__edge3);
			graph.Remove(edge__edge4);
			graph.Remove(edge__edge5);
			graph.Remove(edge__edge6);
			graph.Remove(edge__edge7);
			graph.Remove(edge__edge8);
			graph.RemoveEdges(node_c2);
			graph.Remove(node_c2);
			graph.RemoveEdges(node_c3);
			graph.Remove(node_c3);
			graph.RemoveEdges(node_c4);
			graph.Remove(node_c4);
			graph.RemoveEdges(node_c5);
			graph.Remove(node_c5);
			graph.RemoveEdges(node_c6);
			graph.Remove(node_c6);
		}

		static Pattern_BenzolRingC1Exposed() {
		}

		public interface IMatch_BenzolRingC1Exposed : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_BenzolRingC1Exposed : GRGEN_LGSP.MatchListElement<Match_BenzolRingC1Exposed>, IMatch_BenzolRingC1Exposed
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum BenzolRingC1Exposed_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1Exposed_NodeNums.@c1: return _node_c1;
				case (int)BenzolRingC1Exposed_NodeNums.@c2: return _node_c2;
				case (int)BenzolRingC1Exposed_NodeNums.@c3: return _node_c3;
				case (int)BenzolRingC1Exposed_NodeNums.@c4: return _node_c4;
				case (int)BenzolRingC1Exposed_NodeNums.@c5: return _node_c5;
				case (int)BenzolRingC1Exposed_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum BenzolRingC1Exposed_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge0: return _edge__edge0;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge1: return _edge__edge1;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge2: return _edge__edge2;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge3: return _edge__edge3;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge4: return _edge__edge4;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge5: return _edge__edge5;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge6: return _edge__edge6;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge7: return _edge__edge7;
				case (int)BenzolRingC1Exposed_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum BenzolRingC1Exposed_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRingC1Exposed_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1Exposed_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1Exposed_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1Exposed_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_BenzolRingC1Exposed.instance.pat_BenzolRingC1Exposed; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRingC1Exposed(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRingC1Exposed(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRingC1Exposed nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRingC1Exposed cur = this;
				while(cur != null) {
					Match_BenzolRingC1Exposed next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRingC1Exposed that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
			}

			public Match_BenzolRingC1Exposed(Match_BenzolRingC1Exposed that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRingC1Exposed that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
			}

			public Match_BenzolRingC1Exposed(Match_BenzolRingC1Exposed that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRingC1Exposed()
			{
			}

			public bool IsEqual(Match_BenzolRingC1Exposed that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				return true;
			}
		}

	}


	public class Pattern_BenzolRingC1ExposedNotC6Nitro : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_BenzolRingC1ExposedNotC6Nitro instance = null;
		public static Pattern_BenzolRingC1ExposedNotC6Nitro Instance { get { if(instance==null) { instance = new Pattern_BenzolRingC1ExposedNotC6Nitro(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_node_c6_AllowedTypes = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c1_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c2_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c3_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c4_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c5_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_edge__edge8_AllowedTypes = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge0_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge1_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge2_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge3_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge4_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge5_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge6_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge7_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_edge__edge8_IsAllowedType = null;
		public enum BenzolRingC1ExposedNotC6Nitro_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum BenzolRingC1ExposedNotC6Nitro_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum BenzolRingC1ExposedNotC6Nitro_VariableNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_SubNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_AltNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_BenzolRingC1ExposedNotC6Nitro;

		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_AllowedTypes = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_AllowedTypes = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_IsAllowedType = null;
		public static bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_IsAllowedType = null;
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums { @c6, @n, @_node0, @_node1, };
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_EdgeNums { @_edge0, @_edge1, @_edge2, };
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_VariableNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_SubNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_AltNums { };
		public enum BenzolRingC1ExposedNotC6Nitro_neg_0_IterNums { };


		public GRGEN_LGSP.PatternGraph BenzolRingC1ExposedNotC6Nitro_neg_0;


		private Pattern_BenzolRingC1ExposedNotC6Nitro()
			: base("BenzolRingC1ExposedNotC6Nitro",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "BenzolRingC1ExposedNotC6Nitro_node_c1", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] BenzolRingC1ExposedNotC6Nitro_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] BenzolRingC1ExposedNotC6Nitro_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] BenzolRingC1ExposedNotC6Nitro_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] BenzolRingC1ExposedNotC6Nitro_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c1", "c1", BenzolRingC1ExposedNotC6Nitro_node_c1_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c1_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c2", "c2", BenzolRingC1ExposedNotC6Nitro_node_c2_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c3", "c3", BenzolRingC1ExposedNotC6Nitro_node_c3_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c4", "c4", BenzolRingC1ExposedNotC6Nitro_node_c4_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c5", "c5", BenzolRingC1ExposedNotC6Nitro_node_c5_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "BenzolRingC1ExposedNotC6Nitro_node_c6", "c6", BenzolRingC1ExposedNotC6Nitro_node_c6_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge0", "_edge0", BenzolRingC1ExposedNotC6Nitro_edge__edge0_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge1", "_edge1", BenzolRingC1ExposedNotC6Nitro_edge__edge1_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge2", "_edge2", BenzolRingC1ExposedNotC6Nitro_edge__edge2_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge3", "_edge3", BenzolRingC1ExposedNotC6Nitro_edge__edge3_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge4", "_edge4", BenzolRingC1ExposedNotC6Nitro_edge__edge4_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge5", "_edge5", BenzolRingC1ExposedNotC6Nitro_edge__edge5_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge6", "_edge6", BenzolRingC1ExposedNotC6Nitro_edge__edge6_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge7", "_edge7", BenzolRingC1ExposedNotC6Nitro_edge__edge7_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_edge__edge8", "_edge8", BenzolRingC1ExposedNotC6Nitro_edge__edge8_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			bool[,] BenzolRingC1ExposedNotC6Nitro_neg_0_isNodeHomomorphicGlobal = new bool[4, 4] {
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
			};
			bool[,] BenzolRingC1ExposedNotC6Nitro_neg_0_isEdgeHomomorphicGlobal = new bool[3, 3] {
				{ false, false, false, },
				{ false, false, false, },
				{ false, false, false, },
			};
			bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_isNodeTotallyHomomorphic = new bool[4] { false, false, false, false,  };
			bool[] BenzolRingC1ExposedNotC6Nitro_neg_0_isEdgeTotallyHomomorphic = new bool[3] { false, false, false,  };
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_neg_0_node_n = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "BenzolRingC1ExposedNotC6Nitro_neg_0_node_n", "n", BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0", "_node0", BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1", "_node1", BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0", "_edge0", BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1", "_edge1", BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2", "_edge2", BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_AllowedTypes, BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			BenzolRingC1ExposedNotC6Nitro_neg_0 = new GRGEN_LGSP.PatternGraph(
				"neg_0",
				"BenzolRingC1ExposedNotC6Nitro_",
				null, "neg_0",
				false, false,
				new GRGEN_LGSP.PatternNode[] { BenzolRingC1ExposedNotC6Nitro_node_c6, BenzolRingC1ExposedNotC6Nitro_neg_0_node_n, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1 }, 
				new GRGEN_LGSP.PatternEdge[] { BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0, BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1, BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[4, 4] {
					{ true, false, false, false, },
					{ false, true, false, false, },
					{ false, false, true, false, },
					{ false, false, false, true, },
				},
				new bool[3, 3] {
					{ true, false, false, },
					{ false, true, false, },
					{ false, false, true, },
				},
				BenzolRingC1ExposedNotC6Nitro_neg_0_isNodeHomomorphicGlobal,
				BenzolRingC1ExposedNotC6Nitro_neg_0_isEdgeHomomorphicGlobal,
				BenzolRingC1ExposedNotC6Nitro_neg_0_isNodeTotallyHomomorphic,
				BenzolRingC1ExposedNotC6Nitro_neg_0_isEdgeTotallyHomomorphic
			);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0, BenzolRingC1ExposedNotC6Nitro_node_c6);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0, BenzolRingC1ExposedNotC6Nitro_neg_0_node_n);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1, BenzolRingC1ExposedNotC6Nitro_neg_0_node_n);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2, BenzolRingC1ExposedNotC6Nitro_neg_0_node_n);
			BenzolRingC1ExposedNotC6Nitro_neg_0.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2, BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1);

			pat_BenzolRingC1ExposedNotC6Nitro = new GRGEN_LGSP.PatternGraph(
				"BenzolRingC1ExposedNotC6Nitro",
				"",
				null, "BenzolRingC1ExposedNotC6Nitro",
				false, false,
				new GRGEN_LGSP.PatternNode[] { BenzolRingC1ExposedNotC6Nitro_node_c1, BenzolRingC1ExposedNotC6Nitro_node_c2, BenzolRingC1ExposedNotC6Nitro_node_c3, BenzolRingC1ExposedNotC6Nitro_node_c4, BenzolRingC1ExposedNotC6Nitro_node_c5, BenzolRingC1ExposedNotC6Nitro_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { BenzolRingC1ExposedNotC6Nitro_edge__edge0, BenzolRingC1ExposedNotC6Nitro_edge__edge1, BenzolRingC1ExposedNotC6Nitro_edge__edge2, BenzolRingC1ExposedNotC6Nitro_edge__edge3, BenzolRingC1ExposedNotC6Nitro_edge__edge4, BenzolRingC1ExposedNotC6Nitro_edge__edge5, BenzolRingC1ExposedNotC6Nitro_edge__edge6, BenzolRingC1ExposedNotC6Nitro_edge__edge7, BenzolRingC1ExposedNotC6Nitro_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] { BenzolRingC1ExposedNotC6Nitro_neg_0,  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				BenzolRingC1ExposedNotC6Nitro_isNodeHomomorphicGlobal,
				BenzolRingC1ExposedNotC6Nitro_isEdgeHomomorphicGlobal,
				BenzolRingC1ExposedNotC6Nitro_isNodeTotallyHomomorphic,
				BenzolRingC1ExposedNotC6Nitro_isEdgeTotallyHomomorphic
			);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge0, BenzolRingC1ExposedNotC6Nitro_node_c1);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge0, BenzolRingC1ExposedNotC6Nitro_node_c2);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge1, BenzolRingC1ExposedNotC6Nitro_node_c2);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge1, BenzolRingC1ExposedNotC6Nitro_node_c3);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge2, BenzolRingC1ExposedNotC6Nitro_node_c3);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge2, BenzolRingC1ExposedNotC6Nitro_node_c4);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge3, BenzolRingC1ExposedNotC6Nitro_node_c4);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge3, BenzolRingC1ExposedNotC6Nitro_node_c5);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge4, BenzolRingC1ExposedNotC6Nitro_node_c5);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge4, BenzolRingC1ExposedNotC6Nitro_node_c6);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge5, BenzolRingC1ExposedNotC6Nitro_node_c6);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge5, BenzolRingC1ExposedNotC6Nitro_node_c1);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge6, BenzolRingC1ExposedNotC6Nitro_node_c1);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge6, BenzolRingC1ExposedNotC6Nitro_node_c2);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge7, BenzolRingC1ExposedNotC6Nitro_node_c3);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge7, BenzolRingC1ExposedNotC6Nitro_node_c4);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToSourceNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge8, BenzolRingC1ExposedNotC6Nitro_node_c5);
			pat_BenzolRingC1ExposedNotC6Nitro.edgeToTargetNode.Add(BenzolRingC1ExposedNotC6Nitro_edge__edge8, BenzolRingC1ExposedNotC6Nitro_node_c6);
			BenzolRingC1ExposedNotC6Nitro_neg_0.embeddingGraph = pat_BenzolRingC1ExposedNotC6Nitro;

			BenzolRingC1ExposedNotC6Nitro_node_c1.pointOfDefinition = null;
			BenzolRingC1ExposedNotC6Nitro_node_c2.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_node_c3.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_node_c4.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_node_c5.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_node_c6.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge0.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge1.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge2.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge3.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge4.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge5.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge6.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge7.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_edge__edge8.pointOfDefinition = pat_BenzolRingC1ExposedNotC6Nitro;
			BenzolRingC1ExposedNotC6Nitro_neg_0_node_n.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;
			BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;
			BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;
			BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;
			BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;
			BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.pointOfDefinition = BenzolRingC1ExposedNotC6Nitro_neg_0;

			patternGraph = pat_BenzolRingC1ExposedNotC6Nitro;
		}


		public void BenzolRingC1ExposedNotC6Nitro_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_c1)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_BenzolRingC1ExposedNotC6Nitro_addedNodeNames );
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_BenzolRingC1ExposedNotC6Nitro_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
		}
		private static string[] create_BenzolRingC1ExposedNotC6Nitro_addedNodeNames = new string[] { "c2", "c3", "c4", "c5", "c6" };
		private static string[] create_BenzolRingC1ExposedNotC6Nitro_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8" };

		public void BenzolRingC1ExposedNotC6Nitro_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_BenzolRingC1ExposedNotC6Nitro curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			GRGEN_LGSP.LGSPEdge edge__edge3 = curMatch._edge__edge3;
			GRGEN_LGSP.LGSPEdge edge__edge4 = curMatch._edge__edge4;
			GRGEN_LGSP.LGSPEdge edge__edge5 = curMatch._edge__edge5;
			GRGEN_LGSP.LGSPEdge edge__edge6 = curMatch._edge__edge6;
			GRGEN_LGSP.LGSPEdge edge__edge7 = curMatch._edge__edge7;
			GRGEN_LGSP.LGSPEdge edge__edge8 = curMatch._edge__edge8;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.Remove(edge__edge3);
			graph.Remove(edge__edge4);
			graph.Remove(edge__edge5);
			graph.Remove(edge__edge6);
			graph.Remove(edge__edge7);
			graph.Remove(edge__edge8);
			graph.RemoveEdges(node_c2);
			graph.Remove(node_c2);
			graph.RemoveEdges(node_c3);
			graph.Remove(node_c3);
			graph.RemoveEdges(node_c4);
			graph.Remove(node_c4);
			graph.RemoveEdges(node_c5);
			graph.Remove(node_c5);
			graph.RemoveEdges(node_c6);
			graph.Remove(node_c6);
		}

		static Pattern_BenzolRingC1ExposedNotC6Nitro() {
		}

		public interface IMatch_BenzolRingC1ExposedNotC6Nitro : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public interface IMatch_BenzolRingC1ExposedNotC6Nitro_neg_0 : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c6 { get; set; }
			GRGEN_MODEL.IN node_n { get; set; }
			GRGEN_MODEL.IO node__node0 { get; set; }
			GRGEN_MODEL.IO node__node1 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_BenzolRingC1ExposedNotC6Nitro : GRGEN_LGSP.MatchListElement<Match_BenzolRingC1ExposedNotC6Nitro>, IMatch_BenzolRingC1ExposedNotC6Nitro
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum BenzolRingC1ExposedNotC6Nitro_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c1: return _node_c1;
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c2: return _node_c2;
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c3: return _node_c3;
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c4: return _node_c4;
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c5: return _node_c5;
				case (int)BenzolRingC1ExposedNotC6Nitro_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum BenzolRingC1ExposedNotC6Nitro_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge0: return _edge__edge0;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge1: return _edge__edge1;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge2: return _edge__edge2;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge3: return _edge__edge3;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge4: return _edge__edge4;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge5: return _edge__edge5;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge6: return _edge__edge6;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge7: return _edge__edge7;
				case (int)BenzolRingC1ExposedNotC6Nitro_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_BenzolRingC1ExposedNotC6Nitro.instance.pat_BenzolRingC1ExposedNotC6Nitro; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRingC1ExposedNotC6Nitro(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRingC1ExposedNotC6Nitro(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRingC1ExposedNotC6Nitro nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRingC1ExposedNotC6Nitro cur = this;
				while(cur != null) {
					Match_BenzolRingC1ExposedNotC6Nitro next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRingC1ExposedNotC6Nitro that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
			}

			public Match_BenzolRingC1ExposedNotC6Nitro(Match_BenzolRingC1ExposedNotC6Nitro that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRingC1ExposedNotC6Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
			}

			public Match_BenzolRingC1ExposedNotC6Nitro(Match_BenzolRingC1ExposedNotC6Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRingC1ExposedNotC6Nitro()
			{
			}

			public bool IsEqual(Match_BenzolRingC1ExposedNotC6Nitro that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				return true;
			}
		}

		public class Match_BenzolRingC1ExposedNotC6Nitro_neg_0 : GRGEN_LGSP.MatchListElement<Match_BenzolRingC1ExposedNotC6Nitro_neg_0>, IMatch_BenzolRingC1ExposedNotC6Nitro_neg_0
		{
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n { get { return (GRGEN_MODEL.IN)_node_n; } set { _node_n = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node0 { get { return (GRGEN_MODEL.IO)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node1 { get { return (GRGEN_MODEL.IO)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c6;
			public GRGEN_LGSP.LGSPNode _node_n;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums { @c6, @n, @_node0, @_node1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 4; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums.@c6: return _node_c6;
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums.@n: return _node_n;
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums.@_node0: return _node__node0;
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_NodeNums.@_node1: return _node__node1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c6": return _node_c6;
				case "n": return _node_n;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n": _node_n = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_EdgeNums { @_edge0, @_edge1, @_edge2, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 3; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_EdgeNums.@_edge0: return _edge__edge0;
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_EdgeNums.@_edge1: return _edge__edge1;
				case (int)BenzolRingC1ExposedNotC6Nitro_neg_0_EdgeNums.@_edge2: return _edge__edge2;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRingC1ExposedNotC6Nitro_neg_0_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_BenzolRingC1ExposedNotC6Nitro.instance.BenzolRingC1ExposedNotC6Nitro_neg_0; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRingC1ExposedNotC6Nitro_neg_0(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRingC1ExposedNotC6Nitro_neg_0(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRingC1ExposedNotC6Nitro_neg_0 nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRingC1ExposedNotC6Nitro_neg_0 cur = this;
				while(cur != null) {
					Match_BenzolRingC1ExposedNotC6Nitro_neg_0 next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRingC1ExposedNotC6Nitro_neg_0 that)
			{
				_node_c6 = that._node_c6;
				_node_n = that._node_n;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
			}

			public Match_BenzolRingC1ExposedNotC6Nitro_neg_0(Match_BenzolRingC1ExposedNotC6Nitro_neg_0 that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRingC1ExposedNotC6Nitro_neg_0 that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_node_n = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
			}

			public Match_BenzolRingC1ExposedNotC6Nitro_neg_0(Match_BenzolRingC1ExposedNotC6Nitro_neg_0 that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRingC1ExposedNotC6Nitro_neg_0()
			{
			}

			public bool IsEqual(Match_BenzolRingC1ExposedNotC6Nitro_neg_0 that)
			{
				if(that==null) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_node_n != that._node_n) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				return true;
			}
		}

	}


	public class Pattern_Oxygen : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_Oxygen instance = null;
		public static Pattern_Oxygen Instance { get { if(instance==null) { instance = new Pattern_Oxygen(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Oxygen_node_o1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Oxygen_node_o2_AllowedTypes = null;
		public static bool[] Oxygen_node_o1_IsAllowedType = null;
		public static bool[] Oxygen_node_o2_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] Oxygen_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Oxygen_edge__edge1_AllowedTypes = null;
		public static bool[] Oxygen_edge__edge0_IsAllowedType = null;
		public static bool[] Oxygen_edge__edge1_IsAllowedType = null;
		public enum Oxygen_NodeNums { @o1, @o2, };
		public enum Oxygen_EdgeNums { @_edge0, @_edge1, };
		public enum Oxygen_VariableNums { };
		public enum Oxygen_SubNums { };
		public enum Oxygen_AltNums { };
		public enum Oxygen_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Oxygen;


		private Pattern_Oxygen()
			: base("Oxygen",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] Oxygen_isNodeHomomorphicGlobal = new bool[2, 2] {
				{ false, false, },
				{ false, false, },
			};
			bool[,] Oxygen_isEdgeHomomorphicGlobal = new bool[2, 2] {
				{ false, false, },
				{ false, false, },
			};
			bool[] Oxygen_isNodeTotallyHomomorphic = new bool[2] { false, false,  };
			bool[] Oxygen_isEdgeTotallyHomomorphic = new bool[2] { false, false,  };
			GRGEN_LGSP.PatternNode Oxygen_node_o1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "Oxygen_node_o1", "o1", Oxygen_node_o1_AllowedTypes, Oxygen_node_o1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Oxygen_node_o2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "Oxygen_node_o2", "o2", Oxygen_node_o2_AllowedTypes, Oxygen_node_o2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Oxygen_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Oxygen_edge__edge0", "_edge0", Oxygen_edge__edge0_AllowedTypes, Oxygen_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Oxygen_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Oxygen_edge__edge1", "_edge1", Oxygen_edge__edge1_AllowedTypes, Oxygen_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_Oxygen = new GRGEN_LGSP.PatternGraph(
				"Oxygen",
				"",
				null, "Oxygen",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Oxygen_node_o1, Oxygen_node_o2 }, 
				new GRGEN_LGSP.PatternEdge[] { Oxygen_edge__edge0, Oxygen_edge__edge1 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[2, 2] {
					{ true, false, },
					{ false, true, },
				},
				new bool[2, 2] {
					{ true, false, },
					{ false, true, },
				},
				Oxygen_isNodeHomomorphicGlobal,
				Oxygen_isEdgeHomomorphicGlobal,
				Oxygen_isNodeTotallyHomomorphic,
				Oxygen_isEdgeTotallyHomomorphic
			);
			pat_Oxygen.edgeToSourceNode.Add(Oxygen_edge__edge0, Oxygen_node_o1);
			pat_Oxygen.edgeToTargetNode.Add(Oxygen_edge__edge0, Oxygen_node_o2);
			pat_Oxygen.edgeToSourceNode.Add(Oxygen_edge__edge1, Oxygen_node_o2);
			pat_Oxygen.edgeToTargetNode.Add(Oxygen_edge__edge1, Oxygen_node_o1);

			Oxygen_node_o1.pointOfDefinition = pat_Oxygen;
			Oxygen_node_o2.pointOfDefinition = pat_Oxygen;
			Oxygen_edge__edge0.pointOfDefinition = pat_Oxygen;
			Oxygen_edge__edge1.pointOfDefinition = pat_Oxygen;

			patternGraph = pat_Oxygen;
		}


		public void Oxygen_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_Oxygen_addedNodeNames );
			GRGEN_MODEL.@O node_o1 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node_o2 = GRGEN_MODEL.@O.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_Oxygen_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_o1, node_o2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_o2, node_o1);
		}
		private static string[] create_Oxygen_addedNodeNames = new string[] { "o1", "o2" };
		private static string[] create_Oxygen_addedEdgeNames = new string[] { "_edge0", "_edge1" };

		public void Oxygen_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_Oxygen curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_o1 = curMatch._node_o1;
			GRGEN_LGSP.LGSPNode node_o2 = curMatch._node_o2;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.RemoveEdges(node_o1);
			graph.Remove(node_o1);
			graph.RemoveEdges(node_o2);
			graph.Remove(node_o2);
		}

		static Pattern_Oxygen() {
		}

		public interface IMatch_Oxygen : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IO node_o1 { get; set; }
			GRGEN_MODEL.IO node_o2 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Oxygen : GRGEN_LGSP.MatchListElement<Match_Oxygen>, IMatch_Oxygen
		{
			public GRGEN_MODEL.IO node_o1 { get { return (GRGEN_MODEL.IO)_node_o1; } set { _node_o1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node_o2 { get { return (GRGEN_MODEL.IO)_node_o2; } set { _node_o2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_o1;
			public GRGEN_LGSP.LGSPNode _node_o2;
			public enum Oxygen_NodeNums { @o1, @o2, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 2; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Oxygen_NodeNums.@o1: return _node_o1;
				case (int)Oxygen_NodeNums.@o2: return _node_o2;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "o1": return _node_o1;
				case "o2": return _node_o2;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "o1": _node_o1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "o2": _node_o2 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public enum Oxygen_EdgeNums { @_edge0, @_edge1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 2; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)Oxygen_EdgeNums.@_edge0: return _edge__edge0;
				case (int)Oxygen_EdgeNums.@_edge1: return _edge__edge1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum Oxygen_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Oxygen_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Oxygen_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Oxygen_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Oxygen_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_Oxygen.instance.pat_Oxygen; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Oxygen(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Oxygen(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Oxygen nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Oxygen cur = this;
				while(cur != null) {
					Match_Oxygen next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Oxygen that)
			{
				_node_o1 = that._node_o1;
				_node_o2 = that._node_o2;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
			}

			public Match_Oxygen(Match_Oxygen that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Oxygen that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_o1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_o1];
				_node_o2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_o2];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
			}

			public Match_Oxygen(Match_Oxygen that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Oxygen()
			{
			}

			public bool IsEqual(Match_Oxygen that)
			{
				if(that==null) return false;
				if(_node_o1 != that._node_o1) return false;
				if(_node_o2 != that._node_o2) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				return true;
			}
		}

	}


	public class Pattern_Hydrogen : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_Hydrogen instance = null;
		public static Pattern_Hydrogen Instance { get { if(instance==null) { instance = new Pattern_Hydrogen(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Hydrogen_node_anchor_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Hydrogen_node__node0_AllowedTypes = null;
		public static bool[] Hydrogen_node_anchor_IsAllowedType = null;
		public static bool[] Hydrogen_node__node0_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] Hydrogen_edge__edge0_AllowedTypes = null;
		public static bool[] Hydrogen_edge__edge0_IsAllowedType = null;
		public enum Hydrogen_NodeNums { @anchor, @_node0, };
		public enum Hydrogen_EdgeNums { @_edge0, };
		public enum Hydrogen_VariableNums { };
		public enum Hydrogen_SubNums { };
		public enum Hydrogen_AltNums { };
		public enum Hydrogen_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Hydrogen;


		private Pattern_Hydrogen()
			: base("Hydrogen",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "Hydrogen_node_anchor", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] Hydrogen_isNodeHomomorphicGlobal = new bool[2, 2] {
				{ false, false, },
				{ false, false, },
			};
			bool[,] Hydrogen_isEdgeHomomorphicGlobal = new bool[1, 1] {
				{ false, },
			};
			bool[] Hydrogen_isNodeTotallyHomomorphic = new bool[2] { false, false,  };
			bool[] Hydrogen_isEdgeTotallyHomomorphic = new bool[1] { false,  };
			GRGEN_LGSP.PatternNode Hydrogen_node_anchor = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Hydrogen_node_anchor", "anchor", Hydrogen_node_anchor_AllowedTypes, Hydrogen_node_anchor_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Hydrogen_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "Hydrogen_node__node0", "_node0", Hydrogen_node__node0_AllowedTypes, Hydrogen_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Hydrogen_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Hydrogen_edge__edge0", "_edge0", Hydrogen_edge__edge0_AllowedTypes, Hydrogen_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_Hydrogen = new GRGEN_LGSP.PatternGraph(
				"Hydrogen",
				"",
				null, "Hydrogen",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Hydrogen_node_anchor, Hydrogen_node__node0 }, 
				new GRGEN_LGSP.PatternEdge[] { Hydrogen_edge__edge0 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[2, 2] {
					{ true, false, },
					{ false, true, },
				},
				new bool[1, 1] {
					{ true, },
				},
				Hydrogen_isNodeHomomorphicGlobal,
				Hydrogen_isEdgeHomomorphicGlobal,
				Hydrogen_isNodeTotallyHomomorphic,
				Hydrogen_isEdgeTotallyHomomorphic
			);
			pat_Hydrogen.edgeToSourceNode.Add(Hydrogen_edge__edge0, Hydrogen_node_anchor);
			pat_Hydrogen.edgeToTargetNode.Add(Hydrogen_edge__edge0, Hydrogen_node__node0);

			Hydrogen_node_anchor.pointOfDefinition = null;
			Hydrogen_node__node0.pointOfDefinition = pat_Hydrogen;
			Hydrogen_edge__edge0.pointOfDefinition = pat_Hydrogen;

			patternGraph = pat_Hydrogen;
		}


		public void Hydrogen_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_anchor)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_Hydrogen_addedNodeNames );
			GRGEN_MODEL.@H node__node0 = GRGEN_MODEL.@H.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_Hydrogen_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_anchor, node__node0);
		}
		private static string[] create_Hydrogen_addedNodeNames = new string[] { "_node0" };
		private static string[] create_Hydrogen_addedEdgeNames = new string[] { "_edge0" };

		public void Hydrogen_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_Hydrogen curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node__node0 = curMatch._node__node0;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			graph.Remove(edge__edge0);
			graph.RemoveEdges(node__node0);
			graph.Remove(node__node0);
		}

		static Pattern_Hydrogen() {
		}

		public interface IMatch_Hydrogen : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_anchor { get; set; }
			GRGEN_MODEL.IH node__node0 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Hydrogen : GRGEN_LGSP.MatchListElement<Match_Hydrogen>, IMatch_Hydrogen
		{
			public GRGEN_MODEL.IC node_anchor { get { return (GRGEN_MODEL.IC)_node_anchor; } set { _node_anchor = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node0 { get { return (GRGEN_MODEL.IH)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_anchor;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public enum Hydrogen_NodeNums { @anchor, @_node0, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 2; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Hydrogen_NodeNums.@anchor: return _node_anchor;
				case (int)Hydrogen_NodeNums.@_node0: return _node__node0;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "anchor": return _node_anchor;
				case "_node0": return _node__node0;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "anchor": _node_anchor = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public enum Hydrogen_EdgeNums { @_edge0, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 1; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)Hydrogen_EdgeNums.@_edge0: return _edge__edge0;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum Hydrogen_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Hydrogen_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydrogen_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydrogen_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydrogen_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_Hydrogen.instance.pat_Hydrogen; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Hydrogen(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Hydrogen(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Hydrogen nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Hydrogen cur = this;
				while(cur != null) {
					Match_Hydrogen next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Hydrogen that)
			{
				_node_anchor = that._node_anchor;
				_node__node0 = that._node__node0;
				_edge__edge0 = that._edge__edge0;
			}

			public Match_Hydrogen(Match_Hydrogen that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Hydrogen that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_anchor = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_anchor];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
			}

			public Match_Hydrogen(Match_Hydrogen that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Hydrogen()
			{
			}

			public bool IsEqual(Match_Hydrogen that)
			{
				if(that==null) return false;
				if(_node_anchor != that._node_anchor) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				return true;
			}
		}

	}


	public class Pattern_Hydroxyl : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_Hydroxyl instance = null;
		public static Pattern_Hydroxyl Instance { get { if(instance==null) { instance = new Pattern_Hydroxyl(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Hydroxyl_node_anchor_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Hydroxyl_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Hydroxyl_node__node1_AllowedTypes = null;
		public static bool[] Hydroxyl_node_anchor_IsAllowedType = null;
		public static bool[] Hydroxyl_node__node0_IsAllowedType = null;
		public static bool[] Hydroxyl_node__node1_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] Hydroxyl_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Hydroxyl_edge__edge1_AllowedTypes = null;
		public static bool[] Hydroxyl_edge__edge0_IsAllowedType = null;
		public static bool[] Hydroxyl_edge__edge1_IsAllowedType = null;
		public enum Hydroxyl_NodeNums { @anchor, @_node0, @_node1, };
		public enum Hydroxyl_EdgeNums { @_edge0, @_edge1, };
		public enum Hydroxyl_VariableNums { };
		public enum Hydroxyl_SubNums { };
		public enum Hydroxyl_AltNums { };
		public enum Hydroxyl_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Hydroxyl;


		private Pattern_Hydroxyl()
			: base("Hydroxyl",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "Hydroxyl_node_anchor", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] Hydroxyl_isNodeHomomorphicGlobal = new bool[3, 3] {
				{ false, false, false, },
				{ false, false, false, },
				{ false, false, false, },
			};
			bool[,] Hydroxyl_isEdgeHomomorphicGlobal = new bool[2, 2] {
				{ false, false, },
				{ false, false, },
			};
			bool[] Hydroxyl_isNodeTotallyHomomorphic = new bool[3] { false, false, false,  };
			bool[] Hydroxyl_isEdgeTotallyHomomorphic = new bool[2] { false, false,  };
			GRGEN_LGSP.PatternNode Hydroxyl_node_anchor = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Hydroxyl_node_anchor", "anchor", Hydroxyl_node_anchor_AllowedTypes, Hydroxyl_node_anchor_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Hydroxyl_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "Hydroxyl_node__node0", "_node0", Hydroxyl_node__node0_AllowedTypes, Hydroxyl_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Hydroxyl_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "Hydroxyl_node__node1", "_node1", Hydroxyl_node__node1_AllowedTypes, Hydroxyl_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Hydroxyl_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Hydroxyl_edge__edge0", "_edge0", Hydroxyl_edge__edge0_AllowedTypes, Hydroxyl_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Hydroxyl_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Hydroxyl_edge__edge1", "_edge1", Hydroxyl_edge__edge1_AllowedTypes, Hydroxyl_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_Hydroxyl = new GRGEN_LGSP.PatternGraph(
				"Hydroxyl",
				"",
				null, "Hydroxyl",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Hydroxyl_node_anchor, Hydroxyl_node__node0, Hydroxyl_node__node1 }, 
				new GRGEN_LGSP.PatternEdge[] { Hydroxyl_edge__edge0, Hydroxyl_edge__edge1 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[3, 3] {
					{ true, false, false, },
					{ false, true, false, },
					{ false, false, true, },
				},
				new bool[2, 2] {
					{ true, false, },
					{ false, true, },
				},
				Hydroxyl_isNodeHomomorphicGlobal,
				Hydroxyl_isEdgeHomomorphicGlobal,
				Hydroxyl_isNodeTotallyHomomorphic,
				Hydroxyl_isEdgeTotallyHomomorphic
			);
			pat_Hydroxyl.edgeToSourceNode.Add(Hydroxyl_edge__edge0, Hydroxyl_node_anchor);
			pat_Hydroxyl.edgeToTargetNode.Add(Hydroxyl_edge__edge0, Hydroxyl_node__node0);
			pat_Hydroxyl.edgeToSourceNode.Add(Hydroxyl_edge__edge1, Hydroxyl_node__node0);
			pat_Hydroxyl.edgeToTargetNode.Add(Hydroxyl_edge__edge1, Hydroxyl_node__node1);

			Hydroxyl_node_anchor.pointOfDefinition = null;
			Hydroxyl_node__node0.pointOfDefinition = pat_Hydroxyl;
			Hydroxyl_node__node1.pointOfDefinition = pat_Hydroxyl;
			Hydroxyl_edge__edge0.pointOfDefinition = pat_Hydroxyl;
			Hydroxyl_edge__edge1.pointOfDefinition = pat_Hydroxyl;

			patternGraph = pat_Hydroxyl;
		}


		public void Hydroxyl_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_anchor)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_Hydroxyl_addedNodeNames );
			GRGEN_MODEL.@O node__node0 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node1 = GRGEN_MODEL.@H.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_Hydroxyl_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_anchor, node__node0);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node__node0, node__node1);
		}
		private static string[] create_Hydroxyl_addedNodeNames = new string[] { "_node0", "_node1" };
		private static string[] create_Hydroxyl_addedEdgeNames = new string[] { "_edge0", "_edge1" };

		public void Hydroxyl_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_Hydroxyl curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node__node0 = curMatch._node__node0;
			GRGEN_LGSP.LGSPNode node__node1 = curMatch._node__node1;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.RemoveEdges(node__node0);
			graph.Remove(node__node0);
			graph.RemoveEdges(node__node1);
			graph.Remove(node__node1);
		}

		static Pattern_Hydroxyl() {
		}

		public interface IMatch_Hydroxyl : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_anchor { get; set; }
			GRGEN_MODEL.IO node__node0 { get; set; }
			GRGEN_MODEL.IH node__node1 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Hydroxyl : GRGEN_LGSP.MatchListElement<Match_Hydroxyl>, IMatch_Hydroxyl
		{
			public GRGEN_MODEL.IC node_anchor { get { return (GRGEN_MODEL.IC)_node_anchor; } set { _node_anchor = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node0 { get { return (GRGEN_MODEL.IO)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node1 { get { return (GRGEN_MODEL.IH)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_anchor;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public enum Hydroxyl_NodeNums { @anchor, @_node0, @_node1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 3; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Hydroxyl_NodeNums.@anchor: return _node_anchor;
				case (int)Hydroxyl_NodeNums.@_node0: return _node__node0;
				case (int)Hydroxyl_NodeNums.@_node1: return _node__node1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "anchor": return _node_anchor;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "anchor": _node_anchor = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public enum Hydroxyl_EdgeNums { @_edge0, @_edge1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 2; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)Hydroxyl_EdgeNums.@_edge0: return _edge__edge0;
				case (int)Hydroxyl_EdgeNums.@_edge1: return _edge__edge1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum Hydroxyl_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Hydroxyl_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydroxyl_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydroxyl_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Hydroxyl_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_Hydroxyl.instance.pat_Hydroxyl; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Hydroxyl(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Hydroxyl(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Hydroxyl nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Hydroxyl cur = this;
				while(cur != null) {
					Match_Hydroxyl next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Hydroxyl that)
			{
				_node_anchor = that._node_anchor;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
			}

			public Match_Hydroxyl(Match_Hydroxyl that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Hydroxyl that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_anchor = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_anchor];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
			}

			public Match_Hydroxyl(Match_Hydroxyl that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Hydroxyl()
			{
			}

			public bool IsEqual(Match_Hydroxyl that)
			{
				if(that==null) return false;
				if(_node_anchor != that._node_anchor) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				return true;
			}
		}

	}


	public class Pattern_Methyl : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_Methyl instance = null;
		public static Pattern_Methyl Instance { get { if(instance==null) { instance = new Pattern_Methyl(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Methyl_node_anchor_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Methyl_node_c_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Methyl_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Methyl_node__node1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Methyl_node__node2_AllowedTypes = null;
		public static bool[] Methyl_node_anchor_IsAllowedType = null;
		public static bool[] Methyl_node_c_IsAllowedType = null;
		public static bool[] Methyl_node__node0_IsAllowedType = null;
		public static bool[] Methyl_node__node1_IsAllowedType = null;
		public static bool[] Methyl_node__node2_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] Methyl_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Methyl_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Methyl_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Methyl_edge__edge3_AllowedTypes = null;
		public static bool[] Methyl_edge__edge0_IsAllowedType = null;
		public static bool[] Methyl_edge__edge1_IsAllowedType = null;
		public static bool[] Methyl_edge__edge2_IsAllowedType = null;
		public static bool[] Methyl_edge__edge3_IsAllowedType = null;
		public enum Methyl_NodeNums { @anchor, @c, @_node0, @_node1, @_node2, };
		public enum Methyl_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, };
		public enum Methyl_VariableNums { };
		public enum Methyl_SubNums { };
		public enum Methyl_AltNums { };
		public enum Methyl_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Methyl;


		private Pattern_Methyl()
			: base("Methyl",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "Methyl_node_anchor", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] Methyl_isNodeHomomorphicGlobal = new bool[5, 5] {
				{ false, false, false, false, false, },
				{ false, false, false, false, false, },
				{ false, false, false, false, false, },
				{ false, false, false, false, false, },
				{ false, false, false, false, false, },
			};
			bool[,] Methyl_isEdgeHomomorphicGlobal = new bool[4, 4] {
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
			};
			bool[] Methyl_isNodeTotallyHomomorphic = new bool[5] { false, false, false, false, false,  };
			bool[] Methyl_isEdgeTotallyHomomorphic = new bool[4] { false, false, false, false,  };
			GRGEN_LGSP.PatternNode Methyl_node_anchor = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Methyl_node_anchor", "anchor", Methyl_node_anchor_AllowedTypes, Methyl_node_anchor_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Methyl_node_c = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Methyl_node_c", "c", Methyl_node_c_AllowedTypes, Methyl_node_c_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Methyl_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "Methyl_node__node0", "_node0", Methyl_node__node0_AllowedTypes, Methyl_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Methyl_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "Methyl_node__node1", "_node1", Methyl_node__node1_AllowedTypes, Methyl_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Methyl_node__node2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "Methyl_node__node2", "_node2", Methyl_node__node2_AllowedTypes, Methyl_node__node2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Methyl_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Methyl_edge__edge0", "_edge0", Methyl_edge__edge0_AllowedTypes, Methyl_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Methyl_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Methyl_edge__edge1", "_edge1", Methyl_edge__edge1_AllowedTypes, Methyl_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Methyl_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Methyl_edge__edge2", "_edge2", Methyl_edge__edge2_AllowedTypes, Methyl_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Methyl_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Methyl_edge__edge3", "_edge3", Methyl_edge__edge3_AllowedTypes, Methyl_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_Methyl = new GRGEN_LGSP.PatternGraph(
				"Methyl",
				"",
				null, "Methyl",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Methyl_node_anchor, Methyl_node_c, Methyl_node__node0, Methyl_node__node1, Methyl_node__node2 }, 
				new GRGEN_LGSP.PatternEdge[] { Methyl_edge__edge0, Methyl_edge__edge1, Methyl_edge__edge2, Methyl_edge__edge3 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[5, 5] {
					{ true, false, false, false, false, },
					{ false, true, false, false, false, },
					{ false, false, true, false, false, },
					{ false, false, false, true, false, },
					{ false, false, false, false, true, },
				},
				new bool[4, 4] {
					{ true, false, false, false, },
					{ false, true, false, false, },
					{ false, false, true, false, },
					{ false, false, false, true, },
				},
				Methyl_isNodeHomomorphicGlobal,
				Methyl_isEdgeHomomorphicGlobal,
				Methyl_isNodeTotallyHomomorphic,
				Methyl_isEdgeTotallyHomomorphic
			);
			pat_Methyl.edgeToSourceNode.Add(Methyl_edge__edge0, Methyl_node_anchor);
			pat_Methyl.edgeToTargetNode.Add(Methyl_edge__edge0, Methyl_node_c);
			pat_Methyl.edgeToSourceNode.Add(Methyl_edge__edge1, Methyl_node_c);
			pat_Methyl.edgeToTargetNode.Add(Methyl_edge__edge1, Methyl_node__node0);
			pat_Methyl.edgeToSourceNode.Add(Methyl_edge__edge2, Methyl_node_c);
			pat_Methyl.edgeToTargetNode.Add(Methyl_edge__edge2, Methyl_node__node1);
			pat_Methyl.edgeToSourceNode.Add(Methyl_edge__edge3, Methyl_node_c);
			pat_Methyl.edgeToTargetNode.Add(Methyl_edge__edge3, Methyl_node__node2);

			Methyl_node_anchor.pointOfDefinition = null;
			Methyl_node_c.pointOfDefinition = pat_Methyl;
			Methyl_node__node0.pointOfDefinition = pat_Methyl;
			Methyl_node__node1.pointOfDefinition = pat_Methyl;
			Methyl_node__node2.pointOfDefinition = pat_Methyl;
			Methyl_edge__edge0.pointOfDefinition = pat_Methyl;
			Methyl_edge__edge1.pointOfDefinition = pat_Methyl;
			Methyl_edge__edge2.pointOfDefinition = pat_Methyl;
			Methyl_edge__edge3.pointOfDefinition = pat_Methyl;

			patternGraph = pat_Methyl;
		}


		public void Methyl_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_anchor)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_Methyl_addedNodeNames );
			GRGEN_MODEL.@C node_c = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@H node__node0 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node1 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node2 = GRGEN_MODEL.@H.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_Methyl_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_anchor, node_c);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node0);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node1);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node2);
		}
		private static string[] create_Methyl_addedNodeNames = new string[] { "c", "_node0", "_node1", "_node2" };
		private static string[] create_Methyl_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3" };

		public void Methyl_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_Methyl curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_c = curMatch._node_c;
			GRGEN_LGSP.LGSPNode node__node0 = curMatch._node__node0;
			GRGEN_LGSP.LGSPNode node__node1 = curMatch._node__node1;
			GRGEN_LGSP.LGSPNode node__node2 = curMatch._node__node2;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			GRGEN_LGSP.LGSPEdge edge__edge3 = curMatch._edge__edge3;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.Remove(edge__edge3);
			graph.RemoveEdges(node_c);
			graph.Remove(node_c);
			graph.RemoveEdges(node__node0);
			graph.Remove(node__node0);
			graph.RemoveEdges(node__node1);
			graph.Remove(node__node1);
			graph.RemoveEdges(node__node2);
			graph.Remove(node__node2);
		}

		static Pattern_Methyl() {
		}

		public interface IMatch_Methyl : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_anchor { get; set; }
			GRGEN_MODEL.IC node_c { get; set; }
			GRGEN_MODEL.IH node__node0 { get; set; }
			GRGEN_MODEL.IH node__node1 { get; set; }
			GRGEN_MODEL.IH node__node2 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Methyl : GRGEN_LGSP.MatchListElement<Match_Methyl>, IMatch_Methyl
		{
			public GRGEN_MODEL.IC node_anchor { get { return (GRGEN_MODEL.IC)_node_anchor; } set { _node_anchor = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c { get { return (GRGEN_MODEL.IC)_node_c; } set { _node_c = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node0 { get { return (GRGEN_MODEL.IH)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node1 { get { return (GRGEN_MODEL.IH)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node2 { get { return (GRGEN_MODEL.IH)_node__node2; } set { _node__node2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_anchor;
			public GRGEN_LGSP.LGSPNode _node_c;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public GRGEN_LGSP.LGSPNode _node__node2;
			public enum Methyl_NodeNums { @anchor, @c, @_node0, @_node1, @_node2, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 5; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Methyl_NodeNums.@anchor: return _node_anchor;
				case (int)Methyl_NodeNums.@c: return _node_c;
				case (int)Methyl_NodeNums.@_node0: return _node__node0;
				case (int)Methyl_NodeNums.@_node1: return _node__node1;
				case (int)Methyl_NodeNums.@_node2: return _node__node2;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "anchor": return _node_anchor;
				case "c": return _node_c;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				case "_node2": return _node__node2;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "anchor": _node_anchor = (GRGEN_LGSP.LGSPNode)value; break;
				case "c": _node_c = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node2": _node__node2 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public enum Methyl_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 4; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)Methyl_EdgeNums.@_edge0: return _edge__edge0;
				case (int)Methyl_EdgeNums.@_edge1: return _edge__edge1;
				case (int)Methyl_EdgeNums.@_edge2: return _edge__edge2;
				case (int)Methyl_EdgeNums.@_edge3: return _edge__edge3;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum Methyl_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Methyl_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Methyl_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Methyl_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Methyl_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_Methyl.instance.pat_Methyl; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Methyl(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Methyl(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Methyl nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Methyl cur = this;
				while(cur != null) {
					Match_Methyl next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Methyl that)
			{
				_node_anchor = that._node_anchor;
				_node_c = that._node_c;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_node__node2 = that._node__node2;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
			}

			public Match_Methyl(Match_Methyl that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Methyl that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_anchor = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_anchor];
				_node_c = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_node__node2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node2];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
			}

			public Match_Methyl(Match_Methyl that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Methyl()
			{
			}

			public bool IsEqual(Match_Methyl that)
			{
				if(that==null) return false;
				if(_node_anchor != that._node_anchor) return false;
				if(_node_c != that._node_c) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_node__node2 != that._node__node2) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				return true;
			}
		}

	}


	public class Pattern_Nitro : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_Nitro instance = null;
		public static Pattern_Nitro Instance { get { if(instance==null) { instance = new Pattern_Nitro(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Nitro_node_anchor_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Nitro_node_n_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Nitro_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Nitro_node__node1_AllowedTypes = null;
		public static bool[] Nitro_node_anchor_IsAllowedType = null;
		public static bool[] Nitro_node_n_IsAllowedType = null;
		public static bool[] Nitro_node__node0_IsAllowedType = null;
		public static bool[] Nitro_node__node1_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] Nitro_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Nitro_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] Nitro_edge__edge2_AllowedTypes = null;
		public static bool[] Nitro_edge__edge0_IsAllowedType = null;
		public static bool[] Nitro_edge__edge1_IsAllowedType = null;
		public static bool[] Nitro_edge__edge2_IsAllowedType = null;
		public enum Nitro_NodeNums { @anchor, @n, @_node0, @_node1, };
		public enum Nitro_EdgeNums { @_edge0, @_edge1, @_edge2, };
		public enum Nitro_VariableNums { };
		public enum Nitro_SubNums { };
		public enum Nitro_AltNums { };
		public enum Nitro_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Nitro;


		private Pattern_Nitro()
			: base("Nitro",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "Nitro_node_anchor", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] Nitro_isNodeHomomorphicGlobal = new bool[4, 4] {
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
				{ false, false, false, false, },
			};
			bool[,] Nitro_isEdgeHomomorphicGlobal = new bool[3, 3] {
				{ false, false, false, },
				{ false, false, false, },
				{ false, false, false, },
			};
			bool[] Nitro_isNodeTotallyHomomorphic = new bool[4] { false, false, false, false,  };
			bool[] Nitro_isEdgeTotallyHomomorphic = new bool[3] { false, false, false,  };
			GRGEN_LGSP.PatternNode Nitro_node_anchor = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Nitro_node_anchor", "anchor", Nitro_node_anchor_AllowedTypes, Nitro_node_anchor_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Nitro_node_n = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "Nitro_node_n", "n", Nitro_node_n_AllowedTypes, Nitro_node_n_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Nitro_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "Nitro_node__node0", "_node0", Nitro_node__node0_AllowedTypes, Nitro_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Nitro_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "Nitro_node__node1", "_node1", Nitro_node__node1_AllowedTypes, Nitro_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Nitro_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Nitro_edge__edge0", "_edge0", Nitro_edge__edge0_AllowedTypes, Nitro_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Nitro_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Nitro_edge__edge1", "_edge1", Nitro_edge__edge1_AllowedTypes, Nitro_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge Nitro_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "Nitro_edge__edge2", "_edge2", Nitro_edge__edge2_AllowedTypes, Nitro_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_Nitro = new GRGEN_LGSP.PatternGraph(
				"Nitro",
				"",
				null, "Nitro",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Nitro_node_anchor, Nitro_node_n, Nitro_node__node0, Nitro_node__node1 }, 
				new GRGEN_LGSP.PatternEdge[] { Nitro_edge__edge0, Nitro_edge__edge1, Nitro_edge__edge2 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[4, 4] {
					{ true, false, false, false, },
					{ false, true, false, false, },
					{ false, false, true, false, },
					{ false, false, false, true, },
				},
				new bool[3, 3] {
					{ true, false, false, },
					{ false, true, false, },
					{ false, false, true, },
				},
				Nitro_isNodeHomomorphicGlobal,
				Nitro_isEdgeHomomorphicGlobal,
				Nitro_isNodeTotallyHomomorphic,
				Nitro_isEdgeTotallyHomomorphic
			);
			pat_Nitro.edgeToSourceNode.Add(Nitro_edge__edge0, Nitro_node_anchor);
			pat_Nitro.edgeToTargetNode.Add(Nitro_edge__edge0, Nitro_node_n);
			pat_Nitro.edgeToSourceNode.Add(Nitro_edge__edge1, Nitro_node_n);
			pat_Nitro.edgeToTargetNode.Add(Nitro_edge__edge1, Nitro_node__node0);
			pat_Nitro.edgeToSourceNode.Add(Nitro_edge__edge2, Nitro_node_n);
			pat_Nitro.edgeToTargetNode.Add(Nitro_edge__edge2, Nitro_node__node1);

			Nitro_node_anchor.pointOfDefinition = null;
			Nitro_node_n.pointOfDefinition = pat_Nitro;
			Nitro_node__node0.pointOfDefinition = pat_Nitro;
			Nitro_node__node1.pointOfDefinition = pat_Nitro;
			Nitro_edge__edge0.pointOfDefinition = pat_Nitro;
			Nitro_edge__edge1.pointOfDefinition = pat_Nitro;
			Nitro_edge__edge2.pointOfDefinition = pat_Nitro;

			patternGraph = pat_Nitro;
		}


		public void Nitro_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_anchor)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_Nitro_addedNodeNames );
			GRGEN_MODEL.@N node_n = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node0 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node1 = GRGEN_MODEL.@O.CreateNode(graph);
			graph.SettingAddedEdgeNames( create_Nitro_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_anchor, node_n);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n, node__node0);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n, node__node1);
		}
		private static string[] create_Nitro_addedNodeNames = new string[] { "n", "_node0", "_node1" };
		private static string[] create_Nitro_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2" };

		public void Nitro_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_Nitro curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_LGSP.LGSPNode node_n = curMatch._node_n;
			GRGEN_LGSP.LGSPNode node__node0 = curMatch._node__node0;
			GRGEN_LGSP.LGSPNode node__node1 = curMatch._node__node1;
			GRGEN_LGSP.LGSPEdge edge__edge0 = curMatch._edge__edge0;
			GRGEN_LGSP.LGSPEdge edge__edge1 = curMatch._edge__edge1;
			GRGEN_LGSP.LGSPEdge edge__edge2 = curMatch._edge__edge2;
			graph.Remove(edge__edge0);
			graph.Remove(edge__edge1);
			graph.Remove(edge__edge2);
			graph.RemoveEdges(node_n);
			graph.Remove(node_n);
			graph.RemoveEdges(node__node0);
			graph.Remove(node__node0);
			graph.RemoveEdges(node__node1);
			graph.Remove(node__node1);
		}

		static Pattern_Nitro() {
		}

		public interface IMatch_Nitro : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_anchor { get; set; }
			GRGEN_MODEL.IN node_n { get; set; }
			GRGEN_MODEL.IO node__node0 { get; set; }
			GRGEN_MODEL.IO node__node1 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Nitro : GRGEN_LGSP.MatchListElement<Match_Nitro>, IMatch_Nitro
		{
			public GRGEN_MODEL.IC node_anchor { get { return (GRGEN_MODEL.IC)_node_anchor; } set { _node_anchor = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n { get { return (GRGEN_MODEL.IN)_node_n; } set { _node_n = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node0 { get { return (GRGEN_MODEL.IO)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node1 { get { return (GRGEN_MODEL.IO)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_anchor;
			public GRGEN_LGSP.LGSPNode _node_n;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public enum Nitro_NodeNums { @anchor, @n, @_node0, @_node1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 4; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Nitro_NodeNums.@anchor: return _node_anchor;
				case (int)Nitro_NodeNums.@n: return _node_n;
				case (int)Nitro_NodeNums.@_node0: return _node__node0;
				case (int)Nitro_NodeNums.@_node1: return _node__node1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "anchor": return _node_anchor;
				case "n": return _node_n;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "anchor": _node_anchor = (GRGEN_LGSP.LGSPNode)value; break;
				case "n": _node_n = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public enum Nitro_EdgeNums { @_edge0, @_edge1, @_edge2, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 3; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)Nitro_EdgeNums.@_edge0: return _edge__edge0;
				case (int)Nitro_EdgeNums.@_edge1: return _edge__edge1;
				case (int)Nitro_EdgeNums.@_edge2: return _edge__edge2;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum Nitro_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Nitro_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Nitro_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Nitro_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Nitro_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_Nitro.instance.pat_Nitro; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Nitro(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Nitro(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Nitro nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Nitro cur = this;
				while(cur != null) {
					Match_Nitro next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Nitro that)
			{
				_node_anchor = that._node_anchor;
				_node_n = that._node_n;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
			}

			public Match_Nitro(Match_Nitro that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_anchor = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_anchor];
				_node_n = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
			}

			public Match_Nitro(Match_Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Nitro()
			{
			}

			public bool IsEqual(Match_Nitro that)
			{
				if(that==null) return false;
				if(_node_anchor != that._node_anchor) return false;
				if(_node_n != that._node_n) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				return true;
			}
		}

	}


	public class Pattern_TriNitro : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_TriNitro instance = null;
		public static Pattern_TriNitro Instance { get { if(instance==null) { instance = new Pattern_TriNitro(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TriNitro_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TriNitro_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TriNitro_node_c6_AllowedTypes = null;
		public static bool[] TriNitro_node_c2_IsAllowedType = null;
		public static bool[] TriNitro_node_c4_IsAllowedType = null;
		public static bool[] TriNitro_node_c6_IsAllowedType = null;
		public enum TriNitro_NodeNums { @c2, @c4, @c6, };
		public enum TriNitro_EdgeNums { };
		public enum TriNitro_VariableNums { };
		public enum TriNitro_SubNums { @_sub0, @_sub1, @_sub2, };
		public enum TriNitro_AltNums { };
		public enum TriNitro_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TriNitro;


		private Pattern_TriNitro()
			: base("TriNitro",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "TriNitro_node_c2", "TriNitro_node_c4", "TriNitro_node_c6", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] TriNitro_isNodeHomomorphicGlobal = new bool[3, 3] {
				{ false, false, false, },
				{ false, false, false, },
				{ false, false, false, },
			};
			bool[,] TriNitro_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] TriNitro_isNodeTotallyHomomorphic = new bool[3] { false, false, false,  };
			bool[] TriNitro_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode TriNitro_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TriNitro_node_c2", "c2", TriNitro_node_c2_AllowedTypes, TriNitro_node_c2_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TriNitro_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TriNitro_node_c4", "c4", TriNitro_node_c4_AllowedTypes, TriNitro_node_c4_IsAllowedType, 5.5F, 1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TriNitro_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TriNitro_node_c6", "c6", TriNitro_node_c6_AllowedTypes, TriNitro_node_c6_IsAllowedType, 5.5F, 2, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding TriNitro__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TriNitro_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TriNitro_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TriNitro_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TriNitro__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TriNitro_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TriNitro_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TriNitro_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TriNitro__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TriNitro_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TriNitro_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TriNitro_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_TriNitro = new GRGEN_LGSP.PatternGraph(
				"TriNitro",
				"",
				null, "TriNitro",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TriNitro_node_c2, TriNitro_node_c4, TriNitro_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { TriNitro__sub0, TriNitro__sub1, TriNitro__sub2 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[3, 3] {
					{ true, false, false, },
					{ false, true, false, },
					{ false, false, true, },
				},
				new bool[0, 0] ,
				TriNitro_isNodeHomomorphicGlobal,
				TriNitro_isEdgeHomomorphicGlobal,
				TriNitro_isNodeTotallyHomomorphic,
				TriNitro_isEdgeTotallyHomomorphic
			);

			TriNitro_node_c2.pointOfDefinition = null;
			TriNitro_node_c4.pointOfDefinition = null;
			TriNitro_node_c6.pointOfDefinition = null;
			TriNitro__sub0.PointOfDefinition = pat_TriNitro;
			TriNitro__sub1.PointOfDefinition = pat_TriNitro;
			TriNitro__sub2.PointOfDefinition = pat_TriNitro;

			patternGraph = pat_TriNitro;
		}


		public void TriNitro_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_c2, GRGEN_LGSP.LGSPNode node_c4, GRGEN_LGSP.LGSPNode node_c6)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_TriNitro_addedNodeNames );
			graph.SettingAddedEdgeNames( create_TriNitro_addedEdgeNames );
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Create(actionEnv, (GRGEN_MODEL.@C)(node_c2));
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Create(actionEnv, (GRGEN_MODEL.@C)(node_c4));
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Create(actionEnv, (GRGEN_MODEL.@C)(node_c6));
		}
		private static string[] create_TriNitro_addedNodeNames = new string[] {  };
		private static string[] create_TriNitro_addedEdgeNames = new string[] {  };

		public void TriNitro_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_TriNitro curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Delete(actionEnv, subpattern__sub0);
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Delete(actionEnv, subpattern__sub1);
			GRGEN_ACTIONS.Pattern_Nitro.Instance.Nitro_Delete(actionEnv, subpattern__sub2);
		}

		static Pattern_TriNitro() {
		}

		public interface IMatch_TriNitro : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub2 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TriNitro : GRGEN_LGSP.MatchListElement<Match_TriNitro>, IMatch_TriNitro
		{
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum TriNitro_NodeNums { @c2, @c4, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 3; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TriNitro_NodeNums.@c2: return _node_c2;
				case (int)TriNitro_NodeNums.@c4: return _node_c4;
				case (int)TriNitro_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c2": return _node_c2;
				case "c4": return _node_c4;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum TriNitro_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum TriNitro_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub0;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub1;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub2;
			public enum TriNitro_SubNums { @_sub0, @_sub1, @_sub2, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 3; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)TriNitro_SubNums.@_sub0: return __sub0;
				case (int)TriNitro_SubNums.@_sub1: return __sub1;
				case (int)TriNitro_SubNums.@_sub2: return __sub2;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				default: return null;
				}
			}

			public enum TriNitro_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TriNitro_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TriNitro_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_TriNitro.instance.pat_TriNitro; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TriNitro(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TriNitro(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TriNitro nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TriNitro cur = this;
				while(cur != null) {
					Match_TriNitro next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TriNitro that)
			{
				_node_c2 = that._node_c2;
				_node_c4 = that._node_c4;
				_node_c6 = that._node_c6;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
			}

			public Match_TriNitro(Match_TriNitro that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TriNitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				@__sub0 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub2, oldToNewMap);
			}

			public Match_TriNitro(Match_TriNitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TriNitro()
			{
			}

			public bool IsEqual(Match_TriNitro that)
			{
				if(that==null) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c6 != that._node_c6) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				return true;
			}
		}

	}


	public class Pattern_ToluolCoreThenTriNitro : GRGEN_LGSP.LGSPMatchingPattern
	{
		private static Pattern_ToluolCoreThenTriNitro instance = null;
		public static Pattern_ToluolCoreThenTriNitro Instance { get { if(instance==null) { instance = new Pattern_ToluolCoreThenTriNitro(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] ToluolCoreThenTriNitro_node_c6_AllowedTypes = null;
		public static bool[] ToluolCoreThenTriNitro_node_c1_IsAllowedType = null;
		public static bool[] ToluolCoreThenTriNitro_node_c2_IsAllowedType = null;
		public static bool[] ToluolCoreThenTriNitro_node_c3_IsAllowedType = null;
		public static bool[] ToluolCoreThenTriNitro_node_c4_IsAllowedType = null;
		public static bool[] ToluolCoreThenTriNitro_node_c5_IsAllowedType = null;
		public static bool[] ToluolCoreThenTriNitro_node_c6_IsAllowedType = null;
		public enum ToluolCoreThenTriNitro_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum ToluolCoreThenTriNitro_EdgeNums { };
		public enum ToluolCoreThenTriNitro_VariableNums { };
		public enum ToluolCoreThenTriNitro_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, };
		public enum ToluolCoreThenTriNitro_AltNums { };
		public enum ToluolCoreThenTriNitro_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_ToluolCoreThenTriNitro;


		private Pattern_ToluolCoreThenTriNitro()
			: base("ToluolCoreThenTriNitro",
				new GRGEN_LIBGR.GrGenType[] { GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, GRGEN_MODEL.NodeType_C.typeVar, },
				new string[] { "ToluolCoreThenTriNitro_node_c1", "ToluolCoreThenTriNitro_node_c2", "ToluolCoreThenTriNitro_node_c3", "ToluolCoreThenTriNitro_node_c4", "ToluolCoreThenTriNitro_node_c5", "ToluolCoreThenTriNitro_node_c6", },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { }
			)
		{
		}
		private void initialize()
		{
			bool[,] ToluolCoreThenTriNitro_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] ToluolCoreThenTriNitro_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] ToluolCoreThenTriNitro_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] ToluolCoreThenTriNitro_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c1", "c1", ToluolCoreThenTriNitro_node_c1_AllowedTypes, ToluolCoreThenTriNitro_node_c1_IsAllowedType, 5.5F, 0, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c2", "c2", ToluolCoreThenTriNitro_node_c2_AllowedTypes, ToluolCoreThenTriNitro_node_c2_IsAllowedType, 5.5F, 1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c3", "c3", ToluolCoreThenTriNitro_node_c3_AllowedTypes, ToluolCoreThenTriNitro_node_c3_IsAllowedType, 5.5F, 2, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c4", "c4", ToluolCoreThenTriNitro_node_c4_AllowedTypes, ToluolCoreThenTriNitro_node_c4_IsAllowedType, 5.5F, 3, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c5", "c5", ToluolCoreThenTriNitro_node_c5_AllowedTypes, ToluolCoreThenTriNitro_node_c5_IsAllowedType, 5.5F, 4, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode ToluolCoreThenTriNitro_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreThenTriNitro_node_c6", "c6", ToluolCoreThenTriNitro_node_c6_AllowedTypes, ToluolCoreThenTriNitro_node_c6_IsAllowedType, 5.5F, 5, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreThenTriNitro__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreThenTriNitro_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreThenTriNitro_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreThenTriNitro__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreThenTriNitro_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreThenTriNitro_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreThenTriNitro__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreThenTriNitro_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreThenTriNitro_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreThenTriNitro__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_TriNitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c2"),
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c4"),
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreThenTriNitro_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreThenTriNitro_node_c2", "ToluolCoreThenTriNitro_node_c4", "ToluolCoreThenTriNitro_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreThenTriNitro_node_c2, ToluolCoreThenTriNitro_node_c4, ToluolCoreThenTriNitro_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_ToluolCoreThenTriNitro = new GRGEN_LGSP.PatternGraph(
				"ToluolCoreThenTriNitro",
				"",
				null, "ToluolCoreThenTriNitro",
				false, false,
				new GRGEN_LGSP.PatternNode[] { ToluolCoreThenTriNitro_node_c1, ToluolCoreThenTriNitro_node_c2, ToluolCoreThenTriNitro_node_c3, ToluolCoreThenTriNitro_node_c4, ToluolCoreThenTriNitro_node_c5, ToluolCoreThenTriNitro_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { ToluolCoreThenTriNitro__sub0, ToluolCoreThenTriNitro__sub1, ToluolCoreThenTriNitro__sub2, ToluolCoreThenTriNitro__sub3 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[0, 0] ,
				ToluolCoreThenTriNitro_isNodeHomomorphicGlobal,
				ToluolCoreThenTriNitro_isEdgeHomomorphicGlobal,
				ToluolCoreThenTriNitro_isNodeTotallyHomomorphic,
				ToluolCoreThenTriNitro_isEdgeTotallyHomomorphic
			);

			ToluolCoreThenTriNitro_node_c1.pointOfDefinition = null;
			ToluolCoreThenTriNitro_node_c2.pointOfDefinition = null;
			ToluolCoreThenTriNitro_node_c3.pointOfDefinition = null;
			ToluolCoreThenTriNitro_node_c4.pointOfDefinition = null;
			ToluolCoreThenTriNitro_node_c5.pointOfDefinition = null;
			ToluolCoreThenTriNitro_node_c6.pointOfDefinition = null;
			ToluolCoreThenTriNitro__sub0.PointOfDefinition = pat_ToluolCoreThenTriNitro;
			ToluolCoreThenTriNitro__sub1.PointOfDefinition = pat_ToluolCoreThenTriNitro;
			ToluolCoreThenTriNitro__sub2.PointOfDefinition = pat_ToluolCoreThenTriNitro;
			ToluolCoreThenTriNitro__sub3.PointOfDefinition = pat_ToluolCoreThenTriNitro;

			patternGraph = pat_ToluolCoreThenTriNitro;
		}


		public void ToluolCoreThenTriNitro_Create(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LGSP.LGSPNode node_c1, GRGEN_LGSP.LGSPNode node_c2, GRGEN_LGSP.LGSPNode node_c3, GRGEN_LGSP.LGSPNode node_c4, GRGEN_LGSP.LGSPNode node_c5, GRGEN_LGSP.LGSPNode node_c6)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			graph.SettingAddedNodeNames( create_ToluolCoreThenTriNitro_addedNodeNames );
			graph.SettingAddedEdgeNames( create_ToluolCoreThenTriNitro_addedEdgeNames );
			GRGEN_ACTIONS.Pattern_Methyl.Instance.Methyl_Create(actionEnv, (GRGEN_MODEL.@C)(node_c1));
			GRGEN_ACTIONS.Pattern_Hydrogen.Instance.Hydrogen_Create(actionEnv, (GRGEN_MODEL.@C)(node_c3));
			GRGEN_ACTIONS.Pattern_Hydrogen.Instance.Hydrogen_Create(actionEnv, (GRGEN_MODEL.@C)(node_c5));
			GRGEN_ACTIONS.Pattern_TriNitro.Instance.TriNitro_Create(actionEnv, (GRGEN_MODEL.@C)(node_c2), (GRGEN_MODEL.@C)(node_c4), (GRGEN_MODEL.@C)(node_c6));
		}
		private static string[] create_ToluolCoreThenTriNitro_addedNodeNames = new string[] {  };
		private static string[] create_ToluolCoreThenTriNitro_addedEdgeNames = new string[] {  };

		public void ToluolCoreThenTriNitro_Delete(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, Match_ToluolCoreThenTriNitro curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_TriNitro.Match_TriNitro subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Methyl.Instance.Methyl_Delete(actionEnv, subpattern__sub0);
			GRGEN_ACTIONS.Pattern_Hydrogen.Instance.Hydrogen_Delete(actionEnv, subpattern__sub1);
			GRGEN_ACTIONS.Pattern_Hydrogen.Instance.Hydrogen_Delete(actionEnv, subpattern__sub2);
			GRGEN_ACTIONS.Pattern_TriNitro.Instance.TriNitro_Delete(actionEnv, subpattern__sub3);
		}

		static Pattern_ToluolCoreThenTriNitro() {
		}

		public interface IMatch_ToluolCoreThenTriNitro : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_TriNitro.Match_TriNitro @_sub3 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_ToluolCoreThenTriNitro : GRGEN_LGSP.MatchListElement<Match_ToluolCoreThenTriNitro>, IMatch_ToluolCoreThenTriNitro
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum ToluolCoreThenTriNitro_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)ToluolCoreThenTriNitro_NodeNums.@c1: return _node_c1;
				case (int)ToluolCoreThenTriNitro_NodeNums.@c2: return _node_c2;
				case (int)ToluolCoreThenTriNitro_NodeNums.@c3: return _node_c3;
				case (int)ToluolCoreThenTriNitro_NodeNums.@c4: return _node_c4;
				case (int)ToluolCoreThenTriNitro_NodeNums.@c5: return _node_c5;
				case (int)ToluolCoreThenTriNitro_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum ToluolCoreThenTriNitro_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum ToluolCoreThenTriNitro_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_TriNitro.Match_TriNitro @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub0;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub1;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub2;
			public @GRGEN_ACTIONS.Pattern_TriNitro.Match_TriNitro @__sub3;
			public enum ToluolCoreThenTriNitro_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 4; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)ToluolCoreThenTriNitro_SubNums.@_sub0: return __sub0;
				case (int)ToluolCoreThenTriNitro_SubNums.@_sub1: return __sub1;
				case (int)ToluolCoreThenTriNitro_SubNums.@_sub2: return __sub2;
				case (int)ToluolCoreThenTriNitro_SubNums.@_sub3: return __sub3;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				default: return null;
				}
			}

			public enum ToluolCoreThenTriNitro_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCoreThenTriNitro_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCoreThenTriNitro_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Pattern_ToluolCoreThenTriNitro.instance.pat_ToluolCoreThenTriNitro; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_ToluolCoreThenTriNitro(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_ToluolCoreThenTriNitro(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_ToluolCoreThenTriNitro nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_ToluolCoreThenTriNitro cur = this;
				while(cur != null) {
					Match_ToluolCoreThenTriNitro next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_ToluolCoreThenTriNitro that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
			}

			public Match_ToluolCoreThenTriNitro(Match_ToluolCoreThenTriNitro that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_ToluolCoreThenTriNitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				@__sub0 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_TriNitro.Match_TriNitro(that.@__sub3, oldToNewMap);
			}

			public Match_ToluolCoreThenTriNitro(Match_ToluolCoreThenTriNitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_ToluolCoreThenTriNitro()
			{
			}

			public bool IsEqual(Match_ToluolCoreThenTriNitro that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				return true;
			}
		}

	}


	public class Rule_BenzolRing : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_BenzolRing instance = null;
		public static Rule_BenzolRing Instance { get { if(instance==null) { instance = new Rule_BenzolRing(); instance.initialize(); } return instance; } }

		public enum BenzolRing_NodeNums { };
		public enum BenzolRing_EdgeNums { };
		public enum BenzolRing_VariableNums { };
		public enum BenzolRing_SubNums { @_sub0, };
		public enum BenzolRing_AltNums { };
		public enum BenzolRing_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_BenzolRing;


		private Rule_BenzolRing()
			: base("BenzolRing",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_BenzolRing+IMatch_BenzolRing",
				"de.unika.ipd.grGen.Action_TNT.Rule_BenzolRing+Match_BenzolRing"
			)
		{
		}
		private void initialize()
		{
			bool[,] BenzolRing_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] BenzolRing_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] BenzolRing_isNodeTotallyHomomorphic = new bool[0];
			bool[] BenzolRing_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternGraphEmbedding BenzolRing__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRing.Instance, 
				new GRGEN_EXPR.Expression[] {
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] {  }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] {  }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_BenzolRing = new GRGEN_LGSP.PatternGraph(
				"BenzolRing",
				"",
				null, "BenzolRing",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { BenzolRing__sub0 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				BenzolRing_isNodeHomomorphicGlobal,
				BenzolRing_isEdgeHomomorphicGlobal,
				BenzolRing_isNodeTotallyHomomorphic,
				BenzolRing_isEdgeTotallyHomomorphic
			);

			BenzolRing__sub0.PointOfDefinition = pat_BenzolRing;

			patternGraph = pat_BenzolRing;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_BenzolRing curMatch = (Match_BenzolRing)_curMatch;
			GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing subpattern__sub0 = curMatch.@__sub0;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_BenzolRing() {
		}

		public interface IMatch_BenzolRing : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_sub0 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_BenzolRing : GRGEN_LGSP.MatchListElement<Match_BenzolRing>, IMatch_BenzolRing
		{
			public enum BenzolRing_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRing_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum BenzolRing_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @__sub0;
			public enum BenzolRing_SubNums { @_sub0, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 1; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)BenzolRing_SubNums.@_sub0: return __sub0;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				default: return null;
				}
			}

			public enum BenzolRing_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRing_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum BenzolRing_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_BenzolRing.instance.pat_BenzolRing; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_BenzolRing(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_BenzolRing(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_BenzolRing nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_BenzolRing cur = this;
				while(cur != null) {
					Match_BenzolRing next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_BenzolRing that)
			{
				@__sub0 = that.@__sub0;
			}

			public Match_BenzolRing(Match_BenzolRing that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_BenzolRing that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing(that.@__sub0, oldToNewMap);
			}

			public Match_BenzolRing(Match_BenzolRing that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_BenzolRing()
			{
			}

			public bool IsEqual(Match_BenzolRing that)
			{
				if(that==null) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_BenzolRing.IMatch_BenzolRing> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_BenzolRing.IMatch_BenzolRing>)
				return ((List<GRGEN_ACTIONS.Rule_BenzolRing.IMatch_BenzolRing>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_BenzolRing.IMatch_BenzolRing>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_BenzolRing.IMatch_BenzolRing instanceBearingAttributeForSearch_BenzolRing = new GRGEN_ACTIONS.Rule_BenzolRing.Match_BenzolRing();
	}

	public class Rule_TNTTotallyFolded : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNTTotallyFolded instance = null;
		public static Rule_TNTTotallyFolded Instance { get { if(instance==null) { instance = new Rule_TNTTotallyFolded(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTTotallyFolded_node_c6_AllowedTypes = null;
		public static bool[] TNTTotallyFolded_node_c1_IsAllowedType = null;
		public static bool[] TNTTotallyFolded_node_c2_IsAllowedType = null;
		public static bool[] TNTTotallyFolded_node_c3_IsAllowedType = null;
		public static bool[] TNTTotallyFolded_node_c4_IsAllowedType = null;
		public static bool[] TNTTotallyFolded_node_c5_IsAllowedType = null;
		public static bool[] TNTTotallyFolded_node_c6_IsAllowedType = null;
		public enum TNTTotallyFolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum TNTTotallyFolded_EdgeNums { };
		public enum TNTTotallyFolded_VariableNums { };
		public enum TNTTotallyFolded_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, @_sub6, };
		public enum TNTTotallyFolded_AltNums { };
		public enum TNTTotallyFolded_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNTTotallyFolded;


		private Rule_TNTTotallyFolded()
			: base("TNTTotallyFolded",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTTotallyFolded+IMatch_TNTTotallyFolded",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTTotallyFolded+Match_TNTTotallyFolded"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNTTotallyFolded_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] TNTTotallyFolded_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] TNTTotallyFolded_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] TNTTotallyFolded_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c1", "c1", TNTTotallyFolded_node_c1_AllowedTypes, TNTTotallyFolded_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c2", "c2", TNTTotallyFolded_node_c2_AllowedTypes, TNTTotallyFolded_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c3", "c3", TNTTotallyFolded_node_c3_AllowedTypes, TNTTotallyFolded_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c4", "c4", TNTTotallyFolded_node_c4_AllowedTypes, TNTTotallyFolded_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c5", "c5", TNTTotallyFolded_node_c5_AllowedTypes, TNTTotallyFolded_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTTotallyFolded_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTTotallyFolded_node_c6", "c6", TNTTotallyFolded_node_c6_AllowedTypes, TNTTotallyFolded_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRingC123456Exposed.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c1"),
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c2"),
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c3"),
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c4"),
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c5"),
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c1", "TNTTotallyFolded_node_c2", "TNTTotallyFolded_node_c3", "TNTTotallyFolded_node_c4", "TNTTotallyFolded_node_c5", "TNTTotallyFolded_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c1, TNTTotallyFolded_node_c2, TNTTotallyFolded_node_c3, TNTTotallyFolded_node_c4, TNTTotallyFolded_node_c5, TNTTotallyFolded_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub4 = new GRGEN_LGSP.PatternGraphEmbedding("_sub4", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub5 = new GRGEN_LGSP.PatternGraphEmbedding("_sub5", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTTotallyFolded__sub6 = new GRGEN_LGSP.PatternGraphEmbedding("_sub6", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTTotallyFolded_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTTotallyFolded_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_TNTTotallyFolded = new GRGEN_LGSP.PatternGraph(
				"TNTTotallyFolded",
				"",
				null, "TNTTotallyFolded",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNTTotallyFolded_node_c1, TNTTotallyFolded_node_c2, TNTTotallyFolded_node_c3, TNTTotallyFolded_node_c4, TNTTotallyFolded_node_c5, TNTTotallyFolded_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { TNTTotallyFolded__sub0, TNTTotallyFolded__sub1, TNTTotallyFolded__sub2, TNTTotallyFolded__sub3, TNTTotallyFolded__sub4, TNTTotallyFolded__sub5, TNTTotallyFolded__sub6 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[0, 0] ,
				TNTTotallyFolded_isNodeHomomorphicGlobal,
				TNTTotallyFolded_isEdgeHomomorphicGlobal,
				TNTTotallyFolded_isNodeTotallyHomomorphic,
				TNTTotallyFolded_isEdgeTotallyHomomorphic
			);

			TNTTotallyFolded_node_c1.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded_node_c2.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded_node_c3.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded_node_c4.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded_node_c5.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded_node_c6.pointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub0.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub1.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub2.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub3.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub4.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub5.PointOfDefinition = pat_TNTTotallyFolded;
			TNTTotallyFolded__sub6.PointOfDefinition = pat_TNTTotallyFolded;

			patternGraph = pat_TNTTotallyFolded;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNTTotallyFolded curMatch = (Match_TNTTotallyFolded)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub4 = curMatch.@__sub4;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub5 = curMatch.@__sub5;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub6 = curMatch.@__sub6;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNTTotallyFolded() {
		}

		public interface IMatch_TNTTotallyFolded : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub3 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub4 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub6 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNTTotallyFolded : GRGEN_LGSP.MatchListElement<Match_TNTTotallyFolded>, IMatch_TNTTotallyFolded
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum TNTTotallyFolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNTTotallyFolded_NodeNums.@c1: return _node_c1;
				case (int)TNTTotallyFolded_NodeNums.@c2: return _node_c2;
				case (int)TNTTotallyFolded_NodeNums.@c3: return _node_c3;
				case (int)TNTTotallyFolded_NodeNums.@c4: return _node_c4;
				case (int)TNTTotallyFolded_NodeNums.@c5: return _node_c5;
				case (int)TNTTotallyFolded_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum TNTTotallyFolded_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum TNTTotallyFolded_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub4 { get { return @__sub4; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get { return @__sub5; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub6 { get { return @__sub6; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @__sub0;
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub1;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub2;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub3;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub4;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub5;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub6;
			public enum TNTTotallyFolded_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, @_sub6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 7; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)TNTTotallyFolded_SubNums.@_sub0: return __sub0;
				case (int)TNTTotallyFolded_SubNums.@_sub1: return __sub1;
				case (int)TNTTotallyFolded_SubNums.@_sub2: return __sub2;
				case (int)TNTTotallyFolded_SubNums.@_sub3: return __sub3;
				case (int)TNTTotallyFolded_SubNums.@_sub4: return __sub4;
				case (int)TNTTotallyFolded_SubNums.@_sub5: return __sub5;
				case (int)TNTTotallyFolded_SubNums.@_sub6: return __sub6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				case "_sub4": return __sub4;
				case "_sub5": return __sub5;
				case "_sub6": return __sub6;
				default: return null;
				}
			}

			public enum TNTTotallyFolded_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTTotallyFolded_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTTotallyFolded_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNTTotallyFolded.instance.pat_TNTTotallyFolded; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNTTotallyFolded(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNTTotallyFolded(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNTTotallyFolded nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNTTotallyFolded cur = this;
				while(cur != null) {
					Match_TNTTotallyFolded next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNTTotallyFolded that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
				@__sub4 = that.@__sub4;
				@__sub5 = that.@__sub5;
				@__sub6 = that.@__sub6;
			}

			public Match_TNTTotallyFolded(Match_TNTTotallyFolded that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNTTotallyFolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub3, oldToNewMap);
				@__sub4 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub4, oldToNewMap);
				@__sub5 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub5, oldToNewMap);
				@__sub6 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub6, oldToNewMap);
			}

			public Match_TNTTotallyFolded(Match_TNTTotallyFolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNTTotallyFolded()
			{
			}

			public bool IsEqual(Match_TNTTotallyFolded that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				if(!@__sub4.IsEqual(that.@__sub4)) return false;
				if(!@__sub5.IsEqual(that.@__sub5)) return false;
				if(!@__sub6.IsEqual(that.@__sub6)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNTTotallyFolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTTotallyFolded match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>)
				return ((List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded instanceBearingAttributeForSearch_TNTTotallyFolded = new GRGEN_ACTIONS.Rule_TNTTotallyFolded.Match_TNTTotallyFolded();
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Array_TNTTotallyFolded_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> newList = new List<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTTotallyFolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_TNTChain : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNTChain instance = null;
		public static Rule_TNTChain Instance { get { if(instance==null) { instance = new Rule_TNTChain(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTChain_node_c6_AllowedTypes = null;
		public static bool[] TNTChain_node_c1_IsAllowedType = null;
		public static bool[] TNTChain_node_c2_IsAllowedType = null;
		public static bool[] TNTChain_node_c3_IsAllowedType = null;
		public static bool[] TNTChain_node_c4_IsAllowedType = null;
		public static bool[] TNTChain_node_c5_IsAllowedType = null;
		public static bool[] TNTChain_node_c6_IsAllowedType = null;
		public enum TNTChain_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum TNTChain_EdgeNums { };
		public enum TNTChain_VariableNums { };
		public enum TNTChain_SubNums { @_sub0, @_sub1, };
		public enum TNTChain_AltNums { };
		public enum TNTChain_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNTChain;


		private Rule_TNTChain()
			: base("TNTChain",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTChain+IMatch_TNTChain",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTChain+Match_TNTChain"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNTChain_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] TNTChain_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] TNTChain_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] TNTChain_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode TNTChain_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c1", "c1", TNTChain_node_c1_AllowedTypes, TNTChain_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTChain_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c2", "c2", TNTChain_node_c2_AllowedTypes, TNTChain_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTChain_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c3", "c3", TNTChain_node_c3_AllowedTypes, TNTChain_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTChain_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c4", "c4", TNTChain_node_c4_AllowedTypes, TNTChain_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTChain_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c5", "c5", TNTChain_node_c5_AllowedTypes, TNTChain_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTChain_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTChain_node_c6", "c6", TNTChain_node_c6_AllowedTypes, TNTChain_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding TNTChain__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRingC123456Exposed.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c1"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c2"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c3"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c4"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c5"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTChain_node_c1", "TNTChain_node_c2", "TNTChain_node_c3", "TNTChain_node_c4", "TNTChain_node_c5", "TNTChain_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTChain_node_c1, TNTChain_node_c2, TNTChain_node_c3, TNTChain_node_c4, TNTChain_node_c5, TNTChain_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNTChain__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_ToluolCoreThenTriNitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c1"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c2"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c3"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c4"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c5"),
					new GRGEN_EXPR.GraphEntityExpression("TNTChain_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNTChain_node_c1", "TNTChain_node_c2", "TNTChain_node_c3", "TNTChain_node_c4", "TNTChain_node_c5", "TNTChain_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNTChain_node_c1, TNTChain_node_c2, TNTChain_node_c3, TNTChain_node_c4, TNTChain_node_c5, TNTChain_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_TNTChain = new GRGEN_LGSP.PatternGraph(
				"TNTChain",
				"",
				null, "TNTChain",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNTChain_node_c1, TNTChain_node_c2, TNTChain_node_c3, TNTChain_node_c4, TNTChain_node_c5, TNTChain_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { TNTChain__sub0, TNTChain__sub1 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[0, 0] ,
				TNTChain_isNodeHomomorphicGlobal,
				TNTChain_isEdgeHomomorphicGlobal,
				TNTChain_isNodeTotallyHomomorphic,
				TNTChain_isEdgeTotallyHomomorphic
			);

			TNTChain_node_c1.pointOfDefinition = pat_TNTChain;
			TNTChain_node_c2.pointOfDefinition = pat_TNTChain;
			TNTChain_node_c3.pointOfDefinition = pat_TNTChain;
			TNTChain_node_c4.pointOfDefinition = pat_TNTChain;
			TNTChain_node_c5.pointOfDefinition = pat_TNTChain;
			TNTChain_node_c6.pointOfDefinition = pat_TNTChain;
			TNTChain__sub0.PointOfDefinition = pat_TNTChain;
			TNTChain__sub1.PointOfDefinition = pat_TNTChain;

			patternGraph = pat_TNTChain;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNTChain curMatch = (Match_TNTChain)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro subpattern__sub1 = curMatch.@__sub1;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNTChain() {
		}

		public interface IMatch_TNTChain : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro @_sub1 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNTChain : GRGEN_LGSP.MatchListElement<Match_TNTChain>, IMatch_TNTChain
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum TNTChain_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNTChain_NodeNums.@c1: return _node_c1;
				case (int)TNTChain_NodeNums.@c2: return _node_c2;
				case (int)TNTChain_NodeNums.@c3: return _node_c3;
				case (int)TNTChain_NodeNums.@c4: return _node_c4;
				case (int)TNTChain_NodeNums.@c5: return _node_c5;
				case (int)TNTChain_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum TNTChain_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum TNTChain_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @__sub0;
			public @GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro @__sub1;
			public enum TNTChain_SubNums { @_sub0, @_sub1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 2; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)TNTChain_SubNums.@_sub0: return __sub0;
				case (int)TNTChain_SubNums.@_sub1: return __sub1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				default: return null;
				}
			}

			public enum TNTChain_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTChain_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTChain_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNTChain.instance.pat_TNTChain; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNTChain(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNTChain(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNTChain nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNTChain cur = this;
				while(cur != null) {
					Match_TNTChain next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNTChain that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
			}

			public Match_TNTChain(Match_TNTChain that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNTChain that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro(that.@__sub1, oldToNewMap);
			}

			public Match_TNTChain(Match_TNTChain that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNTChain()
			{
			}

			public bool IsEqual(Match_TNTChain that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNTChain> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTChain match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>)
				return ((List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain instanceBearingAttributeForSearch_TNTChain = new GRGEN_ACTIONS.Rule_TNTChain.Match_TNTChain();
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> tempList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> Array_TNTChain_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> newList = new List<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTChain_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTChain_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTChain.IMatch_TNTChain> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_ToluolCore : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_ToluolCore instance = null;
		public static Rule_ToluolCore Instance { get { if(instance==null) { instance = new Rule_ToluolCore(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] ToluolCore_node_c1_AllowedTypes = null;
		public static bool[] ToluolCore_node_c1_IsAllowedType = null;
		public enum ToluolCore_NodeNums { @c1, };
		public enum ToluolCore_EdgeNums { };
		public enum ToluolCore_VariableNums { };
		public enum ToluolCore_SubNums { @_sub0, @_sub1, };
		public enum ToluolCore_AltNums { };
		public enum ToluolCore_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_ToluolCore;


		private Rule_ToluolCore()
			: base("ToluolCore",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_ToluolCore+IMatch_ToluolCore",
				"de.unika.ipd.grGen.Action_TNT.Rule_ToluolCore+Match_ToluolCore"
			)
		{
		}
		private void initialize()
		{
			bool[,] ToluolCore_isNodeHomomorphicGlobal = new bool[1, 1] {
				{ false, },
			};
			bool[,] ToluolCore_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] ToluolCore_isNodeTotallyHomomorphic = new bool[1] { false,  };
			bool[] ToluolCore_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode ToluolCore_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCore_node_c1", "c1", ToluolCore_node_c1_AllowedTypes, ToluolCore_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding ToluolCore__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRingC1Exposed.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCore_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCore_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCore_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding ToluolCore__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCore_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCore_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCore_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_ToluolCore = new GRGEN_LGSP.PatternGraph(
				"ToluolCore",
				"",
				null, "ToluolCore",
				false, false,
				new GRGEN_LGSP.PatternNode[] { ToluolCore_node_c1 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { ToluolCore__sub0, ToluolCore__sub1 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[1, 1] {
					{ true, },
				},
				new bool[0, 0] ,
				ToluolCore_isNodeHomomorphicGlobal,
				ToluolCore_isEdgeHomomorphicGlobal,
				ToluolCore_isNodeTotallyHomomorphic,
				ToluolCore_isEdgeTotallyHomomorphic
			);

			ToluolCore_node_c1.pointOfDefinition = pat_ToluolCore;
			ToluolCore__sub0.PointOfDefinition = pat_ToluolCore;
			ToluolCore__sub1.PointOfDefinition = pat_ToluolCore;

			patternGraph = pat_ToluolCore;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_ToluolCore curMatch = (Match_ToluolCore)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub1 = curMatch.@__sub1;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_ToluolCore() {
		}

		public interface IMatch_ToluolCore : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_ToluolCore : GRGEN_LGSP.MatchListElement<Match_ToluolCore>, IMatch_ToluolCore
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public enum ToluolCore_NodeNums { @c1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 1; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)ToluolCore_NodeNums.@c1: return _node_c1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum ToluolCore_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum ToluolCore_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed @__sub0;
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub1;
			public enum ToluolCore_SubNums { @_sub0, @_sub1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 2; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)ToluolCore_SubNums.@_sub0: return __sub0;
				case (int)ToluolCore_SubNums.@_sub1: return __sub1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				default: return null;
				}
			}

			public enum ToluolCore_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCore_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCore_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_ToluolCore.instance.pat_ToluolCore; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_ToluolCore(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_ToluolCore(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_ToluolCore nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_ToluolCore cur = this;
				while(cur != null) {
					Match_ToluolCore next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_ToluolCore that)
			{
				_node_c1 = that._node_c1;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
			}

			public Match_ToluolCore(Match_ToluolCore that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_ToluolCore that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub1, oldToNewMap);
			}

			public Match_ToluolCore(Match_ToluolCore that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_ToluolCore()
			{
			}

			public bool IsEqual(Match_ToluolCore that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_ToluolCore> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_ToluolCore match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>)
				return ((List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore instanceBearingAttributeForSearch_ToluolCore = new GRGEN_ACTIONS.Rule_ToluolCore.Match_ToluolCore();
		public static List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> Array_ToluolCore_groupBy_c1(List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> tempList = new List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> newList = new List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>();
			foreach(List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> Array_ToluolCore_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list)
		{
			List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> newList = new List<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_ToluolCore_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCore_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCore_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCore_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCore.IMatch_ToluolCore> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_ToluolCoreNotC6Nitro : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_ToluolCoreNotC6Nitro instance = null;
		public static Rule_ToluolCoreNotC6Nitro Instance { get { if(instance==null) { instance = new Rule_ToluolCoreNotC6Nitro(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] ToluolCoreNotC6Nitro_node_c1_AllowedTypes = null;
		public static bool[] ToluolCoreNotC6Nitro_node_c1_IsAllowedType = null;
		public enum ToluolCoreNotC6Nitro_NodeNums { @c1, };
		public enum ToluolCoreNotC6Nitro_EdgeNums { };
		public enum ToluolCoreNotC6Nitro_VariableNums { };
		public enum ToluolCoreNotC6Nitro_SubNums { @_sub0, @_sub1, };
		public enum ToluolCoreNotC6Nitro_AltNums { };
		public enum ToluolCoreNotC6Nitro_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_ToluolCoreNotC6Nitro;


		private Rule_ToluolCoreNotC6Nitro()
			: base("ToluolCoreNotC6Nitro",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_ToluolCoreNotC6Nitro+IMatch_ToluolCoreNotC6Nitro",
				"de.unika.ipd.grGen.Action_TNT.Rule_ToluolCoreNotC6Nitro+Match_ToluolCoreNotC6Nitro"
			)
		{
		}
		private void initialize()
		{
			bool[,] ToluolCoreNotC6Nitro_isNodeHomomorphicGlobal = new bool[1, 1] {
				{ false, },
			};
			bool[,] ToluolCoreNotC6Nitro_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] ToluolCoreNotC6Nitro_isNodeTotallyHomomorphic = new bool[1] { false,  };
			bool[] ToluolCoreNotC6Nitro_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode ToluolCoreNotC6Nitro_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "ToluolCoreNotC6Nitro_node_c1", "c1", ToluolCoreNotC6Nitro_node_c1_AllowedTypes, ToluolCoreNotC6Nitro_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreNotC6Nitro__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRingC1ExposedNotC6Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreNotC6Nitro_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreNotC6Nitro_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreNotC6Nitro_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding ToluolCoreNotC6Nitro__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("ToluolCoreNotC6Nitro_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "ToluolCoreNotC6Nitro_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { ToluolCoreNotC6Nitro_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_ToluolCoreNotC6Nitro = new GRGEN_LGSP.PatternGraph(
				"ToluolCoreNotC6Nitro",
				"",
				null, "ToluolCoreNotC6Nitro",
				false, false,
				new GRGEN_LGSP.PatternNode[] { ToluolCoreNotC6Nitro_node_c1 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { ToluolCoreNotC6Nitro__sub0, ToluolCoreNotC6Nitro__sub1 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[1, 1] {
					{ true, },
				},
				new bool[0, 0] ,
				ToluolCoreNotC6Nitro_isNodeHomomorphicGlobal,
				ToluolCoreNotC6Nitro_isEdgeHomomorphicGlobal,
				ToluolCoreNotC6Nitro_isNodeTotallyHomomorphic,
				ToluolCoreNotC6Nitro_isEdgeTotallyHomomorphic
			);

			ToluolCoreNotC6Nitro_node_c1.pointOfDefinition = pat_ToluolCoreNotC6Nitro;
			ToluolCoreNotC6Nitro__sub0.PointOfDefinition = pat_ToluolCoreNotC6Nitro;
			ToluolCoreNotC6Nitro__sub1.PointOfDefinition = pat_ToluolCoreNotC6Nitro;

			patternGraph = pat_ToluolCoreNotC6Nitro;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_ToluolCoreNotC6Nitro curMatch = (Match_ToluolCoreNotC6Nitro)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub1 = curMatch.@__sub1;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_ToluolCoreNotC6Nitro() {
		}

		public interface IMatch_ToluolCoreNotC6Nitro : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_ToluolCoreNotC6Nitro : GRGEN_LGSP.MatchListElement<Match_ToluolCoreNotC6Nitro>, IMatch_ToluolCoreNotC6Nitro
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public enum ToluolCoreNotC6Nitro_NodeNums { @c1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 1; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)ToluolCoreNotC6Nitro_NodeNums.@c1: return _node_c1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum ToluolCoreNotC6Nitro_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum ToluolCoreNotC6Nitro_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro @__sub0;
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub1;
			public enum ToluolCoreNotC6Nitro_SubNums { @_sub0, @_sub1, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 2; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)ToluolCoreNotC6Nitro_SubNums.@_sub0: return __sub0;
				case (int)ToluolCoreNotC6Nitro_SubNums.@_sub1: return __sub1;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				default: return null;
				}
			}

			public enum ToluolCoreNotC6Nitro_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCoreNotC6Nitro_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum ToluolCoreNotC6Nitro_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_ToluolCoreNotC6Nitro.instance.pat_ToluolCoreNotC6Nitro; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_ToluolCoreNotC6Nitro(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_ToluolCoreNotC6Nitro(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_ToluolCoreNotC6Nitro nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_ToluolCoreNotC6Nitro cur = this;
				while(cur != null) {
					Match_ToluolCoreNotC6Nitro next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_ToluolCoreNotC6Nitro that)
			{
				_node_c1 = that._node_c1;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
			}

			public Match_ToluolCoreNotC6Nitro(Match_ToluolCoreNotC6Nitro that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_ToluolCoreNotC6Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub1, oldToNewMap);
			}

			public Match_ToluolCoreNotC6Nitro(Match_ToluolCoreNotC6Nitro that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_ToluolCoreNotC6Nitro()
			{
			}

			public bool IsEqual(Match_ToluolCoreNotC6Nitro that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_ToluolCoreNotC6Nitro> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_ToluolCoreNotC6Nitro match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>)
				return ((List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro instanceBearingAttributeForSearch_ToluolCoreNotC6Nitro = new GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Match_ToluolCoreNotC6Nitro();
		public static List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> Array_ToluolCoreNotC6Nitro_groupBy_c1(List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> tempList = new List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> newList = new List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>();
			foreach(List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> Array_ToluolCoreNotC6Nitro_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list)
		{
			List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> newList = new List<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_ToluolCoreNotC6Nitro_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCoreNotC6Nitro_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCoreNotC6Nitro_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_ToluolCoreNotC6Nitro_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_Toluol : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_Toluol instance = null;
		public static Rule_Toluol Instance { get { if(instance==null) { instance = new Rule_Toluol(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] Toluol_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Toluol_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Toluol_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Toluol_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Toluol_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] Toluol_node_c6_AllowedTypes = null;
		public static bool[] Toluol_node_c1_IsAllowedType = null;
		public static bool[] Toluol_node_c2_IsAllowedType = null;
		public static bool[] Toluol_node_c3_IsAllowedType = null;
		public static bool[] Toluol_node_c4_IsAllowedType = null;
		public static bool[] Toluol_node_c5_IsAllowedType = null;
		public static bool[] Toluol_node_c6_IsAllowedType = null;
		public enum Toluol_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum Toluol_EdgeNums { };
		public enum Toluol_VariableNums { };
		public enum Toluol_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, @_sub6, };
		public enum Toluol_AltNums { };
		public enum Toluol_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_Toluol;


		private Rule_Toluol()
			: base("Toluol",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_Toluol+IMatch_Toluol",
				"de.unika.ipd.grGen.Action_TNT.Rule_Toluol+Match_Toluol"
			)
		{
		}
		private void initialize()
		{
			bool[,] Toluol_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] Toluol_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] Toluol_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] Toluol_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternNode Toluol_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c1", "c1", Toluol_node_c1_AllowedTypes, Toluol_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Toluol_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c2", "c2", Toluol_node_c2_AllowedTypes, Toluol_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Toluol_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c3", "c3", Toluol_node_c3_AllowedTypes, Toluol_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Toluol_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c4", "c4", Toluol_node_c4_AllowedTypes, Toluol_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Toluol_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c5", "c5", Toluol_node_c5_AllowedTypes, Toluol_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode Toluol_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "Toluol_node_c6", "c6", Toluol_node_c6_AllowedTypes, Toluol_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRingC123456Exposed.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c1"),
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c2"),
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c3"),
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c4"),
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c5"),
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c1", "Toluol_node_c2", "Toluol_node_c3", "Toluol_node_c4", "Toluol_node_c5", "Toluol_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c1, Toluol_node_c2, Toluol_node_c3, Toluol_node_c4, Toluol_node_c5, Toluol_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub4 = new GRGEN_LGSP.PatternGraphEmbedding("_sub4", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub5 = new GRGEN_LGSP.PatternGraphEmbedding("_sub5", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding Toluol__sub6 = new GRGEN_LGSP.PatternGraphEmbedding("_sub6", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("Toluol_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "Toluol_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_Toluol = new GRGEN_LGSP.PatternGraph(
				"Toluol",
				"",
				null, "Toluol",
				false, false,
				new GRGEN_LGSP.PatternNode[] { Toluol_node_c1, Toluol_node_c2, Toluol_node_c3, Toluol_node_c4, Toluol_node_c5, Toluol_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { Toluol__sub0, Toluol__sub1, Toluol__sub2, Toluol__sub3, Toluol__sub4, Toluol__sub5, Toluol__sub6 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[0, 0] ,
				Toluol_isNodeHomomorphicGlobal,
				Toluol_isEdgeHomomorphicGlobal,
				Toluol_isNodeTotallyHomomorphic,
				Toluol_isEdgeTotallyHomomorphic
			);

			Toluol_node_c1.pointOfDefinition = pat_Toluol;
			Toluol_node_c2.pointOfDefinition = pat_Toluol;
			Toluol_node_c3.pointOfDefinition = pat_Toluol;
			Toluol_node_c4.pointOfDefinition = pat_Toluol;
			Toluol_node_c5.pointOfDefinition = pat_Toluol;
			Toluol_node_c6.pointOfDefinition = pat_Toluol;
			Toluol__sub0.PointOfDefinition = pat_Toluol;
			Toluol__sub1.PointOfDefinition = pat_Toluol;
			Toluol__sub2.PointOfDefinition = pat_Toluol;
			Toluol__sub3.PointOfDefinition = pat_Toluol;
			Toluol__sub4.PointOfDefinition = pat_Toluol;
			Toluol__sub5.PointOfDefinition = pat_Toluol;
			Toluol__sub6.PointOfDefinition = pat_Toluol;

			patternGraph = pat_Toluol;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_Toluol curMatch = (Match_Toluol)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub4 = curMatch.@__sub4;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub5 = curMatch.@__sub5;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub6 = curMatch.@__sub6;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_Toluol() {
		}

		public interface IMatch_Toluol : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub3 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub6 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_Toluol : GRGEN_LGSP.MatchListElement<Match_Toluol>, IMatch_Toluol
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum Toluol_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)Toluol_NodeNums.@c1: return _node_c1;
				case (int)Toluol_NodeNums.@c2: return _node_c2;
				case (int)Toluol_NodeNums.@c3: return _node_c3;
				case (int)Toluol_NodeNums.@c4: return _node_c4;
				case (int)Toluol_NodeNums.@c5: return _node_c5;
				case (int)Toluol_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public enum Toluol_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum Toluol_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get { return @__sub4; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get { return @__sub5; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub6 { get { return @__sub6; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed @__sub0;
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub1;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub2;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub3;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub4;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub5;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub6;
			public enum Toluol_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, @_sub6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 7; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)Toluol_SubNums.@_sub0: return __sub0;
				case (int)Toluol_SubNums.@_sub1: return __sub1;
				case (int)Toluol_SubNums.@_sub2: return __sub2;
				case (int)Toluol_SubNums.@_sub3: return __sub3;
				case (int)Toluol_SubNums.@_sub4: return __sub4;
				case (int)Toluol_SubNums.@_sub5: return __sub5;
				case (int)Toluol_SubNums.@_sub6: return __sub6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				case "_sub4": return __sub4;
				case "_sub5": return __sub5;
				case "_sub6": return __sub6;
				default: return null;
				}
			}

			public enum Toluol_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Toluol_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum Toluol_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_Toluol.instance.pat_Toluol; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_Toluol(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_Toluol(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_Toluol nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_Toluol cur = this;
				while(cur != null) {
					Match_Toluol next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_Toluol that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
				@__sub4 = that.@__sub4;
				@__sub5 = that.@__sub5;
				@__sub6 = that.@__sub6;
			}

			public Match_Toluol(Match_Toluol that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_Toluol that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub3, oldToNewMap);
				@__sub4 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub4, oldToNewMap);
				@__sub5 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub5, oldToNewMap);
				@__sub6 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub6, oldToNewMap);
			}

			public Match_Toluol(Match_Toluol that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_Toluol()
			{
			}

			public bool IsEqual(Match_Toluol that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				if(!@__sub4.IsEqual(that.@__sub4)) return false;
				if(!@__sub5.IsEqual(that.@__sub5)) return false;
				if(!@__sub6.IsEqual(that.@__sub6)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_Toluol> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_Toluol match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>)
				return ((List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol instanceBearingAttributeForSearch_Toluol = new GRGEN_ACTIONS.Rule_Toluol.Match_Toluol();
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c1(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c2(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c3(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c4(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c5(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_groupBy_c6(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> tempList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			foreach(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> Array_Toluol_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list)
		{
			List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> newList = new List<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_Toluol_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_Toluol_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_Toluol.IMatch_Toluol> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_TNT : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNT instance = null;
		public static Rule_TNT Instance { get { if(instance==null) { instance = new Rule_TNT(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNT_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNT_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNT_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNT_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNT_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNT_node_c6_AllowedTypes = null;
		public static bool[] TNT_node_c1_IsAllowedType = null;
		public static bool[] TNT_node_c2_IsAllowedType = null;
		public static bool[] TNT_node_c3_IsAllowedType = null;
		public static bool[] TNT_node_c4_IsAllowedType = null;
		public static bool[] TNT_node_c5_IsAllowedType = null;
		public static bool[] TNT_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNT_edge__edge8_AllowedTypes = null;
		public static bool[] TNT_edge__edge0_IsAllowedType = null;
		public static bool[] TNT_edge__edge1_IsAllowedType = null;
		public static bool[] TNT_edge__edge2_IsAllowedType = null;
		public static bool[] TNT_edge__edge3_IsAllowedType = null;
		public static bool[] TNT_edge__edge4_IsAllowedType = null;
		public static bool[] TNT_edge__edge5_IsAllowedType = null;
		public static bool[] TNT_edge__edge6_IsAllowedType = null;
		public static bool[] TNT_edge__edge7_IsAllowedType = null;
		public static bool[] TNT_edge__edge8_IsAllowedType = null;
		public enum TNT_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum TNT_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum TNT_VariableNums { };
		public enum TNT_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, };
		public enum TNT_AltNums { };
		public enum TNT_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNT;


		private Rule_TNT()
			: base("TNT",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNT+IMatch_TNT",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNT+Match_TNT"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNT_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] TNT_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] TNT_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] TNT_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode TNT_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c1", "c1", TNT_node_c1_AllowedTypes, TNT_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNT_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c2", "c2", TNT_node_c2_AllowedTypes, TNT_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNT_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c3", "c3", TNT_node_c3_AllowedTypes, TNT_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNT_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c4", "c4", TNT_node_c4_AllowedTypes, TNT_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNT_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c5", "c5", TNT_node_c5_AllowedTypes, TNT_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNT_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNT_node_c6", "c6", TNT_node_c6_AllowedTypes, TNT_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge0", "_edge0", TNT_edge__edge0_AllowedTypes, TNT_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge1", "_edge1", TNT_edge__edge1_AllowedTypes, TNT_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge2", "_edge2", TNT_edge__edge2_AllowedTypes, TNT_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge3", "_edge3", TNT_edge__edge3_AllowedTypes, TNT_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge4", "_edge4", TNT_edge__edge4_AllowedTypes, TNT_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge5", "_edge5", TNT_edge__edge5_AllowedTypes, TNT_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge6", "_edge6", TNT_edge__edge6_AllowedTypes, TNT_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge7", "_edge7", TNT_edge__edge7_AllowedTypes, TNT_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNT_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNT_edge__edge8", "_edge8", TNT_edge__edge8_AllowedTypes, TNT_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub4 = new GRGEN_LGSP.PatternGraphEmbedding("_sub4", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNT__sub5 = new GRGEN_LGSP.PatternGraphEmbedding("_sub5", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNT_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNT_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNT_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_TNT = new GRGEN_LGSP.PatternGraph(
				"TNT",
				"",
				null, "TNT",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNT_node_c1, TNT_node_c2, TNT_node_c3, TNT_node_c4, TNT_node_c5, TNT_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { TNT_edge__edge0, TNT_edge__edge1, TNT_edge__edge2, TNT_edge__edge3, TNT_edge__edge4, TNT_edge__edge5, TNT_edge__edge6, TNT_edge__edge7, TNT_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { TNT__sub0, TNT__sub1, TNT__sub2, TNT__sub3, TNT__sub4, TNT__sub5 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				TNT_isNodeHomomorphicGlobal,
				TNT_isEdgeHomomorphicGlobal,
				TNT_isNodeTotallyHomomorphic,
				TNT_isEdgeTotallyHomomorphic
			);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge0, TNT_node_c1);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge0, TNT_node_c2);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge1, TNT_node_c2);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge1, TNT_node_c3);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge2, TNT_node_c3);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge2, TNT_node_c4);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge3, TNT_node_c4);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge3, TNT_node_c5);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge4, TNT_node_c5);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge4, TNT_node_c6);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge5, TNT_node_c6);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge5, TNT_node_c1);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge6, TNT_node_c1);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge6, TNT_node_c2);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge7, TNT_node_c3);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge7, TNT_node_c4);
			pat_TNT.edgeToSourceNode.Add(TNT_edge__edge8, TNT_node_c5);
			pat_TNT.edgeToTargetNode.Add(TNT_edge__edge8, TNT_node_c6);

			TNT_node_c1.pointOfDefinition = pat_TNT;
			TNT_node_c2.pointOfDefinition = pat_TNT;
			TNT_node_c3.pointOfDefinition = pat_TNT;
			TNT_node_c4.pointOfDefinition = pat_TNT;
			TNT_node_c5.pointOfDefinition = pat_TNT;
			TNT_node_c6.pointOfDefinition = pat_TNT;
			TNT_edge__edge0.pointOfDefinition = pat_TNT;
			TNT_edge__edge1.pointOfDefinition = pat_TNT;
			TNT_edge__edge2.pointOfDefinition = pat_TNT;
			TNT_edge__edge3.pointOfDefinition = pat_TNT;
			TNT_edge__edge4.pointOfDefinition = pat_TNT;
			TNT_edge__edge5.pointOfDefinition = pat_TNT;
			TNT_edge__edge6.pointOfDefinition = pat_TNT;
			TNT_edge__edge7.pointOfDefinition = pat_TNT;
			TNT_edge__edge8.pointOfDefinition = pat_TNT;
			TNT__sub0.PointOfDefinition = pat_TNT;
			TNT__sub1.PointOfDefinition = pat_TNT;
			TNT__sub2.PointOfDefinition = pat_TNT;
			TNT__sub3.PointOfDefinition = pat_TNT;
			TNT__sub4.PointOfDefinition = pat_TNT;
			TNT__sub5.PointOfDefinition = pat_TNT;

			patternGraph = pat_TNT;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNT curMatch = (Match_TNT)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub4 = curMatch.@__sub4;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub5 = curMatch.@__sub5;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNT() {
		}

		public interface IMatch_TNT : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub5 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNT : GRGEN_LGSP.MatchListElement<Match_TNT>, IMatch_TNT
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum TNT_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNT_NodeNums.@c1: return _node_c1;
				case (int)TNT_NodeNums.@c2: return _node_c2;
				case (int)TNT_NodeNums.@c3: return _node_c3;
				case (int)TNT_NodeNums.@c4: return _node_c4;
				case (int)TNT_NodeNums.@c5: return _node_c5;
				case (int)TNT_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum TNT_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)TNT_EdgeNums.@_edge0: return _edge__edge0;
				case (int)TNT_EdgeNums.@_edge1: return _edge__edge1;
				case (int)TNT_EdgeNums.@_edge2: return _edge__edge2;
				case (int)TNT_EdgeNums.@_edge3: return _edge__edge3;
				case (int)TNT_EdgeNums.@_edge4: return _edge__edge4;
				case (int)TNT_EdgeNums.@_edge5: return _edge__edge5;
				case (int)TNT_EdgeNums.@_edge6: return _edge__edge6;
				case (int)TNT_EdgeNums.@_edge7: return _edge__edge7;
				case (int)TNT_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum TNT_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get { return @__sub4; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub5 { get { return @__sub5; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub0;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub1;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub2;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub3;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub4;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub5;
			public enum TNT_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 6; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)TNT_SubNums.@_sub0: return __sub0;
				case (int)TNT_SubNums.@_sub1: return __sub1;
				case (int)TNT_SubNums.@_sub2: return __sub2;
				case (int)TNT_SubNums.@_sub3: return __sub3;
				case (int)TNT_SubNums.@_sub4: return __sub4;
				case (int)TNT_SubNums.@_sub5: return __sub5;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				case "_sub4": return __sub4;
				case "_sub5": return __sub5;
				default: return null;
				}
			}

			public enum TNT_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNT_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNT_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNT.instance.pat_TNT; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNT(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNT(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNT nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNT cur = this;
				while(cur != null) {
					Match_TNT next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNT that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
				@__sub4 = that.@__sub4;
				@__sub5 = that.@__sub5;
			}

			public Match_TNT(Match_TNT that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				@__sub0 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub3, oldToNewMap);
				@__sub4 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub4, oldToNewMap);
				@__sub5 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub5, oldToNewMap);
			}

			public Match_TNT(Match_TNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNT()
			{
			}

			public bool IsEqual(Match_TNT that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				if(!@__sub4.IsEqual(that.@__sub4)) return false;
				if(!@__sub5.IsEqual(that.@__sub5)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_TNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNT match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>)
				return ((List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNT.IMatch_TNT instanceBearingAttributeForSearch_TNT = new GRGEN_ACTIONS.Rule_TNT.Match_TNT();
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge0(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge1(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge2(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge3(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge4(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge5(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge6(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge7(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_groupBy__edge8(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> tempList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			foreach(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> Array_TNT_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list)
		{
			List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> newList = new List<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNT.IMatch_TNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_TNT_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNT_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNT.IMatch_TNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_TNTUnfolded : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNTUnfolded instance = null;
		public static Rule_TNTUnfolded Instance { get { if(instance==null) { instance = new Rule_TNTUnfolded(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_c_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_n2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_n4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node7_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node8_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node_n6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node9_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNTUnfolded_node__node10_AllowedTypes = null;
		public static bool[] TNTUnfolded_node_c1_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c2_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c3_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c4_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c5_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c6_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_c_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node0_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node1_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node2_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_n2_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node3_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node4_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node5_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_n4_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node6_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node7_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node8_IsAllowedType = null;
		public static bool[] TNTUnfolded_node_n6_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node9_IsAllowedType = null;
		public static bool[] TNTUnfolded_node__node10_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge8_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge9_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge10_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge11_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge12_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge13_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge14_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge15_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge16_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge17_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge18_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge19_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge20_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge21_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge22_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNTUnfolded_edge__edge23_AllowedTypes = null;
		public static bool[] TNTUnfolded_edge__edge0_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge1_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge2_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge3_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge4_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge5_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge6_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge7_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge8_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge9_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge10_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge11_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge12_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge13_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge14_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge15_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge16_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge17_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge18_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge19_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge20_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge21_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge22_IsAllowedType = null;
		public static bool[] TNTUnfolded_edge__edge23_IsAllowedType = null;
		public enum TNTUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @c, @_node0, @_node1, @_node2, @n2, @_node3, @_node4, @_node5, @n4, @_node6, @_node7, @_node8, @n6, @_node9, @_node10, };
		public enum TNTUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, @_edge21, @_edge22, @_edge23, };
		public enum TNTUnfolded_VariableNums { };
		public enum TNTUnfolded_SubNums { };
		public enum TNTUnfolded_AltNums { };
		public enum TNTUnfolded_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNTUnfolded;


		private Rule_TNTUnfolded()
			: base("TNTUnfolded",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTUnfolded+IMatch_TNTUnfolded",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNTUnfolded+Match_TNTUnfolded"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNTUnfolded_isNodeHomomorphicGlobal = new bool[21, 21] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[,] TNTUnfolded_isEdgeHomomorphicGlobal = new bool[24, 24] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[] TNTUnfolded_isNodeTotallyHomomorphic = new bool[21] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			bool[] TNTUnfolded_isEdgeTotallyHomomorphic = new bool[24] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c1", "c1", TNTUnfolded_node_c1_AllowedTypes, TNTUnfolded_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c2", "c2", TNTUnfolded_node_c2_AllowedTypes, TNTUnfolded_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c3", "c3", TNTUnfolded_node_c3_AllowedTypes, TNTUnfolded_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c4", "c4", TNTUnfolded_node_c4_AllowedTypes, TNTUnfolded_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c5", "c5", TNTUnfolded_node_c5_AllowedTypes, TNTUnfolded_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c6", "c6", TNTUnfolded_node_c6_AllowedTypes, TNTUnfolded_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_c = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNTUnfolded_node_c", "c", TNTUnfolded_node_c_AllowedTypes, TNTUnfolded_node_c_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNTUnfolded_node__node0", "_node0", TNTUnfolded_node__node0_AllowedTypes, TNTUnfolded_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNTUnfolded_node__node1", "_node1", TNTUnfolded_node__node1_AllowedTypes, TNTUnfolded_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNTUnfolded_node__node2", "_node2", TNTUnfolded_node__node2_AllowedTypes, TNTUnfolded_node__node2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_n2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNTUnfolded_node_n2", "n2", TNTUnfolded_node_n2_AllowedTypes, TNTUnfolded_node_n2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node3", "_node3", TNTUnfolded_node__node3_AllowedTypes, TNTUnfolded_node__node3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node4", "_node4", TNTUnfolded_node__node4_AllowedTypes, TNTUnfolded_node__node4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNTUnfolded_node__node5", "_node5", TNTUnfolded_node__node5_AllowedTypes, TNTUnfolded_node__node5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_n4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNTUnfolded_node_n4", "n4", TNTUnfolded_node_n4_AllowedTypes, TNTUnfolded_node_n4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node6", "_node6", TNTUnfolded_node__node6_AllowedTypes, TNTUnfolded_node__node6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node7 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node7", "_node7", TNTUnfolded_node__node7_AllowedTypes, TNTUnfolded_node__node7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node8 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNTUnfolded_node__node8", "_node8", TNTUnfolded_node__node8_AllowedTypes, TNTUnfolded_node__node8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node_n6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNTUnfolded_node_n6", "n6", TNTUnfolded_node_n6_AllowedTypes, TNTUnfolded_node_n6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node9 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node9", "_node9", TNTUnfolded_node__node9_AllowedTypes, TNTUnfolded_node__node9_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNTUnfolded_node__node10 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNTUnfolded_node__node10", "_node10", TNTUnfolded_node__node10_AllowedTypes, TNTUnfolded_node__node10_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge0", "_edge0", TNTUnfolded_edge__edge0_AllowedTypes, TNTUnfolded_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge1", "_edge1", TNTUnfolded_edge__edge1_AllowedTypes, TNTUnfolded_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge2", "_edge2", TNTUnfolded_edge__edge2_AllowedTypes, TNTUnfolded_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge3", "_edge3", TNTUnfolded_edge__edge3_AllowedTypes, TNTUnfolded_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge4", "_edge4", TNTUnfolded_edge__edge4_AllowedTypes, TNTUnfolded_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge5", "_edge5", TNTUnfolded_edge__edge5_AllowedTypes, TNTUnfolded_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge6", "_edge6", TNTUnfolded_edge__edge6_AllowedTypes, TNTUnfolded_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge7", "_edge7", TNTUnfolded_edge__edge7_AllowedTypes, TNTUnfolded_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge8", "_edge8", TNTUnfolded_edge__edge8_AllowedTypes, TNTUnfolded_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge9 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge9", "_edge9", TNTUnfolded_edge__edge9_AllowedTypes, TNTUnfolded_edge__edge9_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge10 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge10", "_edge10", TNTUnfolded_edge__edge10_AllowedTypes, TNTUnfolded_edge__edge10_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge11 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge11", "_edge11", TNTUnfolded_edge__edge11_AllowedTypes, TNTUnfolded_edge__edge11_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge12 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge12", "_edge12", TNTUnfolded_edge__edge12_AllowedTypes, TNTUnfolded_edge__edge12_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge13 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge13", "_edge13", TNTUnfolded_edge__edge13_AllowedTypes, TNTUnfolded_edge__edge13_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge14 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge14", "_edge14", TNTUnfolded_edge__edge14_AllowedTypes, TNTUnfolded_edge__edge14_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge15 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge15", "_edge15", TNTUnfolded_edge__edge15_AllowedTypes, TNTUnfolded_edge__edge15_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge16 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge16", "_edge16", TNTUnfolded_edge__edge16_AllowedTypes, TNTUnfolded_edge__edge16_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge17 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge17", "_edge17", TNTUnfolded_edge__edge17_AllowedTypes, TNTUnfolded_edge__edge17_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge18 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge18", "_edge18", TNTUnfolded_edge__edge18_AllowedTypes, TNTUnfolded_edge__edge18_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge19 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge19", "_edge19", TNTUnfolded_edge__edge19_AllowedTypes, TNTUnfolded_edge__edge19_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge20 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge20", "_edge20", TNTUnfolded_edge__edge20_AllowedTypes, TNTUnfolded_edge__edge20_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge21 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge21", "_edge21", TNTUnfolded_edge__edge21_AllowedTypes, TNTUnfolded_edge__edge21_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge22 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge22", "_edge22", TNTUnfolded_edge__edge22_AllowedTypes, TNTUnfolded_edge__edge22_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNTUnfolded_edge__edge23 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNTUnfolded_edge__edge23", "_edge23", TNTUnfolded_edge__edge23_AllowedTypes, TNTUnfolded_edge__edge23_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_TNTUnfolded = new GRGEN_LGSP.PatternGraph(
				"TNTUnfolded",
				"",
				null, "TNTUnfolded",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNTUnfolded_node_c1, TNTUnfolded_node_c2, TNTUnfolded_node_c3, TNTUnfolded_node_c4, TNTUnfolded_node_c5, TNTUnfolded_node_c6, TNTUnfolded_node_c, TNTUnfolded_node__node0, TNTUnfolded_node__node1, TNTUnfolded_node__node2, TNTUnfolded_node_n2, TNTUnfolded_node__node3, TNTUnfolded_node__node4, TNTUnfolded_node__node5, TNTUnfolded_node_n4, TNTUnfolded_node__node6, TNTUnfolded_node__node7, TNTUnfolded_node__node8, TNTUnfolded_node_n6, TNTUnfolded_node__node9, TNTUnfolded_node__node10 }, 
				new GRGEN_LGSP.PatternEdge[] { TNTUnfolded_edge__edge0, TNTUnfolded_edge__edge1, TNTUnfolded_edge__edge2, TNTUnfolded_edge__edge3, TNTUnfolded_edge__edge4, TNTUnfolded_edge__edge5, TNTUnfolded_edge__edge6, TNTUnfolded_edge__edge7, TNTUnfolded_edge__edge8, TNTUnfolded_edge__edge9, TNTUnfolded_edge__edge10, TNTUnfolded_edge__edge11, TNTUnfolded_edge__edge12, TNTUnfolded_edge__edge13, TNTUnfolded_edge__edge14, TNTUnfolded_edge__edge15, TNTUnfolded_edge__edge16, TNTUnfolded_edge__edge17, TNTUnfolded_edge__edge18, TNTUnfolded_edge__edge19, TNTUnfolded_edge__edge20, TNTUnfolded_edge__edge21, TNTUnfolded_edge__edge22, TNTUnfolded_edge__edge23 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[21, 21] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				new bool[24, 24] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				TNTUnfolded_isNodeHomomorphicGlobal,
				TNTUnfolded_isEdgeHomomorphicGlobal,
				TNTUnfolded_isNodeTotallyHomomorphic,
				TNTUnfolded_isEdgeTotallyHomomorphic
			);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge0, TNTUnfolded_node_c1);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge0, TNTUnfolded_node_c2);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge1, TNTUnfolded_node_c2);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge1, TNTUnfolded_node_c3);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge2, TNTUnfolded_node_c3);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge2, TNTUnfolded_node_c4);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge3, TNTUnfolded_node_c4);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge3, TNTUnfolded_node_c5);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge4, TNTUnfolded_node_c5);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge4, TNTUnfolded_node_c6);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge5, TNTUnfolded_node_c6);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge5, TNTUnfolded_node_c1);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge6, TNTUnfolded_node_c1);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge6, TNTUnfolded_node_c2);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge7, TNTUnfolded_node_c3);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge7, TNTUnfolded_node_c4);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge8, TNTUnfolded_node_c5);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge8, TNTUnfolded_node_c6);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge9, TNTUnfolded_node_c1);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge9, TNTUnfolded_node_c);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge10, TNTUnfolded_node_c);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge10, TNTUnfolded_node__node0);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge11, TNTUnfolded_node_c);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge11, TNTUnfolded_node__node1);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge12, TNTUnfolded_node_c);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge12, TNTUnfolded_node__node2);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge13, TNTUnfolded_node_c2);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge13, TNTUnfolded_node_n2);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge14, TNTUnfolded_node_n2);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge14, TNTUnfolded_node__node3);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge15, TNTUnfolded_node_n2);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge15, TNTUnfolded_node__node4);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge16, TNTUnfolded_node_c3);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge16, TNTUnfolded_node__node5);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge17, TNTUnfolded_node_c4);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge17, TNTUnfolded_node_n4);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge18, TNTUnfolded_node_n4);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge18, TNTUnfolded_node__node6);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge19, TNTUnfolded_node_n4);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge19, TNTUnfolded_node__node7);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge20, TNTUnfolded_node_c5);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge20, TNTUnfolded_node__node8);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge21, TNTUnfolded_node_c6);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge21, TNTUnfolded_node_n6);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge22, TNTUnfolded_node_n6);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge22, TNTUnfolded_node__node9);
			pat_TNTUnfolded.edgeToSourceNode.Add(TNTUnfolded_edge__edge23, TNTUnfolded_node_n6);
			pat_TNTUnfolded.edgeToTargetNode.Add(TNTUnfolded_edge__edge23, TNTUnfolded_node__node10);

			TNTUnfolded_node_c1.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c2.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c3.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c4.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c5.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c6.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_c.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node0.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node1.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node2.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_n2.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node3.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node4.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node5.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_n4.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node6.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node7.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node8.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node_n6.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node9.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_node__node10.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge0.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge1.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge2.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge3.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge4.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge5.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge6.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge7.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge8.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge9.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge10.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge11.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge12.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge13.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge14.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge15.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge16.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge17.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge18.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge19.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge20.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge21.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge22.pointOfDefinition = pat_TNTUnfolded;
			TNTUnfolded_edge__edge23.pointOfDefinition = pat_TNTUnfolded;

			patternGraph = pat_TNTUnfolded;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNTUnfolded curMatch = (Match_TNTUnfolded)_curMatch;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNTUnfolded() {
		}

		public interface IMatch_TNTUnfolded : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			GRGEN_MODEL.IC node_c { get; set; }
			GRGEN_MODEL.IH node__node0 { get; set; }
			GRGEN_MODEL.IH node__node1 { get; set; }
			GRGEN_MODEL.IH node__node2 { get; set; }
			GRGEN_MODEL.IN node_n2 { get; set; }
			GRGEN_MODEL.IO node__node3 { get; set; }
			GRGEN_MODEL.IO node__node4 { get; set; }
			GRGEN_MODEL.IH node__node5 { get; set; }
			GRGEN_MODEL.IN node_n4 { get; set; }
			GRGEN_MODEL.IO node__node6 { get; set; }
			GRGEN_MODEL.IO node__node7 { get; set; }
			GRGEN_MODEL.IH node__node8 { get; set; }
			GRGEN_MODEL.IN node_n6 { get; set; }
			GRGEN_MODEL.IO node__node9 { get; set; }
			GRGEN_MODEL.IO node__node10 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge9 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge10 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge11 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge12 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge13 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge14 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge15 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge16 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge17 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge18 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge19 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge20 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge21 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge22 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge23 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNTUnfolded : GRGEN_LGSP.MatchListElement<Match_TNTUnfolded>, IMatch_TNTUnfolded
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c { get { return (GRGEN_MODEL.IC)_node_c; } set { _node_c = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node0 { get { return (GRGEN_MODEL.IH)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node1 { get { return (GRGEN_MODEL.IH)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node2 { get { return (GRGEN_MODEL.IH)_node__node2; } set { _node__node2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n2 { get { return (GRGEN_MODEL.IN)_node_n2; } set { _node_n2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node3 { get { return (GRGEN_MODEL.IO)_node__node3; } set { _node__node3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node4 { get { return (GRGEN_MODEL.IO)_node__node4; } set { _node__node4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node5 { get { return (GRGEN_MODEL.IH)_node__node5; } set { _node__node5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n4 { get { return (GRGEN_MODEL.IN)_node_n4; } set { _node_n4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node6 { get { return (GRGEN_MODEL.IO)_node__node6; } set { _node__node6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node7 { get { return (GRGEN_MODEL.IO)_node__node7; } set { _node__node7 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node8 { get { return (GRGEN_MODEL.IH)_node__node8; } set { _node__node8 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n6 { get { return (GRGEN_MODEL.IN)_node_n6; } set { _node_n6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node9 { get { return (GRGEN_MODEL.IO)_node__node9; } set { _node__node9 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node10 { get { return (GRGEN_MODEL.IO)_node__node10; } set { _node__node10 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public GRGEN_LGSP.LGSPNode _node_c;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public GRGEN_LGSP.LGSPNode _node__node2;
			public GRGEN_LGSP.LGSPNode _node_n2;
			public GRGEN_LGSP.LGSPNode _node__node3;
			public GRGEN_LGSP.LGSPNode _node__node4;
			public GRGEN_LGSP.LGSPNode _node__node5;
			public GRGEN_LGSP.LGSPNode _node_n4;
			public GRGEN_LGSP.LGSPNode _node__node6;
			public GRGEN_LGSP.LGSPNode _node__node7;
			public GRGEN_LGSP.LGSPNode _node__node8;
			public GRGEN_LGSP.LGSPNode _node_n6;
			public GRGEN_LGSP.LGSPNode _node__node9;
			public GRGEN_LGSP.LGSPNode _node__node10;
			public enum TNTUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @c, @_node0, @_node1, @_node2, @n2, @_node3, @_node4, @_node5, @n4, @_node6, @_node7, @_node8, @n6, @_node9, @_node10, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 21; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNTUnfolded_NodeNums.@c1: return _node_c1;
				case (int)TNTUnfolded_NodeNums.@c2: return _node_c2;
				case (int)TNTUnfolded_NodeNums.@c3: return _node_c3;
				case (int)TNTUnfolded_NodeNums.@c4: return _node_c4;
				case (int)TNTUnfolded_NodeNums.@c5: return _node_c5;
				case (int)TNTUnfolded_NodeNums.@c6: return _node_c6;
				case (int)TNTUnfolded_NodeNums.@c: return _node_c;
				case (int)TNTUnfolded_NodeNums.@_node0: return _node__node0;
				case (int)TNTUnfolded_NodeNums.@_node1: return _node__node1;
				case (int)TNTUnfolded_NodeNums.@_node2: return _node__node2;
				case (int)TNTUnfolded_NodeNums.@n2: return _node_n2;
				case (int)TNTUnfolded_NodeNums.@_node3: return _node__node3;
				case (int)TNTUnfolded_NodeNums.@_node4: return _node__node4;
				case (int)TNTUnfolded_NodeNums.@_node5: return _node__node5;
				case (int)TNTUnfolded_NodeNums.@n4: return _node_n4;
				case (int)TNTUnfolded_NodeNums.@_node6: return _node__node6;
				case (int)TNTUnfolded_NodeNums.@_node7: return _node__node7;
				case (int)TNTUnfolded_NodeNums.@_node8: return _node__node8;
				case (int)TNTUnfolded_NodeNums.@n6: return _node_n6;
				case (int)TNTUnfolded_NodeNums.@_node9: return _node__node9;
				case (int)TNTUnfolded_NodeNums.@_node10: return _node__node10;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				case "c": return _node_c;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				case "_node2": return _node__node2;
				case "n2": return _node_n2;
				case "_node3": return _node__node3;
				case "_node4": return _node__node4;
				case "_node5": return _node__node5;
				case "n4": return _node_n4;
				case "_node6": return _node__node6;
				case "_node7": return _node__node7;
				case "_node8": return _node__node8;
				case "n6": return _node_n6;
				case "_node9": return _node__node9;
				case "_node10": return _node__node10;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c": _node_c = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node2": _node__node2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n2": _node_n2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node3": _node__node3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node4": _node__node4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node5": _node__node5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n4": _node_n4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node6": _node__node6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node7": _node__node7 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node8": _node__node8 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n6": _node_n6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node9": _node__node9 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node10": _node__node10 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge9 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge9; } set { _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge10 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge10; } set { _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge11 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge11; } set { _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge12 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge12; } set { _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge13 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge13; } set { _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge14 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge14; } set { _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge15 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge15; } set { _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge16 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge16; } set { _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge17 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge17; } set { _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge18 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge18; } set { _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge19 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge19; } set { _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge20 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge20; } set { _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge21 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge21; } set { _edge__edge21 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge22 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge22; } set { _edge__edge22 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge23 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge23; } set { _edge__edge23 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public GRGEN_LGSP.LGSPEdge _edge__edge9;
			public GRGEN_LGSP.LGSPEdge _edge__edge10;
			public GRGEN_LGSP.LGSPEdge _edge__edge11;
			public GRGEN_LGSP.LGSPEdge _edge__edge12;
			public GRGEN_LGSP.LGSPEdge _edge__edge13;
			public GRGEN_LGSP.LGSPEdge _edge__edge14;
			public GRGEN_LGSP.LGSPEdge _edge__edge15;
			public GRGEN_LGSP.LGSPEdge _edge__edge16;
			public GRGEN_LGSP.LGSPEdge _edge__edge17;
			public GRGEN_LGSP.LGSPEdge _edge__edge18;
			public GRGEN_LGSP.LGSPEdge _edge__edge19;
			public GRGEN_LGSP.LGSPEdge _edge__edge20;
			public GRGEN_LGSP.LGSPEdge _edge__edge21;
			public GRGEN_LGSP.LGSPEdge _edge__edge22;
			public GRGEN_LGSP.LGSPEdge _edge__edge23;
			public enum TNTUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, @_edge21, @_edge22, @_edge23, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 24; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)TNTUnfolded_EdgeNums.@_edge0: return _edge__edge0;
				case (int)TNTUnfolded_EdgeNums.@_edge1: return _edge__edge1;
				case (int)TNTUnfolded_EdgeNums.@_edge2: return _edge__edge2;
				case (int)TNTUnfolded_EdgeNums.@_edge3: return _edge__edge3;
				case (int)TNTUnfolded_EdgeNums.@_edge4: return _edge__edge4;
				case (int)TNTUnfolded_EdgeNums.@_edge5: return _edge__edge5;
				case (int)TNTUnfolded_EdgeNums.@_edge6: return _edge__edge6;
				case (int)TNTUnfolded_EdgeNums.@_edge7: return _edge__edge7;
				case (int)TNTUnfolded_EdgeNums.@_edge8: return _edge__edge8;
				case (int)TNTUnfolded_EdgeNums.@_edge9: return _edge__edge9;
				case (int)TNTUnfolded_EdgeNums.@_edge10: return _edge__edge10;
				case (int)TNTUnfolded_EdgeNums.@_edge11: return _edge__edge11;
				case (int)TNTUnfolded_EdgeNums.@_edge12: return _edge__edge12;
				case (int)TNTUnfolded_EdgeNums.@_edge13: return _edge__edge13;
				case (int)TNTUnfolded_EdgeNums.@_edge14: return _edge__edge14;
				case (int)TNTUnfolded_EdgeNums.@_edge15: return _edge__edge15;
				case (int)TNTUnfolded_EdgeNums.@_edge16: return _edge__edge16;
				case (int)TNTUnfolded_EdgeNums.@_edge17: return _edge__edge17;
				case (int)TNTUnfolded_EdgeNums.@_edge18: return _edge__edge18;
				case (int)TNTUnfolded_EdgeNums.@_edge19: return _edge__edge19;
				case (int)TNTUnfolded_EdgeNums.@_edge20: return _edge__edge20;
				case (int)TNTUnfolded_EdgeNums.@_edge21: return _edge__edge21;
				case (int)TNTUnfolded_EdgeNums.@_edge22: return _edge__edge22;
				case (int)TNTUnfolded_EdgeNums.@_edge23: return _edge__edge23;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				case "_edge9": return _edge__edge9;
				case "_edge10": return _edge__edge10;
				case "_edge11": return _edge__edge11;
				case "_edge12": return _edge__edge12;
				case "_edge13": return _edge__edge13;
				case "_edge14": return _edge__edge14;
				case "_edge15": return _edge__edge15;
				case "_edge16": return _edge__edge16;
				case "_edge17": return _edge__edge17;
				case "_edge18": return _edge__edge18;
				case "_edge19": return _edge__edge19;
				case "_edge20": return _edge__edge20;
				case "_edge21": return _edge__edge21;
				case "_edge22": return _edge__edge22;
				case "_edge23": return _edge__edge23;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge9": _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge10": _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge11": _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge12": _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge13": _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge14": _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge15": _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge16": _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge17": _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge18": _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge19": _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge20": _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge21": _edge__edge21 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge22": _edge__edge22 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge23": _edge__edge23 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum TNTUnfolded_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum TNTUnfolded_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTUnfolded_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTUnfolded_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNTUnfolded_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNTUnfolded.instance.pat_TNTUnfolded; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNTUnfolded(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNTUnfolded(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNTUnfolded nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNTUnfolded cur = this;
				while(cur != null) {
					Match_TNTUnfolded next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNTUnfolded that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_node_c = that._node_c;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_node__node2 = that._node__node2;
				_node_n2 = that._node_n2;
				_node__node3 = that._node__node3;
				_node__node4 = that._node__node4;
				_node__node5 = that._node__node5;
				_node_n4 = that._node_n4;
				_node__node6 = that._node__node6;
				_node__node7 = that._node__node7;
				_node__node8 = that._node__node8;
				_node_n6 = that._node_n6;
				_node__node9 = that._node__node9;
				_node__node10 = that._node__node10;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				_edge__edge9 = that._edge__edge9;
				_edge__edge10 = that._edge__edge10;
				_edge__edge11 = that._edge__edge11;
				_edge__edge12 = that._edge__edge12;
				_edge__edge13 = that._edge__edge13;
				_edge__edge14 = that._edge__edge14;
				_edge__edge15 = that._edge__edge15;
				_edge__edge16 = that._edge__edge16;
				_edge__edge17 = that._edge__edge17;
				_edge__edge18 = that._edge__edge18;
				_edge__edge19 = that._edge__edge19;
				_edge__edge20 = that._edge__edge20;
				_edge__edge21 = that._edge__edge21;
				_edge__edge22 = that._edge__edge22;
				_edge__edge23 = that._edge__edge23;
			}

			public Match_TNTUnfolded(Match_TNTUnfolded that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNTUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_node_c = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_node__node2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node2];
				_node_n2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n2];
				_node__node3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node3];
				_node__node4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node4];
				_node__node5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node5];
				_node_n4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n4];
				_node__node6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node6];
				_node__node7 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node7];
				_node__node8 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node8];
				_node_n6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n6];
				_node__node9 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node9];
				_node__node10 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node10];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				_edge__edge9 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge9];
				_edge__edge10 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge10];
				_edge__edge11 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge11];
				_edge__edge12 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge12];
				_edge__edge13 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge13];
				_edge__edge14 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge14];
				_edge__edge15 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge15];
				_edge__edge16 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge16];
				_edge__edge17 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge17];
				_edge__edge18 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge18];
				_edge__edge19 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge19];
				_edge__edge20 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge20];
				_edge__edge21 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge21];
				_edge__edge22 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge22];
				_edge__edge23 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge23];
			}

			public Match_TNTUnfolded(Match_TNTUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNTUnfolded()
			{
			}

			public bool IsEqual(Match_TNTUnfolded that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_node_c != that._node_c) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_node__node2 != that._node__node2) return false;
				if(_node_n2 != that._node_n2) return false;
				if(_node__node3 != that._node__node3) return false;
				if(_node__node4 != that._node__node4) return false;
				if(_node__node5 != that._node__node5) return false;
				if(_node_n4 != that._node_n4) return false;
				if(_node__node6 != that._node__node6) return false;
				if(_node__node7 != that._node__node7) return false;
				if(_node__node8 != that._node__node8) return false;
				if(_node_n6 != that._node_n6) return false;
				if(_node__node9 != that._node__node9) return false;
				if(_node__node10 != that._node__node10) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(_edge__edge9 != that._edge__edge9) return false;
				if(_edge__edge10 != that._edge__edge10) return false;
				if(_edge__edge11 != that._edge__edge11) return false;
				if(_edge__edge12 != that._edge__edge12) return false;
				if(_edge__edge13 != that._edge__edge13) return false;
				if(_edge__edge14 != that._edge__edge14) return false;
				if(_edge__edge15 != that._edge__edge15) return false;
				if(_edge__edge16 != that._edge__edge16) return false;
				if(_edge__edge17 != that._edge__edge17) return false;
				if(_edge__edge18 != that._edge__edge18) return false;
				if(_edge__edge19 != that._edge__edge19) return false;
				if(_edge__edge20 != that._edge__edge20) return false;
				if(_edge__edge21 != that._edge__edge21) return false;
				if(_edge__edge22 != that._edge__edge22) return false;
				if(_edge__edge23 != that._edge__edge23) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_c);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node0(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node0);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node1(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node2(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n2(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_n2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node3(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node4(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node5(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n4(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_n4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node6(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node7(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node7);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node8(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node8);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n6(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node_n6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node9(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node9);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node10(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.node__node10);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge9(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge9);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge10(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge10);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge11(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge11);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge12(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge12);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge13(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge13);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge14(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge14);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge15(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge15);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge16(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge16);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge17(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge17);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge18(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge18);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge19(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge19);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge20(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge20);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge21(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge21);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge22(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge22);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge23(List<IMatch_TNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNTUnfolded match in matchList)
					resultList.Add(match.edge__edge23);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>)
				return ((List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded instanceBearingAttributeForSearch_TNTUnfolded = new GRGEN_ACTIONS.Rule_TNTUnfolded.Match_TNTUnfolded();
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_c(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c)) {
					seenValues[list[pos].@node_c].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_c(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_c(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_c(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_c(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node0(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node0)) {
					seenValues[list[pos].@node__node0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node0(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node0, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node1)) {
					seenValues[list[pos].@node__node1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node1, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node2)) {
					seenValues[list[pos].@node__node2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_n2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n2)) {
					seenValues[list[pos].@node_n2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_n2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node3)) {
					seenValues[list[pos].@node__node3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node3, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node4)) {
					seenValues[list[pos].@node__node4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node5)) {
					seenValues[list[pos].@node__node5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node5, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_n4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n4)) {
					seenValues[list[pos].@node_n4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_n4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node6)) {
					seenValues[list[pos].@node__node6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node7(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node7)) {
					seenValues[list[pos].@node__node7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node7(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node7, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node8(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node8)) {
					seenValues[list[pos].@node__node8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node8(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node8, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy_n6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n6)) {
					seenValues[list[pos].@node_n6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy_n6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node9(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node9)) {
					seenValues[list[pos].@node__node9].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node9, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node9(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node9)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node9, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__node10(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node10)) {
					seenValues[list[pos].@node__node10].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node10, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__node10(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node10)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node10, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__node10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__node10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__node10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node10.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge0(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge7(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge8(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge9(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge9)) {
					seenValues[list[pos].@edge__edge9].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge9, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge9(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge9)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge9, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge10(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge10)) {
					seenValues[list[pos].@edge__edge10].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge10, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge10(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge10)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge10, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge11(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge11)) {
					seenValues[list[pos].@edge__edge11].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge11, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge11(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge11)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge11, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge12(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge12)) {
					seenValues[list[pos].@edge__edge12].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge12, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge12(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge12)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge12, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge13(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge13)) {
					seenValues[list[pos].@edge__edge13].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge13, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge13(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge13)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge13, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge14(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge14)) {
					seenValues[list[pos].@edge__edge14].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge14, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge14(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge14)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge14, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge15(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge15)) {
					seenValues[list[pos].@edge__edge15].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge15, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge15(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge15)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge15, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge16(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge16)) {
					seenValues[list[pos].@edge__edge16].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge16, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge16(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge16)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge16, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge17(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge17)) {
					seenValues[list[pos].@edge__edge17].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge17, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge17(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge17)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge17, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge18(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge18)) {
					seenValues[list[pos].@edge__edge18].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge18, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge18(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge18)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge18, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge19(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge19)) {
					seenValues[list[pos].@edge__edge19].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge19, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge19(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge19)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge19, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge20(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge20)) {
					seenValues[list[pos].@edge__edge20].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge20, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge20(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge20)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge20, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge21(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge21)) {
					seenValues[list[pos].@edge__edge21].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge21, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge21(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge21)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge21, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge22(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge22)) {
					seenValues[list[pos].@edge__edge22].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge22, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge22(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge22)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge22, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge22(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge22.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge22(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge22.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge22(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge22.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge22(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge22.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_groupBy__edge23(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge23)) {
					seenValues[list[pos].@edge__edge23].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge23, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> Array_TNTUnfolded_keepOneForEachBy__edge23(List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge23)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge23, null);
				}
			}
			return newList;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge23(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge23.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_indexOfBy__edge23(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge23.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge23(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge23.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNTUnfolded_lastIndexOfBy__edge23(IList<GRGEN_ACTIONS.Rule_TNTUnfolded.IMatch_TNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge23.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_createTNT : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_createTNT instance = null;
		public static Rule_createTNT Instance { get { if(instance==null) { instance = new Rule_createTNT(); instance.initialize(); } return instance; } }

		public enum createTNT_NodeNums { };
		public enum createTNT_EdgeNums { };
		public enum createTNT_VariableNums { };
		public enum createTNT_SubNums { };
		public enum createTNT_AltNums { };
		public enum createTNT_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_createTNT;


		private Rule_createTNT()
			: base("createTNT",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_createTNT+IMatch_createTNT",
				"de.unika.ipd.grGen.Action_TNT.Rule_createTNT+Match_createTNT"
			)
		{
		}
		private void initialize()
		{
			bool[,] createTNT_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] createTNT_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] createTNT_isNodeTotallyHomomorphic = new bool[0];
			bool[] createTNT_isEdgeTotallyHomomorphic = new bool[0];
			pat_createTNT = new GRGEN_LGSP.PatternGraph(
				"createTNT",
				"",
				null, "createTNT",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				createTNT_isNodeHomomorphicGlobal,
				createTNT_isEdgeHomomorphicGlobal,
				createTNT_isNodeTotallyHomomorphic,
				createTNT_isEdgeTotallyHomomorphic
			);


			patternGraph = pat_createTNT;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_createTNT curMatch = (Match_createTNT)_curMatch;
			graph.SettingAddedNodeNames( createTNT_addedNodeNames );
			GRGEN_MODEL.@C node_c1 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@H node__node0 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node1 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node2 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n2 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node3 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node4 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node5 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n4 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node6 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node7 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node8 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n6 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node9 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node10 = GRGEN_MODEL.@O.CreateNode(graph);
			graph.SettingAddedEdgeNames( createTNT_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge9 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c);
			GRGEN_MODEL.@Edge edge__edge10 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node0);
			GRGEN_MODEL.@Edge edge__edge11 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node1);
			GRGEN_MODEL.@Edge edge__edge12 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node2);
			GRGEN_MODEL.@Edge edge__edge13 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_n2);
			GRGEN_MODEL.@Edge edge__edge14 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node3);
			GRGEN_MODEL.@Edge edge__edge15 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node4);
			GRGEN_MODEL.@Edge edge__edge16 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node__node5);
			GRGEN_MODEL.@Edge edge__edge17 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_n4);
			GRGEN_MODEL.@Edge edge__edge18 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node6);
			GRGEN_MODEL.@Edge edge__edge19 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node7);
			GRGEN_MODEL.@Edge edge__edge20 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node__node8);
			GRGEN_MODEL.@Edge edge__edge21 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_n6);
			GRGEN_MODEL.@Edge edge__edge22 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n6, node__node9);
			GRGEN_MODEL.@Edge edge__edge23 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n6, node__node10);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] createTNT_addedNodeNames = new string[] { "c1", "c2", "c3", "c4", "c5", "c6", "c", "_node0", "_node1", "_node2", "n2", "_node3", "_node4", "_node5", "n4", "_node6", "_node7", "_node8", "n6", "_node9", "_node10" };
		private static string[] createTNT_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8", "_edge9", "_edge10", "_edge11", "_edge12", "_edge13", "_edge14", "_edge15", "_edge16", "_edge17", "_edge18", "_edge19", "_edge20", "_edge21", "_edge22", "_edge23" };

		static Rule_createTNT() {
		}

		public interface IMatch_createTNT : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_createTNT : GRGEN_LGSP.MatchListElement<Match_createTNT>, IMatch_createTNT
		{
			public enum createTNT_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNT_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNT_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNT_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNT_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNT_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNT_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_createTNT.instance.pat_createTNT; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_createTNT(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_createTNT(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_createTNT nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_createTNT cur = this;
				while(cur != null) {
					Match_createTNT next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_createTNT that)
			{
			}

			public Match_createTNT(Match_createTNT that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_createTNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
			}

			public Match_createTNT(Match_createTNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_createTNT()
			{
			}

			public bool IsEqual(Match_createTNT that)
			{
				if(that==null) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_createTNT.IMatch_createTNT> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_createTNT.IMatch_createTNT>)
				return ((List<GRGEN_ACTIONS.Rule_createTNT.IMatch_createTNT>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_createTNT.IMatch_createTNT>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_createTNT.IMatch_createTNT instanceBearingAttributeForSearch_createTNT = new GRGEN_ACTIONS.Rule_createTNT.Match_createTNT();
	}

	public class Rule_DNT : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_DNT instance = null;
		public static Rule_DNT Instance { get { if(instance==null) { instance = new Rule_DNT(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] DNT_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNT_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNT_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNT_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNT_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNT_node_c6_AllowedTypes = null;
		public static bool[] DNT_node_c1_IsAllowedType = null;
		public static bool[] DNT_node_c2_IsAllowedType = null;
		public static bool[] DNT_node_c3_IsAllowedType = null;
		public static bool[] DNT_node_c4_IsAllowedType = null;
		public static bool[] DNT_node_c5_IsAllowedType = null;
		public static bool[] DNT_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNT_edge__edge8_AllowedTypes = null;
		public static bool[] DNT_edge__edge0_IsAllowedType = null;
		public static bool[] DNT_edge__edge1_IsAllowedType = null;
		public static bool[] DNT_edge__edge2_IsAllowedType = null;
		public static bool[] DNT_edge__edge3_IsAllowedType = null;
		public static bool[] DNT_edge__edge4_IsAllowedType = null;
		public static bool[] DNT_edge__edge5_IsAllowedType = null;
		public static bool[] DNT_edge__edge6_IsAllowedType = null;
		public static bool[] DNT_edge__edge7_IsAllowedType = null;
		public static bool[] DNT_edge__edge8_IsAllowedType = null;
		public enum DNT_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum DNT_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum DNT_VariableNums { };
		public enum DNT_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, };
		public enum DNT_AltNums { };
		public enum DNT_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_DNT;


		private Rule_DNT()
			: base("DNT",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_DNT+IMatch_DNT",
				"de.unika.ipd.grGen.Action_TNT.Rule_DNT+Match_DNT"
			)
		{
		}
		private void initialize()
		{
			bool[,] DNT_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] DNT_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] DNT_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] DNT_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode DNT_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c1", "c1", DNT_node_c1_AllowedTypes, DNT_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNT_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c2", "c2", DNT_node_c2_AllowedTypes, DNT_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNT_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c3", "c3", DNT_node_c3_AllowedTypes, DNT_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNT_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c4", "c4", DNT_node_c4_AllowedTypes, DNT_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNT_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c5", "c5", DNT_node_c5_AllowedTypes, DNT_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNT_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNT_node_c6", "c6", DNT_node_c6_AllowedTypes, DNT_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge0", "_edge0", DNT_edge__edge0_AllowedTypes, DNT_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge1", "_edge1", DNT_edge__edge1_AllowedTypes, DNT_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge2", "_edge2", DNT_edge__edge2_AllowedTypes, DNT_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge3", "_edge3", DNT_edge__edge3_AllowedTypes, DNT_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge4", "_edge4", DNT_edge__edge4_AllowedTypes, DNT_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge5", "_edge5", DNT_edge__edge5_AllowedTypes, DNT_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge6", "_edge6", DNT_edge__edge6_AllowedTypes, DNT_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge7", "_edge7", DNT_edge__edge7_AllowedTypes, DNT_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNT_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNT_edge__edge8", "_edge8", DNT_edge__edge8_AllowedTypes, DNT_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_Methyl.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub4 = new GRGEN_LGSP.PatternGraphEmbedding("_sub4", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding DNT__sub5 = new GRGEN_LGSP.PatternGraphEmbedding("_sub5", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("DNT_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "DNT_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { DNT_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_DNT = new GRGEN_LGSP.PatternGraph(
				"DNT",
				"",
				null, "DNT",
				false, false,
				new GRGEN_LGSP.PatternNode[] { DNT_node_c1, DNT_node_c2, DNT_node_c3, DNT_node_c4, DNT_node_c5, DNT_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { DNT_edge__edge0, DNT_edge__edge1, DNT_edge__edge2, DNT_edge__edge3, DNT_edge__edge4, DNT_edge__edge5, DNT_edge__edge6, DNT_edge__edge7, DNT_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { DNT__sub0, DNT__sub1, DNT__sub2, DNT__sub3, DNT__sub4, DNT__sub5 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				DNT_isNodeHomomorphicGlobal,
				DNT_isEdgeHomomorphicGlobal,
				DNT_isNodeTotallyHomomorphic,
				DNT_isEdgeTotallyHomomorphic
			);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge0, DNT_node_c1);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge0, DNT_node_c2);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge1, DNT_node_c2);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge1, DNT_node_c3);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge2, DNT_node_c3);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge2, DNT_node_c4);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge3, DNT_node_c4);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge3, DNT_node_c5);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge4, DNT_node_c5);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge4, DNT_node_c6);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge5, DNT_node_c6);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge5, DNT_node_c1);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge6, DNT_node_c1);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge6, DNT_node_c2);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge7, DNT_node_c3);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge7, DNT_node_c4);
			pat_DNT.edgeToSourceNode.Add(DNT_edge__edge8, DNT_node_c5);
			pat_DNT.edgeToTargetNode.Add(DNT_edge__edge8, DNT_node_c6);

			DNT_node_c1.pointOfDefinition = pat_DNT;
			DNT_node_c2.pointOfDefinition = pat_DNT;
			DNT_node_c3.pointOfDefinition = pat_DNT;
			DNT_node_c4.pointOfDefinition = pat_DNT;
			DNT_node_c5.pointOfDefinition = pat_DNT;
			DNT_node_c6.pointOfDefinition = pat_DNT;
			DNT_edge__edge0.pointOfDefinition = pat_DNT;
			DNT_edge__edge1.pointOfDefinition = pat_DNT;
			DNT_edge__edge2.pointOfDefinition = pat_DNT;
			DNT_edge__edge3.pointOfDefinition = pat_DNT;
			DNT_edge__edge4.pointOfDefinition = pat_DNT;
			DNT_edge__edge5.pointOfDefinition = pat_DNT;
			DNT_edge__edge6.pointOfDefinition = pat_DNT;
			DNT_edge__edge7.pointOfDefinition = pat_DNT;
			DNT_edge__edge8.pointOfDefinition = pat_DNT;
			DNT__sub0.PointOfDefinition = pat_DNT;
			DNT__sub1.PointOfDefinition = pat_DNT;
			DNT__sub2.PointOfDefinition = pat_DNT;
			DNT__sub3.PointOfDefinition = pat_DNT;
			DNT__sub4.PointOfDefinition = pat_DNT;
			DNT__sub5.PointOfDefinition = pat_DNT;

			patternGraph = pat_DNT;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_DNT curMatch = (Match_DNT)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub4 = curMatch.@__sub4;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub5 = curMatch.@__sub5;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_DNT() {
		}

		public interface IMatch_DNT : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_DNT : GRGEN_LGSP.MatchListElement<Match_DNT>, IMatch_DNT
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum DNT_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)DNT_NodeNums.@c1: return _node_c1;
				case (int)DNT_NodeNums.@c2: return _node_c2;
				case (int)DNT_NodeNums.@c3: return _node_c3;
				case (int)DNT_NodeNums.@c4: return _node_c4;
				case (int)DNT_NodeNums.@c5: return _node_c5;
				case (int)DNT_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum DNT_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)DNT_EdgeNums.@_edge0: return _edge__edge0;
				case (int)DNT_EdgeNums.@_edge1: return _edge__edge1;
				case (int)DNT_EdgeNums.@_edge2: return _edge__edge2;
				case (int)DNT_EdgeNums.@_edge3: return _edge__edge3;
				case (int)DNT_EdgeNums.@_edge4: return _edge__edge4;
				case (int)DNT_EdgeNums.@_edge5: return _edge__edge5;
				case (int)DNT_EdgeNums.@_edge6: return _edge__edge6;
				case (int)DNT_EdgeNums.@_edge7: return _edge__edge7;
				case (int)DNT_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum DNT_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get { return @__sub4; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub5 { get { return @__sub5; } }
			public @GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl @__sub0;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub1;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub2;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub3;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub4;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub5;
			public enum DNT_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 6; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)DNT_SubNums.@_sub0: return __sub0;
				case (int)DNT_SubNums.@_sub1: return __sub1;
				case (int)DNT_SubNums.@_sub2: return __sub2;
				case (int)DNT_SubNums.@_sub3: return __sub3;
				case (int)DNT_SubNums.@_sub4: return __sub4;
				case (int)DNT_SubNums.@_sub5: return __sub5;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				case "_sub4": return __sub4;
				case "_sub5": return __sub5;
				default: return null;
				}
			}

			public enum DNT_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum DNT_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum DNT_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_DNT.instance.pat_DNT; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_DNT(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_DNT(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_DNT nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_DNT cur = this;
				while(cur != null) {
					Match_DNT next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_DNT that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
				@__sub4 = that.@__sub4;
				@__sub5 = that.@__sub5;
			}

			public Match_DNT(Match_DNT that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_DNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				@__sub0 = new GRGEN_ACTIONS.Pattern_Methyl.Match_Methyl(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub3, oldToNewMap);
				@__sub4 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub4, oldToNewMap);
				@__sub5 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub5, oldToNewMap);
			}

			public Match_DNT(Match_DNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_DNT()
			{
			}

			public bool IsEqual(Match_DNT that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				if(!@__sub4.IsEqual(that.@__sub4)) return false;
				if(!@__sub5.IsEqual(that.@__sub5)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_DNT> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_DNT> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNT match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>)
				return ((List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_DNT.IMatch_DNT instanceBearingAttributeForSearch_DNT = new GRGEN_ACTIONS.Rule_DNT.Match_DNT();
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c1(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c2(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c3(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c4(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c5(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy_c6(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge0(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge1(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge2(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge3(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge4(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge5(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge6(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge7(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_groupBy__edge8(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> tempList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			foreach(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> Array_DNT_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list)
		{
			List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> newList = new List<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNT.IMatch_DNT element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_DNT_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNT_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNT.IMatch_DNT> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_DNTUnfolded : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_DNTUnfolded instance = null;
		public static Rule_DNTUnfolded Instance { get { if(instance==null) { instance = new Rule_DNTUnfolded(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_c_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_n2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node_n4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node7_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node8_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] DNTUnfolded_node__node9_AllowedTypes = null;
		public static bool[] DNTUnfolded_node_c1_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c2_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c3_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c4_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c5_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c6_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_c_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node0_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node1_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node2_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_n2_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node3_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node4_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node5_IsAllowedType = null;
		public static bool[] DNTUnfolded_node_n4_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node6_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node7_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node8_IsAllowedType = null;
		public static bool[] DNTUnfolded_node__node9_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge8_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge9_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge10_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge11_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge12_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge13_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge14_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge15_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge16_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge17_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge18_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge19_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge20_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] DNTUnfolded_edge__edge21_AllowedTypes = null;
		public static bool[] DNTUnfolded_edge__edge0_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge1_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge2_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge3_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge4_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge5_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge6_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge7_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge8_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge9_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge10_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge11_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge12_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge13_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge14_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge15_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge16_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge17_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge18_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge19_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge20_IsAllowedType = null;
		public static bool[] DNTUnfolded_edge__edge21_IsAllowedType = null;
		public enum DNTUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @c, @_node0, @_node1, @_node2, @n2, @_node3, @_node4, @_node5, @n4, @_node6, @_node7, @_node8, @_node9, };
		public enum DNTUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, @_edge21, };
		public enum DNTUnfolded_VariableNums { };
		public enum DNTUnfolded_SubNums { };
		public enum DNTUnfolded_AltNums { };
		public enum DNTUnfolded_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_DNTUnfolded;


		private Rule_DNTUnfolded()
			: base("DNTUnfolded",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_DNTUnfolded+IMatch_DNTUnfolded",
				"de.unika.ipd.grGen.Action_TNT.Rule_DNTUnfolded+Match_DNTUnfolded"
			)
		{
		}
		private void initialize()
		{
			bool[,] DNTUnfolded_isNodeHomomorphicGlobal = new bool[19, 19] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[,] DNTUnfolded_isEdgeHomomorphicGlobal = new bool[22, 22] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[] DNTUnfolded_isNodeTotallyHomomorphic = new bool[19] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			bool[] DNTUnfolded_isEdgeTotallyHomomorphic = new bool[22] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c1", "c1", DNTUnfolded_node_c1_AllowedTypes, DNTUnfolded_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c2", "c2", DNTUnfolded_node_c2_AllowedTypes, DNTUnfolded_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c3", "c3", DNTUnfolded_node_c3_AllowedTypes, DNTUnfolded_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c4", "c4", DNTUnfolded_node_c4_AllowedTypes, DNTUnfolded_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c5", "c5", DNTUnfolded_node_c5_AllowedTypes, DNTUnfolded_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c6", "c6", DNTUnfolded_node_c6_AllowedTypes, DNTUnfolded_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_c = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "DNTUnfolded_node_c", "c", DNTUnfolded_node_c_AllowedTypes, DNTUnfolded_node_c_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node0", "_node0", DNTUnfolded_node__node0_AllowedTypes, DNTUnfolded_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node1", "_node1", DNTUnfolded_node__node1_AllowedTypes, DNTUnfolded_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node2", "_node2", DNTUnfolded_node__node2_AllowedTypes, DNTUnfolded_node__node2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_n2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "DNTUnfolded_node_n2", "n2", DNTUnfolded_node_n2_AllowedTypes, DNTUnfolded_node_n2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "DNTUnfolded_node__node3", "_node3", DNTUnfolded_node__node3_AllowedTypes, DNTUnfolded_node__node3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "DNTUnfolded_node__node4", "_node4", DNTUnfolded_node__node4_AllowedTypes, DNTUnfolded_node__node4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node5", "_node5", DNTUnfolded_node__node5_AllowedTypes, DNTUnfolded_node__node5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node_n4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "DNTUnfolded_node_n4", "n4", DNTUnfolded_node_n4_AllowedTypes, DNTUnfolded_node_n4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "DNTUnfolded_node__node6", "_node6", DNTUnfolded_node__node6_AllowedTypes, DNTUnfolded_node__node6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node7 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "DNTUnfolded_node__node7", "_node7", DNTUnfolded_node__node7_AllowedTypes, DNTUnfolded_node__node7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node8 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node8", "_node8", DNTUnfolded_node__node8_AllowedTypes, DNTUnfolded_node__node8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode DNTUnfolded_node__node9 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "DNTUnfolded_node__node9", "_node9", DNTUnfolded_node__node9_AllowedTypes, DNTUnfolded_node__node9_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge0", "_edge0", DNTUnfolded_edge__edge0_AllowedTypes, DNTUnfolded_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge1", "_edge1", DNTUnfolded_edge__edge1_AllowedTypes, DNTUnfolded_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge2", "_edge2", DNTUnfolded_edge__edge2_AllowedTypes, DNTUnfolded_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge3", "_edge3", DNTUnfolded_edge__edge3_AllowedTypes, DNTUnfolded_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge4", "_edge4", DNTUnfolded_edge__edge4_AllowedTypes, DNTUnfolded_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge5", "_edge5", DNTUnfolded_edge__edge5_AllowedTypes, DNTUnfolded_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge6", "_edge6", DNTUnfolded_edge__edge6_AllowedTypes, DNTUnfolded_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge7", "_edge7", DNTUnfolded_edge__edge7_AllowedTypes, DNTUnfolded_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge8", "_edge8", DNTUnfolded_edge__edge8_AllowedTypes, DNTUnfolded_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge9 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge9", "_edge9", DNTUnfolded_edge__edge9_AllowedTypes, DNTUnfolded_edge__edge9_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge10 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge10", "_edge10", DNTUnfolded_edge__edge10_AllowedTypes, DNTUnfolded_edge__edge10_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge11 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge11", "_edge11", DNTUnfolded_edge__edge11_AllowedTypes, DNTUnfolded_edge__edge11_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge12 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge12", "_edge12", DNTUnfolded_edge__edge12_AllowedTypes, DNTUnfolded_edge__edge12_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge13 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge13", "_edge13", DNTUnfolded_edge__edge13_AllowedTypes, DNTUnfolded_edge__edge13_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge14 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge14", "_edge14", DNTUnfolded_edge__edge14_AllowedTypes, DNTUnfolded_edge__edge14_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge15 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge15", "_edge15", DNTUnfolded_edge__edge15_AllowedTypes, DNTUnfolded_edge__edge15_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge16 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge16", "_edge16", DNTUnfolded_edge__edge16_AllowedTypes, DNTUnfolded_edge__edge16_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge17 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge17", "_edge17", DNTUnfolded_edge__edge17_AllowedTypes, DNTUnfolded_edge__edge17_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge18 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge18", "_edge18", DNTUnfolded_edge__edge18_AllowedTypes, DNTUnfolded_edge__edge18_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge19 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge19", "_edge19", DNTUnfolded_edge__edge19_AllowedTypes, DNTUnfolded_edge__edge19_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge20 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge20", "_edge20", DNTUnfolded_edge__edge20_AllowedTypes, DNTUnfolded_edge__edge20_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge DNTUnfolded_edge__edge21 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "DNTUnfolded_edge__edge21", "_edge21", DNTUnfolded_edge__edge21_AllowedTypes, DNTUnfolded_edge__edge21_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_DNTUnfolded = new GRGEN_LGSP.PatternGraph(
				"DNTUnfolded",
				"",
				null, "DNTUnfolded",
				false, false,
				new GRGEN_LGSP.PatternNode[] { DNTUnfolded_node_c1, DNTUnfolded_node_c2, DNTUnfolded_node_c3, DNTUnfolded_node_c4, DNTUnfolded_node_c5, DNTUnfolded_node_c6, DNTUnfolded_node_c, DNTUnfolded_node__node0, DNTUnfolded_node__node1, DNTUnfolded_node__node2, DNTUnfolded_node_n2, DNTUnfolded_node__node3, DNTUnfolded_node__node4, DNTUnfolded_node__node5, DNTUnfolded_node_n4, DNTUnfolded_node__node6, DNTUnfolded_node__node7, DNTUnfolded_node__node8, DNTUnfolded_node__node9 }, 
				new GRGEN_LGSP.PatternEdge[] { DNTUnfolded_edge__edge0, DNTUnfolded_edge__edge1, DNTUnfolded_edge__edge2, DNTUnfolded_edge__edge3, DNTUnfolded_edge__edge4, DNTUnfolded_edge__edge5, DNTUnfolded_edge__edge6, DNTUnfolded_edge__edge7, DNTUnfolded_edge__edge8, DNTUnfolded_edge__edge9, DNTUnfolded_edge__edge10, DNTUnfolded_edge__edge11, DNTUnfolded_edge__edge12, DNTUnfolded_edge__edge13, DNTUnfolded_edge__edge14, DNTUnfolded_edge__edge15, DNTUnfolded_edge__edge16, DNTUnfolded_edge__edge17, DNTUnfolded_edge__edge18, DNTUnfolded_edge__edge19, DNTUnfolded_edge__edge20, DNTUnfolded_edge__edge21 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[19, 19] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				new bool[22, 22] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				DNTUnfolded_isNodeHomomorphicGlobal,
				DNTUnfolded_isEdgeHomomorphicGlobal,
				DNTUnfolded_isNodeTotallyHomomorphic,
				DNTUnfolded_isEdgeTotallyHomomorphic
			);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge0, DNTUnfolded_node_c1);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge0, DNTUnfolded_node_c2);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge1, DNTUnfolded_node_c2);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge1, DNTUnfolded_node_c3);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge2, DNTUnfolded_node_c3);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge2, DNTUnfolded_node_c4);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge3, DNTUnfolded_node_c4);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge3, DNTUnfolded_node_c5);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge4, DNTUnfolded_node_c5);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge4, DNTUnfolded_node_c6);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge5, DNTUnfolded_node_c6);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge5, DNTUnfolded_node_c1);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge6, DNTUnfolded_node_c1);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge6, DNTUnfolded_node_c2);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge7, DNTUnfolded_node_c3);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge7, DNTUnfolded_node_c4);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge8, DNTUnfolded_node_c5);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge8, DNTUnfolded_node_c6);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge9, DNTUnfolded_node_c1);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge9, DNTUnfolded_node_c);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge10, DNTUnfolded_node_c);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge10, DNTUnfolded_node__node0);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge11, DNTUnfolded_node_c);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge11, DNTUnfolded_node__node1);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge12, DNTUnfolded_node_c);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge12, DNTUnfolded_node__node2);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge13, DNTUnfolded_node_c2);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge13, DNTUnfolded_node_n2);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge14, DNTUnfolded_node_n2);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge14, DNTUnfolded_node__node3);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge15, DNTUnfolded_node_n2);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge15, DNTUnfolded_node__node4);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge16, DNTUnfolded_node_c3);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge16, DNTUnfolded_node__node5);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge17, DNTUnfolded_node_c4);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge17, DNTUnfolded_node_n4);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge18, DNTUnfolded_node_n4);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge18, DNTUnfolded_node__node6);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge19, DNTUnfolded_node_n4);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge19, DNTUnfolded_node__node7);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge20, DNTUnfolded_node_c5);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge20, DNTUnfolded_node__node8);
			pat_DNTUnfolded.edgeToSourceNode.Add(DNTUnfolded_edge__edge21, DNTUnfolded_node_c6);
			pat_DNTUnfolded.edgeToTargetNode.Add(DNTUnfolded_edge__edge21, DNTUnfolded_node__node9);

			DNTUnfolded_node_c1.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c2.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c3.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c4.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c5.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c6.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_c.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node0.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node1.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node2.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_n2.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node3.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node4.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node5.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node_n4.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node6.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node7.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node8.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_node__node9.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge0.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge1.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge2.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge3.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge4.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge5.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge6.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge7.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge8.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge9.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge10.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge11.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge12.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge13.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge14.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge15.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge16.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge17.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge18.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge19.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge20.pointOfDefinition = pat_DNTUnfolded;
			DNTUnfolded_edge__edge21.pointOfDefinition = pat_DNTUnfolded;

			patternGraph = pat_DNTUnfolded;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_DNTUnfolded curMatch = (Match_DNTUnfolded)_curMatch;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_DNTUnfolded() {
		}

		public interface IMatch_DNTUnfolded : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			GRGEN_MODEL.IC node_c { get; set; }
			GRGEN_MODEL.IH node__node0 { get; set; }
			GRGEN_MODEL.IH node__node1 { get; set; }
			GRGEN_MODEL.IH node__node2 { get; set; }
			GRGEN_MODEL.IN node_n2 { get; set; }
			GRGEN_MODEL.IO node__node3 { get; set; }
			GRGEN_MODEL.IO node__node4 { get; set; }
			GRGEN_MODEL.IH node__node5 { get; set; }
			GRGEN_MODEL.IN node_n4 { get; set; }
			GRGEN_MODEL.IO node__node6 { get; set; }
			GRGEN_MODEL.IO node__node7 { get; set; }
			GRGEN_MODEL.IH node__node8 { get; set; }
			GRGEN_MODEL.IH node__node9 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge9 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge10 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge11 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge12 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge13 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge14 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge15 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge16 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge17 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge18 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge19 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge20 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge21 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_DNTUnfolded : GRGEN_LGSP.MatchListElement<Match_DNTUnfolded>, IMatch_DNTUnfolded
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c { get { return (GRGEN_MODEL.IC)_node_c; } set { _node_c = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node0 { get { return (GRGEN_MODEL.IH)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node1 { get { return (GRGEN_MODEL.IH)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node2 { get { return (GRGEN_MODEL.IH)_node__node2; } set { _node__node2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n2 { get { return (GRGEN_MODEL.IN)_node_n2; } set { _node_n2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node3 { get { return (GRGEN_MODEL.IO)_node__node3; } set { _node__node3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node4 { get { return (GRGEN_MODEL.IO)_node__node4; } set { _node__node4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node5 { get { return (GRGEN_MODEL.IH)_node__node5; } set { _node__node5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n4 { get { return (GRGEN_MODEL.IN)_node_n4; } set { _node_n4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node6 { get { return (GRGEN_MODEL.IO)_node__node6; } set { _node__node6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node7 { get { return (GRGEN_MODEL.IO)_node__node7; } set { _node__node7 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node8 { get { return (GRGEN_MODEL.IH)_node__node8; } set { _node__node8 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node9 { get { return (GRGEN_MODEL.IH)_node__node9; } set { _node__node9 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public GRGEN_LGSP.LGSPNode _node_c;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public GRGEN_LGSP.LGSPNode _node__node2;
			public GRGEN_LGSP.LGSPNode _node_n2;
			public GRGEN_LGSP.LGSPNode _node__node3;
			public GRGEN_LGSP.LGSPNode _node__node4;
			public GRGEN_LGSP.LGSPNode _node__node5;
			public GRGEN_LGSP.LGSPNode _node_n4;
			public GRGEN_LGSP.LGSPNode _node__node6;
			public GRGEN_LGSP.LGSPNode _node__node7;
			public GRGEN_LGSP.LGSPNode _node__node8;
			public GRGEN_LGSP.LGSPNode _node__node9;
			public enum DNTUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @c, @_node0, @_node1, @_node2, @n2, @_node3, @_node4, @_node5, @n4, @_node6, @_node7, @_node8, @_node9, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 19; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)DNTUnfolded_NodeNums.@c1: return _node_c1;
				case (int)DNTUnfolded_NodeNums.@c2: return _node_c2;
				case (int)DNTUnfolded_NodeNums.@c3: return _node_c3;
				case (int)DNTUnfolded_NodeNums.@c4: return _node_c4;
				case (int)DNTUnfolded_NodeNums.@c5: return _node_c5;
				case (int)DNTUnfolded_NodeNums.@c6: return _node_c6;
				case (int)DNTUnfolded_NodeNums.@c: return _node_c;
				case (int)DNTUnfolded_NodeNums.@_node0: return _node__node0;
				case (int)DNTUnfolded_NodeNums.@_node1: return _node__node1;
				case (int)DNTUnfolded_NodeNums.@_node2: return _node__node2;
				case (int)DNTUnfolded_NodeNums.@n2: return _node_n2;
				case (int)DNTUnfolded_NodeNums.@_node3: return _node__node3;
				case (int)DNTUnfolded_NodeNums.@_node4: return _node__node4;
				case (int)DNTUnfolded_NodeNums.@_node5: return _node__node5;
				case (int)DNTUnfolded_NodeNums.@n4: return _node_n4;
				case (int)DNTUnfolded_NodeNums.@_node6: return _node__node6;
				case (int)DNTUnfolded_NodeNums.@_node7: return _node__node7;
				case (int)DNTUnfolded_NodeNums.@_node8: return _node__node8;
				case (int)DNTUnfolded_NodeNums.@_node9: return _node__node9;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				case "c": return _node_c;
				case "_node0": return _node__node0;
				case "_node1": return _node__node1;
				case "_node2": return _node__node2;
				case "n2": return _node_n2;
				case "_node3": return _node__node3;
				case "_node4": return _node__node4;
				case "_node5": return _node__node5;
				case "n4": return _node_n4;
				case "_node6": return _node__node6;
				case "_node7": return _node__node7;
				case "_node8": return _node__node8;
				case "_node9": return _node__node9;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c": _node_c = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node2": _node__node2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n2": _node_n2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node3": _node__node3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node4": _node__node4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node5": _node__node5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n4": _node_n4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node6": _node__node6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node7": _node__node7 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node8": _node__node8 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node9": _node__node9 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge9 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge9; } set { _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge10 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge10; } set { _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge11 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge11; } set { _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge12 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge12; } set { _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge13 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge13; } set { _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge14 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge14; } set { _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge15 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge15; } set { _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge16 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge16; } set { _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge17 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge17; } set { _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge18 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge18; } set { _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge19 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge19; } set { _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge20 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge20; } set { _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge21 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge21; } set { _edge__edge21 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public GRGEN_LGSP.LGSPEdge _edge__edge9;
			public GRGEN_LGSP.LGSPEdge _edge__edge10;
			public GRGEN_LGSP.LGSPEdge _edge__edge11;
			public GRGEN_LGSP.LGSPEdge _edge__edge12;
			public GRGEN_LGSP.LGSPEdge _edge__edge13;
			public GRGEN_LGSP.LGSPEdge _edge__edge14;
			public GRGEN_LGSP.LGSPEdge _edge__edge15;
			public GRGEN_LGSP.LGSPEdge _edge__edge16;
			public GRGEN_LGSP.LGSPEdge _edge__edge17;
			public GRGEN_LGSP.LGSPEdge _edge__edge18;
			public GRGEN_LGSP.LGSPEdge _edge__edge19;
			public GRGEN_LGSP.LGSPEdge _edge__edge20;
			public GRGEN_LGSP.LGSPEdge _edge__edge21;
			public enum DNTUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, @_edge21, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 22; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)DNTUnfolded_EdgeNums.@_edge0: return _edge__edge0;
				case (int)DNTUnfolded_EdgeNums.@_edge1: return _edge__edge1;
				case (int)DNTUnfolded_EdgeNums.@_edge2: return _edge__edge2;
				case (int)DNTUnfolded_EdgeNums.@_edge3: return _edge__edge3;
				case (int)DNTUnfolded_EdgeNums.@_edge4: return _edge__edge4;
				case (int)DNTUnfolded_EdgeNums.@_edge5: return _edge__edge5;
				case (int)DNTUnfolded_EdgeNums.@_edge6: return _edge__edge6;
				case (int)DNTUnfolded_EdgeNums.@_edge7: return _edge__edge7;
				case (int)DNTUnfolded_EdgeNums.@_edge8: return _edge__edge8;
				case (int)DNTUnfolded_EdgeNums.@_edge9: return _edge__edge9;
				case (int)DNTUnfolded_EdgeNums.@_edge10: return _edge__edge10;
				case (int)DNTUnfolded_EdgeNums.@_edge11: return _edge__edge11;
				case (int)DNTUnfolded_EdgeNums.@_edge12: return _edge__edge12;
				case (int)DNTUnfolded_EdgeNums.@_edge13: return _edge__edge13;
				case (int)DNTUnfolded_EdgeNums.@_edge14: return _edge__edge14;
				case (int)DNTUnfolded_EdgeNums.@_edge15: return _edge__edge15;
				case (int)DNTUnfolded_EdgeNums.@_edge16: return _edge__edge16;
				case (int)DNTUnfolded_EdgeNums.@_edge17: return _edge__edge17;
				case (int)DNTUnfolded_EdgeNums.@_edge18: return _edge__edge18;
				case (int)DNTUnfolded_EdgeNums.@_edge19: return _edge__edge19;
				case (int)DNTUnfolded_EdgeNums.@_edge20: return _edge__edge20;
				case (int)DNTUnfolded_EdgeNums.@_edge21: return _edge__edge21;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				case "_edge9": return _edge__edge9;
				case "_edge10": return _edge__edge10;
				case "_edge11": return _edge__edge11;
				case "_edge12": return _edge__edge12;
				case "_edge13": return _edge__edge13;
				case "_edge14": return _edge__edge14;
				case "_edge15": return _edge__edge15;
				case "_edge16": return _edge__edge16;
				case "_edge17": return _edge__edge17;
				case "_edge18": return _edge__edge18;
				case "_edge19": return _edge__edge19;
				case "_edge20": return _edge__edge20;
				case "_edge21": return _edge__edge21;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge9": _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge10": _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge11": _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge12": _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge13": _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge14": _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge15": _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge16": _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge17": _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge18": _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge19": _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge20": _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge21": _edge__edge21 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum DNTUnfolded_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum DNTUnfolded_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum DNTUnfolded_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum DNTUnfolded_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum DNTUnfolded_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_DNTUnfolded.instance.pat_DNTUnfolded; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_DNTUnfolded(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_DNTUnfolded(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_DNTUnfolded nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_DNTUnfolded cur = this;
				while(cur != null) {
					Match_DNTUnfolded next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_DNTUnfolded that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_node_c = that._node_c;
				_node__node0 = that._node__node0;
				_node__node1 = that._node__node1;
				_node__node2 = that._node__node2;
				_node_n2 = that._node_n2;
				_node__node3 = that._node__node3;
				_node__node4 = that._node__node4;
				_node__node5 = that._node__node5;
				_node_n4 = that._node_n4;
				_node__node6 = that._node__node6;
				_node__node7 = that._node__node7;
				_node__node8 = that._node__node8;
				_node__node9 = that._node__node9;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				_edge__edge9 = that._edge__edge9;
				_edge__edge10 = that._edge__edge10;
				_edge__edge11 = that._edge__edge11;
				_edge__edge12 = that._edge__edge12;
				_edge__edge13 = that._edge__edge13;
				_edge__edge14 = that._edge__edge14;
				_edge__edge15 = that._edge__edge15;
				_edge__edge16 = that._edge__edge16;
				_edge__edge17 = that._edge__edge17;
				_edge__edge18 = that._edge__edge18;
				_edge__edge19 = that._edge__edge19;
				_edge__edge20 = that._edge__edge20;
				_edge__edge21 = that._edge__edge21;
			}

			public Match_DNTUnfolded(Match_DNTUnfolded that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_DNTUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_node_c = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_node__node2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node2];
				_node_n2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n2];
				_node__node3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node3];
				_node__node4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node4];
				_node__node5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node5];
				_node_n4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n4];
				_node__node6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node6];
				_node__node7 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node7];
				_node__node8 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node8];
				_node__node9 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node9];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				_edge__edge9 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge9];
				_edge__edge10 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge10];
				_edge__edge11 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge11];
				_edge__edge12 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge12];
				_edge__edge13 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge13];
				_edge__edge14 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge14];
				_edge__edge15 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge15];
				_edge__edge16 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge16];
				_edge__edge17 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge17];
				_edge__edge18 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge18];
				_edge__edge19 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge19];
				_edge__edge20 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge20];
				_edge__edge21 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge21];
			}

			public Match_DNTUnfolded(Match_DNTUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_DNTUnfolded()
			{
			}

			public bool IsEqual(Match_DNTUnfolded that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_node_c != that._node_c) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_node__node2 != that._node__node2) return false;
				if(_node_n2 != that._node_n2) return false;
				if(_node__node3 != that._node__node3) return false;
				if(_node__node4 != that._node__node4) return false;
				if(_node__node5 != that._node__node5) return false;
				if(_node_n4 != that._node_n4) return false;
				if(_node__node6 != that._node__node6) return false;
				if(_node__node7 != that._node__node7) return false;
				if(_node__node8 != that._node__node8) return false;
				if(_node__node9 != that._node__node9) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(_edge__edge9 != that._edge__edge9) return false;
				if(_edge__edge10 != that._edge__edge10) return false;
				if(_edge__edge11 != that._edge__edge11) return false;
				if(_edge__edge12 != that._edge__edge12) return false;
				if(_edge__edge13 != that._edge__edge13) return false;
				if(_edge__edge14 != that._edge__edge14) return false;
				if(_edge__edge15 != that._edge__edge15) return false;
				if(_edge__edge16 != that._edge__edge16) return false;
				if(_edge__edge17 != that._edge__edge17) return false;
				if(_edge__edge18 != that._edge__edge18) return false;
				if(_edge__edge19 != that._edge__edge19) return false;
				if(_edge__edge20 != that._edge__edge20) return false;
				if(_edge__edge21 != that._edge__edge21) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_c);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node0(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node0);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node1(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node2(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n2(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_n2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node3(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node4(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node5(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n4(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node_n4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node6(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node7(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node7);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node8(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node8);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node9(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.node__node9);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge9(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge9);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge10(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge10);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge11(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge11);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge12(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge12);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge13(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge13);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge14(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge14);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge15(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge15);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge16(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge16);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge17(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge17);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge18(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge18);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge19(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge19);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge20(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge20);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge21(List<IMatch_DNTUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_DNTUnfolded match in matchList)
					resultList.Add(match.edge__edge21);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>)
				return ((List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded instanceBearingAttributeForSearch_DNTUnfolded = new GRGEN_ACTIONS.Rule_DNTUnfolded.Match_DNTUnfolded();
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_c(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c)) {
					seenValues[list[pos].@node_c].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_c(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_c(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_c(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_c(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node0(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node0)) {
					seenValues[list[pos].@node__node0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node0(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node0, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node1)) {
					seenValues[list[pos].@node__node1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node1, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node2)) {
					seenValues[list[pos].@node__node2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node2, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_n2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n2)) {
					seenValues[list[pos].@node_n2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_n2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n2, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node3)) {
					seenValues[list[pos].@node__node3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node3, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node4)) {
					seenValues[list[pos].@node__node4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node4, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node5)) {
					seenValues[list[pos].@node__node5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node5, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy_n4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n4)) {
					seenValues[list[pos].@node_n4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy_n4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n4, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node6)) {
					seenValues[list[pos].@node__node6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node6, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node7(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node7)) {
					seenValues[list[pos].@node__node7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node7(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node7, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node8(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node8)) {
					seenValues[list[pos].@node__node8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node8(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node8, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__node9(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node9)) {
					seenValues[list[pos].@node__node9].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node9, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__node9(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node9)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node9, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__node9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__node9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__node9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node9.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge0(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge7(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge8(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge9(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge9)) {
					seenValues[list[pos].@edge__edge9].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge9, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge9(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge9)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge9, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge10(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge10)) {
					seenValues[list[pos].@edge__edge10].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge10, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge10(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge10)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge10, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge11(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge11)) {
					seenValues[list[pos].@edge__edge11].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge11, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge11(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge11)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge11, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge12(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge12)) {
					seenValues[list[pos].@edge__edge12].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge12, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge12(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge12)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge12, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge13(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge13)) {
					seenValues[list[pos].@edge__edge13].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge13, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge13(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge13)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge13, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge14(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge14)) {
					seenValues[list[pos].@edge__edge14].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge14, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge14(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge14)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge14, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge15(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge15)) {
					seenValues[list[pos].@edge__edge15].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge15, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge15(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge15)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge15, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge16(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge16)) {
					seenValues[list[pos].@edge__edge16].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge16, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge16(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge16)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge16, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge17(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge17)) {
					seenValues[list[pos].@edge__edge17].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge17, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge17(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge17)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge17, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge18(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge18)) {
					seenValues[list[pos].@edge__edge18].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge18, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge18(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge18)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge18, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge19(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge19)) {
					seenValues[list[pos].@edge__edge19].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge19, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge19(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge19)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge19, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge20(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge20)) {
					seenValues[list[pos].@edge__edge20].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge20, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge20(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge20)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge20, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_groupBy__edge21(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge21)) {
					seenValues[list[pos].@edge__edge21].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge21, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> Array_DNTUnfolded_keepOneForEachBy__edge21(List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> newList = new List<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge21)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge21, null);
				}
			}
			return newList;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_indexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_DNTUnfolded_lastIndexOfBy__edge21(IList<GRGEN_ACTIONS.Rule_DNTUnfolded.IMatch_DNTUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge21.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_createDNT : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_createDNT instance = null;
		public static Rule_createDNT Instance { get { if(instance==null) { instance = new Rule_createDNT(); instance.initialize(); } return instance; } }

		public enum createDNT_NodeNums { };
		public enum createDNT_EdgeNums { };
		public enum createDNT_VariableNums { };
		public enum createDNT_SubNums { };
		public enum createDNT_AltNums { };
		public enum createDNT_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_createDNT;


		private Rule_createDNT()
			: base("createDNT",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_createDNT+IMatch_createDNT",
				"de.unika.ipd.grGen.Action_TNT.Rule_createDNT+Match_createDNT"
			)
		{
		}
		private void initialize()
		{
			bool[,] createDNT_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] createDNT_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] createDNT_isNodeTotallyHomomorphic = new bool[0];
			bool[] createDNT_isEdgeTotallyHomomorphic = new bool[0];
			pat_createDNT = new GRGEN_LGSP.PatternGraph(
				"createDNT",
				"",
				null, "createDNT",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				createDNT_isNodeHomomorphicGlobal,
				createDNT_isEdgeHomomorphicGlobal,
				createDNT_isNodeTotallyHomomorphic,
				createDNT_isEdgeTotallyHomomorphic
			);


			patternGraph = pat_createDNT;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_createDNT curMatch = (Match_createDNT)_curMatch;
			graph.SettingAddedNodeNames( createDNT_addedNodeNames );
			GRGEN_MODEL.@C node_c1 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@H node__node0 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node1 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node2 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n2 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node3 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node4 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node5 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n4 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node6 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node7 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node8 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@H node__node9 = GRGEN_MODEL.@H.CreateNode(graph);
			graph.SettingAddedEdgeNames( createDNT_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge9 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c);
			GRGEN_MODEL.@Edge edge__edge10 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node0);
			GRGEN_MODEL.@Edge edge__edge11 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node1);
			GRGEN_MODEL.@Edge edge__edge12 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c, node__node2);
			GRGEN_MODEL.@Edge edge__edge13 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_n2);
			GRGEN_MODEL.@Edge edge__edge14 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node3);
			GRGEN_MODEL.@Edge edge__edge15 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node4);
			GRGEN_MODEL.@Edge edge__edge16 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node__node5);
			GRGEN_MODEL.@Edge edge__edge17 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_n4);
			GRGEN_MODEL.@Edge edge__edge18 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node6);
			GRGEN_MODEL.@Edge edge__edge19 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node7);
			GRGEN_MODEL.@Edge edge__edge20 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node__node8);
			GRGEN_MODEL.@Edge edge__edge21 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node__node9);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] createDNT_addedNodeNames = new string[] { "c1", "c2", "c3", "c4", "c5", "c6", "c", "_node0", "_node1", "_node2", "n2", "_node3", "_node4", "_node5", "n4", "_node6", "_node7", "_node8", "_node9" };
		private static string[] createDNT_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8", "_edge9", "_edge10", "_edge11", "_edge12", "_edge13", "_edge14", "_edge15", "_edge16", "_edge17", "_edge18", "_edge19", "_edge20", "_edge21" };

		static Rule_createDNT() {
		}

		public interface IMatch_createDNT : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_createDNT : GRGEN_LGSP.MatchListElement<Match_createDNT>, IMatch_createDNT
		{
			public enum createDNT_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createDNT_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createDNT_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createDNT_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createDNT_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createDNT_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createDNT_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_createDNT.instance.pat_createDNT; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_createDNT(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_createDNT(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_createDNT nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_createDNT cur = this;
				while(cur != null) {
					Match_createDNT next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_createDNT that)
			{
			}

			public Match_createDNT(Match_createDNT that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_createDNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
			}

			public Match_createDNT(Match_createDNT that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_createDNT()
			{
			}

			public bool IsEqual(Match_createDNT that)
			{
				if(that==null) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_createDNT.IMatch_createDNT> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_createDNT.IMatch_createDNT>)
				return ((List<GRGEN_ACTIONS.Rule_createDNT.IMatch_createDNT>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_createDNT.IMatch_createDNT>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_createDNT.IMatch_createDNT instanceBearingAttributeForSearch_createDNT = new GRGEN_ACTIONS.Rule_createDNT.Match_createDNT();
	}

	public class Rule_TNB : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNB instance = null;
		public static Rule_TNB Instance { get { if(instance==null) { instance = new Rule_TNB(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNB_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNB_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNB_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNB_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNB_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNB_node_c6_AllowedTypes = null;
		public static bool[] TNB_node_c1_IsAllowedType = null;
		public static bool[] TNB_node_c2_IsAllowedType = null;
		public static bool[] TNB_node_c3_IsAllowedType = null;
		public static bool[] TNB_node_c4_IsAllowedType = null;
		public static bool[] TNB_node_c5_IsAllowedType = null;
		public static bool[] TNB_node_c6_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNB_edge__edge8_AllowedTypes = null;
		public static bool[] TNB_edge__edge0_IsAllowedType = null;
		public static bool[] TNB_edge__edge1_IsAllowedType = null;
		public static bool[] TNB_edge__edge2_IsAllowedType = null;
		public static bool[] TNB_edge__edge3_IsAllowedType = null;
		public static bool[] TNB_edge__edge4_IsAllowedType = null;
		public static bool[] TNB_edge__edge5_IsAllowedType = null;
		public static bool[] TNB_edge__edge6_IsAllowedType = null;
		public static bool[] TNB_edge__edge7_IsAllowedType = null;
		public static bool[] TNB_edge__edge8_IsAllowedType = null;
		public enum TNB_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, };
		public enum TNB_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, };
		public enum TNB_VariableNums { };
		public enum TNB_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, };
		public enum TNB_AltNums { };
		public enum TNB_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNB;


		private Rule_TNB()
			: base("TNB",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNB+IMatch_TNB",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNB+Match_TNB"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNB_isNodeHomomorphicGlobal = new bool[6, 6] {
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
				{ false, false, false, false, false, false, },
			};
			bool[,] TNB_isEdgeHomomorphicGlobal = new bool[9, 9] {
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, },
			};
			bool[] TNB_isNodeTotallyHomomorphic = new bool[6] { false, false, false, false, false, false,  };
			bool[] TNB_isEdgeTotallyHomomorphic = new bool[9] { false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode TNB_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c1", "c1", TNB_node_c1_AllowedTypes, TNB_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNB_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c2", "c2", TNB_node_c2_AllowedTypes, TNB_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNB_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c3", "c3", TNB_node_c3_AllowedTypes, TNB_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNB_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c4", "c4", TNB_node_c4_AllowedTypes, TNB_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNB_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c5", "c5", TNB_node_c5_AllowedTypes, TNB_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNB_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNB_node_c6", "c6", TNB_node_c6_AllowedTypes, TNB_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge0", "_edge0", TNB_edge__edge0_AllowedTypes, TNB_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge1", "_edge1", TNB_edge__edge1_AllowedTypes, TNB_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge2", "_edge2", TNB_edge__edge2_AllowedTypes, TNB_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge3", "_edge3", TNB_edge__edge3_AllowedTypes, TNB_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge4", "_edge4", TNB_edge__edge4_AllowedTypes, TNB_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge5", "_edge5", TNB_edge__edge5_AllowedTypes, TNB_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge6", "_edge6", TNB_edge__edge6_AllowedTypes, TNB_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge7", "_edge7", TNB_edge__edge7_AllowedTypes, TNB_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNB_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNB_edge__edge8", "_edge8", TNB_edge__edge8_AllowedTypes, TNB_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c1"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c1" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c1 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub1 = new GRGEN_LGSP.PatternGraphEmbedding("_sub1", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c2"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c2" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c2 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub2 = new GRGEN_LGSP.PatternGraphEmbedding("_sub2", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c3"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c3" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c3 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub3 = new GRGEN_LGSP.PatternGraphEmbedding("_sub3", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c4"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c4" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c4 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub4 = new GRGEN_LGSP.PatternGraphEmbedding("_sub4", Pattern_Hydrogen.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c5"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c5" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c5 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			GRGEN_LGSP.PatternGraphEmbedding TNB__sub5 = new GRGEN_LGSP.PatternGraphEmbedding("_sub5", Pattern_Nitro.Instance, 
				new GRGEN_EXPR.Expression[] {
					new GRGEN_EXPR.GraphEntityExpression("TNB_node_c6"),
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] { "TNB_node_c6" }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] { TNB_node_c6 }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_TNB = new GRGEN_LGSP.PatternGraph(
				"TNB",
				"",
				null, "TNB",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNB_node_c1, TNB_node_c2, TNB_node_c3, TNB_node_c4, TNB_node_c5, TNB_node_c6 }, 
				new GRGEN_LGSP.PatternEdge[] { TNB_edge__edge0, TNB_edge__edge1, TNB_edge__edge2, TNB_edge__edge3, TNB_edge__edge4, TNB_edge__edge5, TNB_edge__edge6, TNB_edge__edge7, TNB_edge__edge8 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { TNB__sub0, TNB__sub1, TNB__sub2, TNB__sub3, TNB__sub4, TNB__sub5 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[6, 6] {
					{ true, false, false, false, false, false, },
					{ false, true, false, false, false, false, },
					{ false, false, true, false, false, false, },
					{ false, false, false, true, false, false, },
					{ false, false, false, false, true, false, },
					{ false, false, false, false, false, true, },
				},
				new bool[9, 9] {
					{ true, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, true, },
				},
				TNB_isNodeHomomorphicGlobal,
				TNB_isEdgeHomomorphicGlobal,
				TNB_isNodeTotallyHomomorphic,
				TNB_isEdgeTotallyHomomorphic
			);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge0, TNB_node_c1);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge0, TNB_node_c2);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge1, TNB_node_c2);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge1, TNB_node_c3);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge2, TNB_node_c3);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge2, TNB_node_c4);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge3, TNB_node_c4);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge3, TNB_node_c5);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge4, TNB_node_c5);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge4, TNB_node_c6);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge5, TNB_node_c6);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge5, TNB_node_c1);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge6, TNB_node_c1);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge6, TNB_node_c2);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge7, TNB_node_c3);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge7, TNB_node_c4);
			pat_TNB.edgeToSourceNode.Add(TNB_edge__edge8, TNB_node_c5);
			pat_TNB.edgeToTargetNode.Add(TNB_edge__edge8, TNB_node_c6);

			TNB_node_c1.pointOfDefinition = pat_TNB;
			TNB_node_c2.pointOfDefinition = pat_TNB;
			TNB_node_c3.pointOfDefinition = pat_TNB;
			TNB_node_c4.pointOfDefinition = pat_TNB;
			TNB_node_c5.pointOfDefinition = pat_TNB;
			TNB_node_c6.pointOfDefinition = pat_TNB;
			TNB_edge__edge0.pointOfDefinition = pat_TNB;
			TNB_edge__edge1.pointOfDefinition = pat_TNB;
			TNB_edge__edge2.pointOfDefinition = pat_TNB;
			TNB_edge__edge3.pointOfDefinition = pat_TNB;
			TNB_edge__edge4.pointOfDefinition = pat_TNB;
			TNB_edge__edge5.pointOfDefinition = pat_TNB;
			TNB_edge__edge6.pointOfDefinition = pat_TNB;
			TNB_edge__edge7.pointOfDefinition = pat_TNB;
			TNB_edge__edge8.pointOfDefinition = pat_TNB;
			TNB__sub0.PointOfDefinition = pat_TNB;
			TNB__sub1.PointOfDefinition = pat_TNB;
			TNB__sub2.PointOfDefinition = pat_TNB;
			TNB__sub3.PointOfDefinition = pat_TNB;
			TNB__sub4.PointOfDefinition = pat_TNB;
			TNB__sub5.PointOfDefinition = pat_TNB;

			patternGraph = pat_TNB;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNB curMatch = (Match_TNB)_curMatch;
			GRGEN_LGSP.LGSPNode node_c1 = curMatch._node_c1;
			GRGEN_LGSP.LGSPNode node_c2 = curMatch._node_c2;
			GRGEN_LGSP.LGSPNode node_c3 = curMatch._node_c3;
			GRGEN_LGSP.LGSPNode node_c4 = curMatch._node_c4;
			GRGEN_LGSP.LGSPNode node_c5 = curMatch._node_c5;
			GRGEN_LGSP.LGSPNode node_c6 = curMatch._node_c6;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub0 = curMatch.@__sub0;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub1 = curMatch.@__sub1;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub2 = curMatch.@__sub2;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub3 = curMatch.@__sub3;
			GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen subpattern__sub4 = curMatch.@__sub4;
			GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro subpattern__sub5 = curMatch.@__sub5;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNB() {
		}

		public interface IMatch_TNB : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub0 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get; }
			@GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get; }
			@GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub5 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNB : GRGEN_LGSP.MatchListElement<Match_TNB>, IMatch_TNB
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public enum TNB_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 6; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNB_NodeNums.@c1: return _node_c1;
				case (int)TNB_NodeNums.@c2: return _node_c2;
				case (int)TNB_NodeNums.@c3: return _node_c3;
				case (int)TNB_NodeNums.@c4: return _node_c4;
				case (int)TNB_NodeNums.@c5: return _node_c5;
				case (int)TNB_NodeNums.@c6: return _node_c6;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public enum TNB_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 9; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)TNB_EdgeNums.@_edge0: return _edge__edge0;
				case (int)TNB_EdgeNums.@_edge1: return _edge__edge1;
				case (int)TNB_EdgeNums.@_edge2: return _edge__edge2;
				case (int)TNB_EdgeNums.@_edge3: return _edge__edge3;
				case (int)TNB_EdgeNums.@_edge4: return _edge__edge4;
				case (int)TNB_EdgeNums.@_edge5: return _edge__edge5;
				case (int)TNB_EdgeNums.@_edge6: return _edge__edge6;
				case (int)TNB_EdgeNums.@_edge7: return _edge__edge7;
				case (int)TNB_EdgeNums.@_edge8: return _edge__edge8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum TNB_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub1 { get { return @__sub1; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub2 { get { return @__sub2; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub3 { get { return @__sub3; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @_sub4 { get { return @__sub4; } }
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @_sub5 { get { return @__sub5; } }
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub0;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub1;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub2;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub3;
			public @GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen @__sub4;
			public @GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro @__sub5;
			public enum TNB_SubNums { @_sub0, @_sub1, @_sub2, @_sub3, @_sub4, @_sub5, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 6; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)TNB_SubNums.@_sub0: return __sub0;
				case (int)TNB_SubNums.@_sub1: return __sub1;
				case (int)TNB_SubNums.@_sub2: return __sub2;
				case (int)TNB_SubNums.@_sub3: return __sub3;
				case (int)TNB_SubNums.@_sub4: return __sub4;
				case (int)TNB_SubNums.@_sub5: return __sub5;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				case "_sub1": return __sub1;
				case "_sub2": return __sub2;
				case "_sub3": return __sub3;
				case "_sub4": return __sub4;
				case "_sub5": return __sub5;
				default: return null;
				}
			}

			public enum TNB_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNB_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNB_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNB.instance.pat_TNB; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNB(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNB(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNB nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNB cur = this;
				while(cur != null) {
					Match_TNB next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNB that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				@__sub0 = that.@__sub0;
				@__sub1 = that.@__sub1;
				@__sub2 = that.@__sub2;
				@__sub3 = that.@__sub3;
				@__sub4 = that.@__sub4;
				@__sub5 = that.@__sub5;
			}

			public Match_TNB(Match_TNB that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNB that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				@__sub0 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub0, oldToNewMap);
				@__sub1 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub1, oldToNewMap);
				@__sub2 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub2, oldToNewMap);
				@__sub3 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub3, oldToNewMap);
				@__sub4 = new GRGEN_ACTIONS.Pattern_Hydrogen.Match_Hydrogen(that.@__sub4, oldToNewMap);
				@__sub5 = new GRGEN_ACTIONS.Pattern_Nitro.Match_Nitro(that.@__sub5, oldToNewMap);
			}

			public Match_TNB(Match_TNB that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNB()
			{
			}

			public bool IsEqual(Match_TNB that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				if(!@__sub1.IsEqual(that.@__sub1)) return false;
				if(!@__sub2.IsEqual(that.@__sub2)) return false;
				if(!@__sub3.IsEqual(that.@__sub3)) return false;
				if(!@__sub4.IsEqual(that.@__sub4)) return false;
				if(!@__sub5.IsEqual(that.@__sub5)) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNB> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_TNB> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNB match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>)
				return ((List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNB.IMatch_TNB instanceBearingAttributeForSearch_TNB = new GRGEN_ACTIONS.Rule_TNB.Match_TNB();
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge0(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge1(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge2(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge3(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge4(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge5(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge6(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge7(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_groupBy__edge8(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> tempList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			foreach(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> Array_TNB_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list)
		{
			List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> newList = new List<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNB.IMatch_TNB element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_TNB_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNB_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNB.IMatch_TNB> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_TNBUnfolded : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_TNBUnfolded instance = null;
		public static Rule_TNBUnfolded Instance { get { if(instance==null) { instance = new Rule_TNBUnfolded(); instance.initialize(); } return instance; } }

		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_c6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node0_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_n2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node1_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node2_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node3_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_n4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node4_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node5_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node_n6_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node7_AllowedTypes = null;
		public static GRGEN_LIBGR.NodeType[] TNBUnfolded_node__node8_AllowedTypes = null;
		public static bool[] TNBUnfolded_node_c1_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_c2_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_c3_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_c4_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_c5_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_c6_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node0_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_n2_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node1_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node2_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node3_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_n4_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node4_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node5_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node6_IsAllowedType = null;
		public static bool[] TNBUnfolded_node_n6_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node7_IsAllowedType = null;
		public static bool[] TNBUnfolded_node__node8_IsAllowedType = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge0_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge1_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge2_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge3_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge4_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge5_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge6_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge7_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge8_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge9_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge10_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge11_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge12_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge13_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge14_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge15_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge16_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge17_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge18_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge19_AllowedTypes = null;
		public static GRGEN_LIBGR.EdgeType[] TNBUnfolded_edge__edge20_AllowedTypes = null;
		public static bool[] TNBUnfolded_edge__edge0_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge1_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge2_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge3_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge4_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge5_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge6_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge7_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge8_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge9_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge10_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge11_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge12_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge13_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge14_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge15_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge16_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge17_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge18_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge19_IsAllowedType = null;
		public static bool[] TNBUnfolded_edge__edge20_IsAllowedType = null;
		public enum TNBUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @_node0, @n2, @_node1, @_node2, @_node3, @n4, @_node4, @_node5, @_node6, @n6, @_node7, @_node8, };
		public enum TNBUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, };
		public enum TNBUnfolded_VariableNums { };
		public enum TNBUnfolded_SubNums { };
		public enum TNBUnfolded_AltNums { };
		public enum TNBUnfolded_IterNums { };



		public GRGEN_LGSP.PatternGraph pat_TNBUnfolded;


		private Rule_TNBUnfolded()
			: base("TNBUnfolded",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_TNBUnfolded+IMatch_TNBUnfolded",
				"de.unika.ipd.grGen.Action_TNT.Rule_TNBUnfolded+Match_TNBUnfolded"
			)
		{
		}
		private void initialize()
		{
			bool[,] TNBUnfolded_isNodeHomomorphicGlobal = new bool[18, 18] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[,] TNBUnfolded_isEdgeHomomorphicGlobal = new bool[21, 21] {
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
				{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
			};
			bool[] TNBUnfolded_isNodeTotallyHomomorphic = new bool[18] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			bool[] TNBUnfolded_isEdgeTotallyHomomorphic = new bool[21] { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false,  };
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c1", "c1", TNBUnfolded_node_c1_AllowedTypes, TNBUnfolded_node_c1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c2", "c2", TNBUnfolded_node_c2_AllowedTypes, TNBUnfolded_node_c2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c3", "c3", TNBUnfolded_node_c3_AllowedTypes, TNBUnfolded_node_c3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c4", "c4", TNBUnfolded_node_c4_AllowedTypes, TNBUnfolded_node_c4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c5", "c5", TNBUnfolded_node_c5_AllowedTypes, TNBUnfolded_node_c5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_c6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@C, GRGEN_MODEL.NodeType_C.typeVar, "GRGEN_MODEL.IC", "TNBUnfolded_node_c6", "c6", TNBUnfolded_node_c6_AllowedTypes, TNBUnfolded_node_c6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node0 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNBUnfolded_node__node0", "_node0", TNBUnfolded_node__node0_AllowedTypes, TNBUnfolded_node__node0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_n2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNBUnfolded_node_n2", "n2", TNBUnfolded_node_n2_AllowedTypes, TNBUnfolded_node_n2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node1 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node1", "_node1", TNBUnfolded_node__node1_AllowedTypes, TNBUnfolded_node__node1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node2 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node2", "_node2", TNBUnfolded_node__node2_AllowedTypes, TNBUnfolded_node__node2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node3 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNBUnfolded_node__node3", "_node3", TNBUnfolded_node__node3_AllowedTypes, TNBUnfolded_node__node3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_n4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNBUnfolded_node_n4", "n4", TNBUnfolded_node_n4_AllowedTypes, TNBUnfolded_node_n4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node4 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node4", "_node4", TNBUnfolded_node__node4_AllowedTypes, TNBUnfolded_node__node4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node5 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node5", "_node5", TNBUnfolded_node__node5_AllowedTypes, TNBUnfolded_node__node5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@H, GRGEN_MODEL.NodeType_H.typeVar, "GRGEN_MODEL.IH", "TNBUnfolded_node__node6", "_node6", TNBUnfolded_node__node6_AllowedTypes, TNBUnfolded_node__node6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node_n6 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@N, GRGEN_MODEL.NodeType_N.typeVar, "GRGEN_MODEL.IN", "TNBUnfolded_node_n6", "n6", TNBUnfolded_node_n6_AllowedTypes, TNBUnfolded_node_n6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node7 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node7", "_node7", TNBUnfolded_node__node7_AllowedTypes, TNBUnfolded_node__node7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternNode TNBUnfolded_node__node8 = new GRGEN_LGSP.PatternNode((int) GRGEN_MODEL.NodeTypes.@O, GRGEN_MODEL.NodeType_O.typeVar, "GRGEN_MODEL.IO", "TNBUnfolded_node__node8", "_node8", TNBUnfolded_node__node8_AllowedTypes, TNBUnfolded_node__node8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge0 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge0", "_edge0", TNBUnfolded_edge__edge0_AllowedTypes, TNBUnfolded_edge__edge0_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge1 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge1", "_edge1", TNBUnfolded_edge__edge1_AllowedTypes, TNBUnfolded_edge__edge1_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge2 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge2", "_edge2", TNBUnfolded_edge__edge2_AllowedTypes, TNBUnfolded_edge__edge2_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge3 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge3", "_edge3", TNBUnfolded_edge__edge3_AllowedTypes, TNBUnfolded_edge__edge3_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge4 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge4", "_edge4", TNBUnfolded_edge__edge4_AllowedTypes, TNBUnfolded_edge__edge4_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge5 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge5", "_edge5", TNBUnfolded_edge__edge5_AllowedTypes, TNBUnfolded_edge__edge5_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge6 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge6", "_edge6", TNBUnfolded_edge__edge6_AllowedTypes, TNBUnfolded_edge__edge6_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge7 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge7", "_edge7", TNBUnfolded_edge__edge7_AllowedTypes, TNBUnfolded_edge__edge7_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge8 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge8", "_edge8", TNBUnfolded_edge__edge8_AllowedTypes, TNBUnfolded_edge__edge8_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge9 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge9", "_edge9", TNBUnfolded_edge__edge9_AllowedTypes, TNBUnfolded_edge__edge9_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge10 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge10", "_edge10", TNBUnfolded_edge__edge10_AllowedTypes, TNBUnfolded_edge__edge10_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge11 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge11", "_edge11", TNBUnfolded_edge__edge11_AllowedTypes, TNBUnfolded_edge__edge11_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge12 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge12", "_edge12", TNBUnfolded_edge__edge12_AllowedTypes, TNBUnfolded_edge__edge12_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge13 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge13", "_edge13", TNBUnfolded_edge__edge13_AllowedTypes, TNBUnfolded_edge__edge13_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge14 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge14", "_edge14", TNBUnfolded_edge__edge14_AllowedTypes, TNBUnfolded_edge__edge14_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge15 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge15", "_edge15", TNBUnfolded_edge__edge15_AllowedTypes, TNBUnfolded_edge__edge15_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge16 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge16", "_edge16", TNBUnfolded_edge__edge16_AllowedTypes, TNBUnfolded_edge__edge16_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge17 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge17", "_edge17", TNBUnfolded_edge__edge17_AllowedTypes, TNBUnfolded_edge__edge17_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge18 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge18", "_edge18", TNBUnfolded_edge__edge18_AllowedTypes, TNBUnfolded_edge__edge18_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge19 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge19", "_edge19", TNBUnfolded_edge__edge19_AllowedTypes, TNBUnfolded_edge__edge19_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			GRGEN_LGSP.PatternEdge TNBUnfolded_edge__edge20 = new GRGEN_LGSP.PatternEdge(true, (int) GRGEN_MODEL.EdgeTypes.@Edge, GRGEN_MODEL.EdgeType_Edge.typeVar, "GRGEN_LIBGR.IDEdge", "TNBUnfolded_edge__edge20", "_edge20", TNBUnfolded_edge__edge20_AllowedTypes, TNBUnfolded_edge__edge20_IsAllowedType, 5.5F, -1, false, null, null, null, null, null, null, false, null);
			pat_TNBUnfolded = new GRGEN_LGSP.PatternGraph(
				"TNBUnfolded",
				"",
				null, "TNBUnfolded",
				false, false,
				new GRGEN_LGSP.PatternNode[] { TNBUnfolded_node_c1, TNBUnfolded_node_c2, TNBUnfolded_node_c3, TNBUnfolded_node_c4, TNBUnfolded_node_c5, TNBUnfolded_node_c6, TNBUnfolded_node__node0, TNBUnfolded_node_n2, TNBUnfolded_node__node1, TNBUnfolded_node__node2, TNBUnfolded_node__node3, TNBUnfolded_node_n4, TNBUnfolded_node__node4, TNBUnfolded_node__node5, TNBUnfolded_node__node6, TNBUnfolded_node_n6, TNBUnfolded_node__node7, TNBUnfolded_node__node8 }, 
				new GRGEN_LGSP.PatternEdge[] { TNBUnfolded_edge__edge0, TNBUnfolded_edge__edge1, TNBUnfolded_edge__edge2, TNBUnfolded_edge__edge3, TNBUnfolded_edge__edge4, TNBUnfolded_edge__edge5, TNBUnfolded_edge__edge6, TNBUnfolded_edge__edge7, TNBUnfolded_edge__edge8, TNBUnfolded_edge__edge9, TNBUnfolded_edge__edge10, TNBUnfolded_edge__edge11, TNBUnfolded_edge__edge12, TNBUnfolded_edge__edge13, TNBUnfolded_edge__edge14, TNBUnfolded_edge__edge15, TNBUnfolded_edge__edge16, TNBUnfolded_edge__edge17, TNBUnfolded_edge__edge18, TNBUnfolded_edge__edge19, TNBUnfolded_edge__edge20 }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[18, 18] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				new bool[21, 21] {
					{ true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, },
					{ false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, },
				},
				TNBUnfolded_isNodeHomomorphicGlobal,
				TNBUnfolded_isEdgeHomomorphicGlobal,
				TNBUnfolded_isNodeTotallyHomomorphic,
				TNBUnfolded_isEdgeTotallyHomomorphic
			);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge0, TNBUnfolded_node_c1);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge0, TNBUnfolded_node_c2);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge1, TNBUnfolded_node_c2);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge1, TNBUnfolded_node_c3);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge2, TNBUnfolded_node_c3);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge2, TNBUnfolded_node_c4);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge3, TNBUnfolded_node_c4);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge3, TNBUnfolded_node_c5);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge4, TNBUnfolded_node_c5);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge4, TNBUnfolded_node_c6);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge5, TNBUnfolded_node_c6);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge5, TNBUnfolded_node_c1);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge6, TNBUnfolded_node_c1);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge6, TNBUnfolded_node_c2);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge7, TNBUnfolded_node_c3);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge7, TNBUnfolded_node_c4);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge8, TNBUnfolded_node_c5);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge8, TNBUnfolded_node_c6);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge9, TNBUnfolded_node_c1);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge9, TNBUnfolded_node__node0);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge10, TNBUnfolded_node_c2);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge10, TNBUnfolded_node_n2);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge11, TNBUnfolded_node_n2);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge11, TNBUnfolded_node__node1);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge12, TNBUnfolded_node_n2);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge12, TNBUnfolded_node__node2);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge13, TNBUnfolded_node_c3);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge13, TNBUnfolded_node__node3);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge14, TNBUnfolded_node_c4);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge14, TNBUnfolded_node_n4);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge15, TNBUnfolded_node_n4);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge15, TNBUnfolded_node__node4);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge16, TNBUnfolded_node_n4);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge16, TNBUnfolded_node__node5);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge17, TNBUnfolded_node_c5);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge17, TNBUnfolded_node__node6);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge18, TNBUnfolded_node_c6);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge18, TNBUnfolded_node_n6);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge19, TNBUnfolded_node_n6);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge19, TNBUnfolded_node__node7);
			pat_TNBUnfolded.edgeToSourceNode.Add(TNBUnfolded_edge__edge20, TNBUnfolded_node_n6);
			pat_TNBUnfolded.edgeToTargetNode.Add(TNBUnfolded_edge__edge20, TNBUnfolded_node__node8);

			TNBUnfolded_node_c1.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_c2.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_c3.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_c4.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_c5.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_c6.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node0.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_n2.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node1.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node2.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node3.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_n4.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node4.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node5.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node6.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node_n6.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node7.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_node__node8.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge0.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge1.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge2.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge3.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge4.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge5.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge6.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge7.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge8.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge9.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge10.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge11.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge12.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge13.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge14.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge15.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge16.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge17.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge18.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge19.pointOfDefinition = pat_TNBUnfolded;
			TNBUnfolded_edge__edge20.pointOfDefinition = pat_TNBUnfolded;

			patternGraph = pat_TNBUnfolded;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_TNBUnfolded curMatch = (Match_TNBUnfolded)_curMatch;
			actionEnv.SelectedMatchRewritten();
			return;
		}

		static Rule_TNBUnfolded() {
		}

		public interface IMatch_TNBUnfolded : GRGEN_LIBGR.IMatch
		{
			//Nodes
			GRGEN_MODEL.IC node_c1 { get; set; }
			GRGEN_MODEL.IC node_c2 { get; set; }
			GRGEN_MODEL.IC node_c3 { get; set; }
			GRGEN_MODEL.IC node_c4 { get; set; }
			GRGEN_MODEL.IC node_c5 { get; set; }
			GRGEN_MODEL.IC node_c6 { get; set; }
			GRGEN_MODEL.IH node__node0 { get; set; }
			GRGEN_MODEL.IN node_n2 { get; set; }
			GRGEN_MODEL.IO node__node1 { get; set; }
			GRGEN_MODEL.IO node__node2 { get; set; }
			GRGEN_MODEL.IH node__node3 { get; set; }
			GRGEN_MODEL.IN node_n4 { get; set; }
			GRGEN_MODEL.IO node__node4 { get; set; }
			GRGEN_MODEL.IO node__node5 { get; set; }
			GRGEN_MODEL.IH node__node6 { get; set; }
			GRGEN_MODEL.IN node_n6 { get; set; }
			GRGEN_MODEL.IO node__node7 { get; set; }
			GRGEN_MODEL.IO node__node8 { get; set; }
			//Edges
			GRGEN_LIBGR.IDEdge edge__edge0 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge1 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge2 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge3 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge4 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge5 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge6 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge7 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge8 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge9 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge10 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge11 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge12 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge13 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge14 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge15 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge16 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge17 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge18 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge19 { get; set; }
			GRGEN_LIBGR.IDEdge edge__edge20 { get; set; }
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_TNBUnfolded : GRGEN_LGSP.MatchListElement<Match_TNBUnfolded>, IMatch_TNBUnfolded
		{
			public GRGEN_MODEL.IC node_c1 { get { return (GRGEN_MODEL.IC)_node_c1; } set { _node_c1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c2 { get { return (GRGEN_MODEL.IC)_node_c2; } set { _node_c2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c3 { get { return (GRGEN_MODEL.IC)_node_c3; } set { _node_c3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c4 { get { return (GRGEN_MODEL.IC)_node_c4; } set { _node_c4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c5 { get { return (GRGEN_MODEL.IC)_node_c5; } set { _node_c5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IC node_c6 { get { return (GRGEN_MODEL.IC)_node_c6; } set { _node_c6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node0 { get { return (GRGEN_MODEL.IH)_node__node0; } set { _node__node0 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n2 { get { return (GRGEN_MODEL.IN)_node_n2; } set { _node_n2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node1 { get { return (GRGEN_MODEL.IO)_node__node1; } set { _node__node1 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node2 { get { return (GRGEN_MODEL.IO)_node__node2; } set { _node__node2 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node3 { get { return (GRGEN_MODEL.IH)_node__node3; } set { _node__node3 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n4 { get { return (GRGEN_MODEL.IN)_node_n4; } set { _node_n4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node4 { get { return (GRGEN_MODEL.IO)_node__node4; } set { _node__node4 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node5 { get { return (GRGEN_MODEL.IO)_node__node5; } set { _node__node5 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IH node__node6 { get { return (GRGEN_MODEL.IH)_node__node6; } set { _node__node6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IN node_n6 { get { return (GRGEN_MODEL.IN)_node_n6; } set { _node_n6 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node7 { get { return (GRGEN_MODEL.IO)_node__node7; } set { _node__node7 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_MODEL.IO node__node8 { get { return (GRGEN_MODEL.IO)_node__node8; } set { _node__node8 = (GRGEN_LGSP.LGSPNode)value; } }
			public GRGEN_LGSP.LGSPNode _node_c1;
			public GRGEN_LGSP.LGSPNode _node_c2;
			public GRGEN_LGSP.LGSPNode _node_c3;
			public GRGEN_LGSP.LGSPNode _node_c4;
			public GRGEN_LGSP.LGSPNode _node_c5;
			public GRGEN_LGSP.LGSPNode _node_c6;
			public GRGEN_LGSP.LGSPNode _node__node0;
			public GRGEN_LGSP.LGSPNode _node_n2;
			public GRGEN_LGSP.LGSPNode _node__node1;
			public GRGEN_LGSP.LGSPNode _node__node2;
			public GRGEN_LGSP.LGSPNode _node__node3;
			public GRGEN_LGSP.LGSPNode _node_n4;
			public GRGEN_LGSP.LGSPNode _node__node4;
			public GRGEN_LGSP.LGSPNode _node__node5;
			public GRGEN_LGSP.LGSPNode _node__node6;
			public GRGEN_LGSP.LGSPNode _node_n6;
			public GRGEN_LGSP.LGSPNode _node__node7;
			public GRGEN_LGSP.LGSPNode _node__node8;
			public enum TNBUnfolded_NodeNums { @c1, @c2, @c3, @c4, @c5, @c6, @_node0, @n2, @_node1, @_node2, @_node3, @n4, @_node4, @_node5, @_node6, @n6, @_node7, @_node8, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 18; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				case (int)TNBUnfolded_NodeNums.@c1: return _node_c1;
				case (int)TNBUnfolded_NodeNums.@c2: return _node_c2;
				case (int)TNBUnfolded_NodeNums.@c3: return _node_c3;
				case (int)TNBUnfolded_NodeNums.@c4: return _node_c4;
				case (int)TNBUnfolded_NodeNums.@c5: return _node_c5;
				case (int)TNBUnfolded_NodeNums.@c6: return _node_c6;
				case (int)TNBUnfolded_NodeNums.@_node0: return _node__node0;
				case (int)TNBUnfolded_NodeNums.@n2: return _node_n2;
				case (int)TNBUnfolded_NodeNums.@_node1: return _node__node1;
				case (int)TNBUnfolded_NodeNums.@_node2: return _node__node2;
				case (int)TNBUnfolded_NodeNums.@_node3: return _node__node3;
				case (int)TNBUnfolded_NodeNums.@n4: return _node_n4;
				case (int)TNBUnfolded_NodeNums.@_node4: return _node__node4;
				case (int)TNBUnfolded_NodeNums.@_node5: return _node__node5;
				case (int)TNBUnfolded_NodeNums.@_node6: return _node__node6;
				case (int)TNBUnfolded_NodeNums.@n6: return _node_n6;
				case (int)TNBUnfolded_NodeNums.@_node7: return _node__node7;
				case (int)TNBUnfolded_NodeNums.@_node8: return _node__node8;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				case "c1": return _node_c1;
				case "c2": return _node_c2;
				case "c3": return _node_c3;
				case "c4": return _node_c4;
				case "c5": return _node_c5;
				case "c6": return _node_c6;
				case "_node0": return _node__node0;
				case "n2": return _node_n2;
				case "_node1": return _node__node1;
				case "_node2": return _node__node2;
				case "_node3": return _node__node3;
				case "n4": return _node_n4;
				case "_node4": return _node__node4;
				case "_node5": return _node__node5;
				case "_node6": return _node__node6;
				case "n6": return _node_n6;
				case "_node7": return _node__node7;
				case "_node8": return _node__node8;
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				case "c1": _node_c1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c2": _node_c2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c3": _node_c3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c4": _node_c4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c5": _node_c5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "c6": _node_c6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node0": _node__node0 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n2": _node_n2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node1": _node__node1 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node2": _node__node2 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node3": _node__node3 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n4": _node_n4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node4": _node__node4 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node5": _node__node5 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node6": _node__node6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "n6": _node_n6 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node7": _node__node7 = (GRGEN_LGSP.LGSPNode)value; break;
				case "_node8": _node__node8 = (GRGEN_LGSP.LGSPNode)value; break;
				default: break;
				}
			}

			public GRGEN_LIBGR.IDEdge edge__edge0 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge0; } set { _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge1 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge1; } set { _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge2 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge2; } set { _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge3 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge3; } set { _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge4 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge4; } set { _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge5 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge5; } set { _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge6 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge6; } set { _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge7 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge7; } set { _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge8 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge8; } set { _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge9 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge9; } set { _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge10 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge10; } set { _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge11 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge11; } set { _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge12 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge12; } set { _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge13 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge13; } set { _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge14 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge14; } set { _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge15 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge15; } set { _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge16 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge16; } set { _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge17 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge17; } set { _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge18 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge18; } set { _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge19 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge19; } set { _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LIBGR.IDEdge edge__edge20 { get { return (GRGEN_LIBGR.IDEdge)_edge__edge20; } set { _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; } }
			public GRGEN_LGSP.LGSPEdge _edge__edge0;
			public GRGEN_LGSP.LGSPEdge _edge__edge1;
			public GRGEN_LGSP.LGSPEdge _edge__edge2;
			public GRGEN_LGSP.LGSPEdge _edge__edge3;
			public GRGEN_LGSP.LGSPEdge _edge__edge4;
			public GRGEN_LGSP.LGSPEdge _edge__edge5;
			public GRGEN_LGSP.LGSPEdge _edge__edge6;
			public GRGEN_LGSP.LGSPEdge _edge__edge7;
			public GRGEN_LGSP.LGSPEdge _edge__edge8;
			public GRGEN_LGSP.LGSPEdge _edge__edge9;
			public GRGEN_LGSP.LGSPEdge _edge__edge10;
			public GRGEN_LGSP.LGSPEdge _edge__edge11;
			public GRGEN_LGSP.LGSPEdge _edge__edge12;
			public GRGEN_LGSP.LGSPEdge _edge__edge13;
			public GRGEN_LGSP.LGSPEdge _edge__edge14;
			public GRGEN_LGSP.LGSPEdge _edge__edge15;
			public GRGEN_LGSP.LGSPEdge _edge__edge16;
			public GRGEN_LGSP.LGSPEdge _edge__edge17;
			public GRGEN_LGSP.LGSPEdge _edge__edge18;
			public GRGEN_LGSP.LGSPEdge _edge__edge19;
			public GRGEN_LGSP.LGSPEdge _edge__edge20;
			public enum TNBUnfolded_EdgeNums { @_edge0, @_edge1, @_edge2, @_edge3, @_edge4, @_edge5, @_edge6, @_edge7, @_edge8, @_edge9, @_edge10, @_edge11, @_edge12, @_edge13, @_edge14, @_edge15, @_edge16, @_edge17, @_edge18, @_edge19, @_edge20, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 21; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				case (int)TNBUnfolded_EdgeNums.@_edge0: return _edge__edge0;
				case (int)TNBUnfolded_EdgeNums.@_edge1: return _edge__edge1;
				case (int)TNBUnfolded_EdgeNums.@_edge2: return _edge__edge2;
				case (int)TNBUnfolded_EdgeNums.@_edge3: return _edge__edge3;
				case (int)TNBUnfolded_EdgeNums.@_edge4: return _edge__edge4;
				case (int)TNBUnfolded_EdgeNums.@_edge5: return _edge__edge5;
				case (int)TNBUnfolded_EdgeNums.@_edge6: return _edge__edge6;
				case (int)TNBUnfolded_EdgeNums.@_edge7: return _edge__edge7;
				case (int)TNBUnfolded_EdgeNums.@_edge8: return _edge__edge8;
				case (int)TNBUnfolded_EdgeNums.@_edge9: return _edge__edge9;
				case (int)TNBUnfolded_EdgeNums.@_edge10: return _edge__edge10;
				case (int)TNBUnfolded_EdgeNums.@_edge11: return _edge__edge11;
				case (int)TNBUnfolded_EdgeNums.@_edge12: return _edge__edge12;
				case (int)TNBUnfolded_EdgeNums.@_edge13: return _edge__edge13;
				case (int)TNBUnfolded_EdgeNums.@_edge14: return _edge__edge14;
				case (int)TNBUnfolded_EdgeNums.@_edge15: return _edge__edge15;
				case (int)TNBUnfolded_EdgeNums.@_edge16: return _edge__edge16;
				case (int)TNBUnfolded_EdgeNums.@_edge17: return _edge__edge17;
				case (int)TNBUnfolded_EdgeNums.@_edge18: return _edge__edge18;
				case (int)TNBUnfolded_EdgeNums.@_edge19: return _edge__edge19;
				case (int)TNBUnfolded_EdgeNums.@_edge20: return _edge__edge20;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				case "_edge0": return _edge__edge0;
				case "_edge1": return _edge__edge1;
				case "_edge2": return _edge__edge2;
				case "_edge3": return _edge__edge3;
				case "_edge4": return _edge__edge4;
				case "_edge5": return _edge__edge5;
				case "_edge6": return _edge__edge6;
				case "_edge7": return _edge__edge7;
				case "_edge8": return _edge__edge8;
				case "_edge9": return _edge__edge9;
				case "_edge10": return _edge__edge10;
				case "_edge11": return _edge__edge11;
				case "_edge12": return _edge__edge12;
				case "_edge13": return _edge__edge13;
				case "_edge14": return _edge__edge14;
				case "_edge15": return _edge__edge15;
				case "_edge16": return _edge__edge16;
				case "_edge17": return _edge__edge17;
				case "_edge18": return _edge__edge18;
				case "_edge19": return _edge__edge19;
				case "_edge20": return _edge__edge20;
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				case "_edge0": _edge__edge0 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge1": _edge__edge1 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge2": _edge__edge2 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge3": _edge__edge3 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge4": _edge__edge4 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge5": _edge__edge5 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge6": _edge__edge6 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge7": _edge__edge7 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge8": _edge__edge8 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge9": _edge__edge9 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge10": _edge__edge10 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge11": _edge__edge11 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge12": _edge__edge12 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge13": _edge__edge13 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge14": _edge__edge14 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge15": _edge__edge15 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge16": _edge__edge16 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge17": _edge__edge17 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge18": _edge__edge18 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge19": _edge__edge19 = (GRGEN_LGSP.LGSPEdge)value; break;
				case "_edge20": _edge__edge20 = (GRGEN_LGSP.LGSPEdge)value; break;
				default: break;
				}
			}

			public enum TNBUnfolded_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum TNBUnfolded_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNBUnfolded_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNBUnfolded_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum TNBUnfolded_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_TNBUnfolded.instance.pat_TNBUnfolded; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_TNBUnfolded(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_TNBUnfolded(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_TNBUnfolded nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_TNBUnfolded cur = this;
				while(cur != null) {
					Match_TNBUnfolded next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_TNBUnfolded that)
			{
				_node_c1 = that._node_c1;
				_node_c2 = that._node_c2;
				_node_c3 = that._node_c3;
				_node_c4 = that._node_c4;
				_node_c5 = that._node_c5;
				_node_c6 = that._node_c6;
				_node__node0 = that._node__node0;
				_node_n2 = that._node_n2;
				_node__node1 = that._node__node1;
				_node__node2 = that._node__node2;
				_node__node3 = that._node__node3;
				_node_n4 = that._node_n4;
				_node__node4 = that._node__node4;
				_node__node5 = that._node__node5;
				_node__node6 = that._node__node6;
				_node_n6 = that._node_n6;
				_node__node7 = that._node__node7;
				_node__node8 = that._node__node8;
				_edge__edge0 = that._edge__edge0;
				_edge__edge1 = that._edge__edge1;
				_edge__edge2 = that._edge__edge2;
				_edge__edge3 = that._edge__edge3;
				_edge__edge4 = that._edge__edge4;
				_edge__edge5 = that._edge__edge5;
				_edge__edge6 = that._edge__edge6;
				_edge__edge7 = that._edge__edge7;
				_edge__edge8 = that._edge__edge8;
				_edge__edge9 = that._edge__edge9;
				_edge__edge10 = that._edge__edge10;
				_edge__edge11 = that._edge__edge11;
				_edge__edge12 = that._edge__edge12;
				_edge__edge13 = that._edge__edge13;
				_edge__edge14 = that._edge__edge14;
				_edge__edge15 = that._edge__edge15;
				_edge__edge16 = that._edge__edge16;
				_edge__edge17 = that._edge__edge17;
				_edge__edge18 = that._edge__edge18;
				_edge__edge19 = that._edge__edge19;
				_edge__edge20 = that._edge__edge20;
			}

			public Match_TNBUnfolded(Match_TNBUnfolded that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_TNBUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				_node_c1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c1];
				_node_c2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c2];
				_node_c3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c3];
				_node_c4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c4];
				_node_c5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c5];
				_node_c6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_c6];
				_node__node0 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node0];
				_node_n2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n2];
				_node__node1 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node1];
				_node__node2 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node2];
				_node__node3 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node3];
				_node_n4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n4];
				_node__node4 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node4];
				_node__node5 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node5];
				_node__node6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node6];
				_node_n6 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node_n6];
				_node__node7 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node7];
				_node__node8 = (GRGEN_LGSP.LGSPNode)oldToNewMap[that._node__node8];
				_edge__edge0 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge0];
				_edge__edge1 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge1];
				_edge__edge2 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge2];
				_edge__edge3 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge3];
				_edge__edge4 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge4];
				_edge__edge5 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge5];
				_edge__edge6 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge6];
				_edge__edge7 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge7];
				_edge__edge8 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge8];
				_edge__edge9 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge9];
				_edge__edge10 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge10];
				_edge__edge11 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge11];
				_edge__edge12 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge12];
				_edge__edge13 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge13];
				_edge__edge14 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge14];
				_edge__edge15 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge15];
				_edge__edge16 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge16];
				_edge__edge17 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge17];
				_edge__edge18 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge18];
				_edge__edge19 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge19];
				_edge__edge20 = (GRGEN_LGSP.LGSPEdge)oldToNewMap[that._edge__edge20];
			}

			public Match_TNBUnfolded(Match_TNBUnfolded that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_TNBUnfolded()
			{
			}

			public bool IsEqual(Match_TNBUnfolded that)
			{
				if(that==null) return false;
				if(_node_c1 != that._node_c1) return false;
				if(_node_c2 != that._node_c2) return false;
				if(_node_c3 != that._node_c3) return false;
				if(_node_c4 != that._node_c4) return false;
				if(_node_c5 != that._node_c5) return false;
				if(_node_c6 != that._node_c6) return false;
				if(_node__node0 != that._node__node0) return false;
				if(_node_n2 != that._node_n2) return false;
				if(_node__node1 != that._node__node1) return false;
				if(_node__node2 != that._node__node2) return false;
				if(_node__node3 != that._node__node3) return false;
				if(_node_n4 != that._node_n4) return false;
				if(_node__node4 != that._node__node4) return false;
				if(_node__node5 != that._node__node5) return false;
				if(_node__node6 != that._node__node6) return false;
				if(_node_n6 != that._node_n6) return false;
				if(_node__node7 != that._node__node7) return false;
				if(_node__node8 != that._node__node8) return false;
				if(_edge__edge0 != that._edge__edge0) return false;
				if(_edge__edge1 != that._edge__edge1) return false;
				if(_edge__edge2 != that._edge__edge2) return false;
				if(_edge__edge3 != that._edge__edge3) return false;
				if(_edge__edge4 != that._edge__edge4) return false;
				if(_edge__edge5 != that._edge__edge5) return false;
				if(_edge__edge6 != that._edge__edge6) return false;
				if(_edge__edge7 != that._edge__edge7) return false;
				if(_edge__edge8 != that._edge__edge8) return false;
				if(_edge__edge9 != that._edge__edge9) return false;
				if(_edge__edge10 != that._edge__edge10) return false;
				if(_edge__edge11 != that._edge__edge11) return false;
				if(_edge__edge12 != that._edge__edge12) return false;
				if(_edge__edge13 != that._edge__edge13) return false;
				if(_edge__edge14 != that._edge__edge14) return false;
				if(_edge__edge15 != that._edge__edge15) return false;
				if(_edge__edge16 != that._edge__edge16) return false;
				if(_edge__edge17 != that._edge__edge17) return false;
				if(_edge__edge18 != that._edge__edge18) return false;
				if(_edge__edge19 != that._edge__edge19) return false;
				if(_edge__edge20 != that._edge__edge20) return false;
				return true;
			}
		}


		public class Extractor
		{
			public static List<GRGEN_MODEL.IC> Extract_c1(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c2(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c3(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c4(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c5(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IC> Extract_c6(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IC> resultList = new List<GRGEN_MODEL.IC>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_c6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node0(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node0);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n2(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_n2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node1(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node1);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node2(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node2);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node3(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node3);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n4(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_n4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node4(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node4);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node5(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node5);
				return resultList;
			}
			public static List<GRGEN_MODEL.IH> Extract__node6(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IH> resultList = new List<GRGEN_MODEL.IH>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IN> Extract_n6(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IN> resultList = new List<GRGEN_MODEL.IN>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node_n6);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node7(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node7);
				return resultList;
			}
			public static List<GRGEN_MODEL.IO> Extract__node8(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_MODEL.IO> resultList = new List<GRGEN_MODEL.IO>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.node__node8);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge0(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge0);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge1(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge1);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge2(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge2);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge3(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge3);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge4(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge4);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge5(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge5);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge6(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge6);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge7(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge7);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge8(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge8);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge9(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge9);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge10(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge10);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge11(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge11);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge12(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge12);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge13(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge13);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge14(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge14);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge15(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge15);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge16(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge16);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge17(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge17);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge18(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge18);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge19(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge19);
				return resultList;
			}
			public static List<GRGEN_LIBGR.IDEdge> Extract__edge20(List<IMatch_TNBUnfolded> matchList)
			{
				List<GRGEN_LIBGR.IDEdge> resultList = new List<GRGEN_LIBGR.IDEdge>(matchList.Count);
				foreach(IMatch_TNBUnfolded match in matchList)
					resultList.Add(match.edge__edge20);
				return resultList;
			}
		}


		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>)
				return ((List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded instanceBearingAttributeForSearch_TNBUnfolded = new GRGEN_ACTIONS.Rule_TNBUnfolded.Match_TNBUnfolded();
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c1)) {
					seenValues[list[pos].@node_c1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c1, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c2)) {
					seenValues[list[pos].@node_c2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c2, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c3)) {
					seenValues[list[pos].@node_c3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c3, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c4)) {
					seenValues[list[pos].@node_c4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c4, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c5)) {
					seenValues[list[pos].@node_c5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c5, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_c6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IC, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_c6)) {
					seenValues[list[pos].@node_c6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_c6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_c6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IC, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_c6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_c6, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_c6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IC entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_c6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node0(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node0)) {
					seenValues[list[pos].@node__node0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node0(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node0, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_n2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n2)) {
					seenValues[list[pos].@node_n2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_n2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n2, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node1)) {
					seenValues[list[pos].@node__node1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node1, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node2)) {
					seenValues[list[pos].@node__node2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node2, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node3)) {
					seenValues[list[pos].@node__node3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node3, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_n4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n4)) {
					seenValues[list[pos].@node_n4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_n4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n4, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node4)) {
					seenValues[list[pos].@node__node4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node4, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node5)) {
					seenValues[list[pos].@node__node5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node5, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IH, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node6)) {
					seenValues[list[pos].@node__node6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IH, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node6, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IH entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy_n6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IN, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node_n6)) {
					seenValues[list[pos].@node_n6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node_n6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy_n6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IN, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node_n6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node_n6, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy_n6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IN entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node_n6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node7(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node7)) {
					seenValues[list[pos].@node__node7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node7(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node7, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__node8(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_MODEL.IO, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@node__node8)) {
					seenValues[list[pos].@node__node8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@node__node8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__node8(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_MODEL.IO, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@node__node8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@node__node8, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__node8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_MODEL.IO entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@node__node8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge0(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge0)) {
					seenValues[list[pos].@edge__edge0].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge0, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge0(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge0)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge0, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge0(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge0.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge1)) {
					seenValues[list[pos].@edge__edge1].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge1, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge1(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge1)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge1, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge1(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge1.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge2)) {
					seenValues[list[pos].@edge__edge2].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge2, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge2(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge2)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge2, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge2(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge2.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge3)) {
					seenValues[list[pos].@edge__edge3].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge3, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge3(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge3)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge3, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge3(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge3.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge4)) {
					seenValues[list[pos].@edge__edge4].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge4, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge4(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge4)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge4, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge4(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge4.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge5)) {
					seenValues[list[pos].@edge__edge5].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge5, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge5(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge5)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge5, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge5(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge5.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge6)) {
					seenValues[list[pos].@edge__edge6].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge6, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge6(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge6)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge6, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge6(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge6.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge7(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge7)) {
					seenValues[list[pos].@edge__edge7].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge7, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge7(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge7)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge7, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge7(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge7.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge8(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge8)) {
					seenValues[list[pos].@edge__edge8].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge8, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge8(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge8)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge8, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge8(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge8.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge9(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge9)) {
					seenValues[list[pos].@edge__edge9].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge9, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge9(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge9)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge9, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge9(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge9.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge10(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge10)) {
					seenValues[list[pos].@edge__edge10].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge10, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge10(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge10)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge10, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge10(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge10.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge11(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge11)) {
					seenValues[list[pos].@edge__edge11].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge11, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge11(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge11)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge11, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge11(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge11.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge12(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge12)) {
					seenValues[list[pos].@edge__edge12].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge12, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge12(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge12)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge12, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge12(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge12.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge13(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge13)) {
					seenValues[list[pos].@edge__edge13].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge13, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge13(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge13)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge13, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge13(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge13.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge14(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge14)) {
					seenValues[list[pos].@edge__edge14].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge14, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge14(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge14)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge14, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge14(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge14.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge15(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge15)) {
					seenValues[list[pos].@edge__edge15].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge15, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge15(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge15)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge15, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge15(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge15.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge16(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge16)) {
					seenValues[list[pos].@edge__edge16].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge16, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge16(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge16)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge16, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge16(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge16.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge17(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge17)) {
					seenValues[list[pos].@edge__edge17].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge17, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge17(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge17)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge17, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge17(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge17.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge18(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge18)) {
					seenValues[list[pos].@edge__edge18].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge18, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge18(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge18)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge18, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge18(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge18.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge19(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge19)) {
					seenValues[list[pos].@edge__edge19].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge19, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge19(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge19)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge19, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge19(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge19.Equals(entry))
					return i;
			return -1;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_groupBy__edge20(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>> seenValues = new Dictionary<GRGEN_LIBGR.IDEdge, List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>>();
			for(int pos = 0; pos < list.Count; ++pos)
			{
				if(seenValues.ContainsKey(list[pos].@edge__edge20)) {
					seenValues[list[pos].@edge__edge20].Add(list[pos]);
				} else {
					List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> tempList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
					tempList.Add(list[pos]);
					seenValues.Add(list[pos].@edge__edge20, tempList);
				}
			}
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			foreach(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> entry in seenValues.Values)
			{
				newList.AddRange(entry);
			}
			return newList;
		}
		public static List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> Array_TNBUnfolded_keepOneForEachBy__edge20(List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list)
		{
			List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> newList = new List<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded>();
			Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType> alreadySeenMembers = new Dictionary<GRGEN_LIBGR.IDEdge, GRGEN_LIBGR.SetValueType>();
			foreach(GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded element in list)
			{
				if(!alreadySeenMembers.ContainsKey(element.@edge__edge20)) {
					newList.Add(element);
					alreadySeenMembers.Add(element.@edge__edge20, null);
				}
			}
			return newList;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_indexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = 0; i < list.Count; ++i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry, int startIndex)
		{
			for(int i = startIndex; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
		public static int Array_TNBUnfolded_lastIndexOfBy__edge20(IList<GRGEN_ACTIONS.Rule_TNBUnfolded.IMatch_TNBUnfolded> list, GRGEN_LIBGR.IDEdge entry)
		{
			for(int i = list.Count - 1; i >= 0; --i)
				if(list[i].@edge__edge20.Equals(entry))
					return i;
			return -1;
		}
	}

	public class Rule_createTNB : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_createTNB instance = null;
		public static Rule_createTNB Instance { get { if(instance==null) { instance = new Rule_createTNB(); instance.initialize(); } return instance; } }

		public enum createTNB_NodeNums { };
		public enum createTNB_EdgeNums { };
		public enum createTNB_VariableNums { };
		public enum createTNB_SubNums { };
		public enum createTNB_AltNums { };
		public enum createTNB_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_createTNB;


		private Rule_createTNB()
			: base("createTNB",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_createTNB+IMatch_createTNB",
				"de.unika.ipd.grGen.Action_TNT.Rule_createTNB+Match_createTNB"
			)
		{
		}
		private void initialize()
		{
			bool[,] createTNB_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] createTNB_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] createTNB_isNodeTotallyHomomorphic = new bool[0];
			bool[] createTNB_isEdgeTotallyHomomorphic = new bool[0];
			pat_createTNB = new GRGEN_LGSP.PatternGraph(
				"createTNB",
				"",
				null, "createTNB",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				createTNB_isNodeHomomorphicGlobal,
				createTNB_isEdgeHomomorphicGlobal,
				createTNB_isNodeTotallyHomomorphic,
				createTNB_isEdgeTotallyHomomorphic
			);


			patternGraph = pat_createTNB;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_createTNB curMatch = (Match_createTNB)_curMatch;
			graph.SettingAddedNodeNames( createTNB_addedNodeNames );
			GRGEN_MODEL.@C node_c1 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c2 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c3 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c4 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c5 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@C node_c6 = GRGEN_MODEL.@C.CreateNode(graph);
			GRGEN_MODEL.@H node__node0 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n2 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node1 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node2 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node3 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n4 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node4 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node5 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@H node__node6 = GRGEN_MODEL.@H.CreateNode(graph);
			GRGEN_MODEL.@N node_n6 = GRGEN_MODEL.@N.CreateNode(graph);
			GRGEN_MODEL.@O node__node7 = GRGEN_MODEL.@O.CreateNode(graph);
			GRGEN_MODEL.@O node__node8 = GRGEN_MODEL.@O.CreateNode(graph);
			graph.SettingAddedEdgeNames( createTNB_addedEdgeNames );
			GRGEN_MODEL.@Edge edge__edge0 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge1 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_c3);
			GRGEN_MODEL.@Edge edge__edge2 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge3 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_c5);
			GRGEN_MODEL.@Edge edge__edge4 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge5 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_c1);
			GRGEN_MODEL.@Edge edge__edge6 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node_c2);
			GRGEN_MODEL.@Edge edge__edge7 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node_c4);
			GRGEN_MODEL.@Edge edge__edge8 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node_c6);
			GRGEN_MODEL.@Edge edge__edge9 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c1, node__node0);
			GRGEN_MODEL.@Edge edge__edge10 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c2, node_n2);
			GRGEN_MODEL.@Edge edge__edge11 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node1);
			GRGEN_MODEL.@Edge edge__edge12 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n2, node__node2);
			GRGEN_MODEL.@Edge edge__edge13 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c3, node__node3);
			GRGEN_MODEL.@Edge edge__edge14 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c4, node_n4);
			GRGEN_MODEL.@Edge edge__edge15 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node4);
			GRGEN_MODEL.@Edge edge__edge16 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n4, node__node5);
			GRGEN_MODEL.@Edge edge__edge17 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c5, node__node6);
			GRGEN_MODEL.@Edge edge__edge18 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_c6, node_n6);
			GRGEN_MODEL.@Edge edge__edge19 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n6, node__node7);
			GRGEN_MODEL.@Edge edge__edge20 = GRGEN_MODEL.@Edge.CreateEdge(graph, node_n6, node__node8);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] createTNB_addedNodeNames = new string[] { "c1", "c2", "c3", "c4", "c5", "c6", "_node0", "n2", "_node1", "_node2", "_node3", "n4", "_node4", "_node5", "_node6", "n6", "_node7", "_node8" };
		private static string[] createTNB_addedEdgeNames = new string[] { "_edge0", "_edge1", "_edge2", "_edge3", "_edge4", "_edge5", "_edge6", "_edge7", "_edge8", "_edge9", "_edge10", "_edge11", "_edge12", "_edge13", "_edge14", "_edge15", "_edge16", "_edge17", "_edge18", "_edge19", "_edge20" };

		static Rule_createTNB() {
		}

		public interface IMatch_createTNB : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_createTNB : GRGEN_LGSP.MatchListElement<Match_createTNB>, IMatch_createTNB
		{
			public enum createTNB_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNB_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNB_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createTNB_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNB_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNB_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createTNB_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_createTNB.instance.pat_createTNB; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_createTNB(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_createTNB(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_createTNB nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_createTNB cur = this;
				while(cur != null) {
					Match_createTNB next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_createTNB that)
			{
			}

			public Match_createTNB(Match_createTNB that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_createTNB that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
			}

			public Match_createTNB(Match_createTNB that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_createTNB()
			{
			}

			public bool IsEqual(Match_createTNB that)
			{
				if(that==null) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_createTNB.IMatch_createTNB> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_createTNB.IMatch_createTNB>)
				return ((List<GRGEN_ACTIONS.Rule_createTNB.IMatch_createTNB>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_createTNB.IMatch_createTNB>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_createTNB.IMatch_createTNB instanceBearingAttributeForSearch_createTNB = new GRGEN_ACTIONS.Rule_createTNB.Match_createTNB();
	}

	public class Rule_keepBenzolRingPattern : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_keepBenzolRingPattern instance = null;
		public static Rule_keepBenzolRingPattern Instance { get { if(instance==null) { instance = new Rule_keepBenzolRingPattern(); instance.initialize(); } return instance; } }

		public enum keepBenzolRingPattern_NodeNums { };
		public enum keepBenzolRingPattern_EdgeNums { };
		public enum keepBenzolRingPattern_VariableNums { };
		public enum keepBenzolRingPattern_SubNums { @br, };
		public enum keepBenzolRingPattern_AltNums { };
		public enum keepBenzolRingPattern_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_keepBenzolRingPattern;


		private Rule_keepBenzolRingPattern()
			: base("keepBenzolRingPattern",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_keepBenzolRingPattern+IMatch_keepBenzolRingPattern",
				"de.unika.ipd.grGen.Action_TNT.Rule_keepBenzolRingPattern+Match_keepBenzolRingPattern"
			)
		{
		}
		private void initialize()
		{
			bool[,] keepBenzolRingPattern_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] keepBenzolRingPattern_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] keepBenzolRingPattern_isNodeTotallyHomomorphic = new bool[0];
			bool[] keepBenzolRingPattern_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternGraphEmbedding keepBenzolRingPattern_br = new GRGEN_LGSP.PatternGraphEmbedding("br", Pattern_BenzolRing.Instance, 
				new GRGEN_EXPR.Expression[] {
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] {  }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] {  }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_keepBenzolRingPattern = new GRGEN_LGSP.PatternGraph(
				"keepBenzolRingPattern",
				"",
				null, "keepBenzolRingPattern",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { keepBenzolRingPattern_br }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				keepBenzolRingPattern_isNodeHomomorphicGlobal,
				keepBenzolRingPattern_isEdgeHomomorphicGlobal,
				keepBenzolRingPattern_isNodeTotallyHomomorphic,
				keepBenzolRingPattern_isEdgeTotallyHomomorphic
			);

			keepBenzolRingPattern_br.PointOfDefinition = pat_keepBenzolRingPattern;

			patternGraph = pat_keepBenzolRingPattern;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_keepBenzolRingPattern curMatch = (Match_keepBenzolRingPattern)_curMatch;
			GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing subpattern_br = curMatch.@_br;
			graph.SettingAddedNodeNames( keepBenzolRingPattern_addedNodeNames );
			graph.SettingAddedEdgeNames( keepBenzolRingPattern_addedEdgeNames );
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] keepBenzolRingPattern_addedNodeNames = new string[] {  };
		private static string[] keepBenzolRingPattern_addedEdgeNames = new string[] {  };

		static Rule_keepBenzolRingPattern() {
		}

		public interface IMatch_keepBenzolRingPattern : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @br { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_keepBenzolRingPattern : GRGEN_LGSP.MatchListElement<Match_keepBenzolRingPattern>, IMatch_keepBenzolRingPattern
		{
			public enum keepBenzolRingPattern_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum keepBenzolRingPattern_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum keepBenzolRingPattern_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @br { get { return @_br; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_br;
			public enum keepBenzolRingPattern_SubNums { @br, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 1; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)keepBenzolRingPattern_SubNums.@br: return _br;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "br": return _br;
				default: return null;
				}
			}

			public enum keepBenzolRingPattern_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum keepBenzolRingPattern_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum keepBenzolRingPattern_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_keepBenzolRingPattern.instance.pat_keepBenzolRingPattern; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_keepBenzolRingPattern(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_keepBenzolRingPattern(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_keepBenzolRingPattern nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_keepBenzolRingPattern cur = this;
				while(cur != null) {
					Match_keepBenzolRingPattern next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_keepBenzolRingPattern that)
			{
				@_br = that.@_br;
			}

			public Match_keepBenzolRingPattern(Match_keepBenzolRingPattern that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_keepBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				@_br = new GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing(that.@_br, oldToNewMap);
			}

			public Match_keepBenzolRingPattern(Match_keepBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_keepBenzolRingPattern()
			{
			}

			public bool IsEqual(Match_keepBenzolRingPattern that)
			{
				if(that==null) return false;
				if(!@_br.IsEqual(that.@_br)) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern>)
				return ((List<GRGEN_ACTIONS.Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern instanceBearingAttributeForSearch_keepBenzolRingPattern = new GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Match_keepBenzolRingPattern();
	}

	public class Rule_createBenzolRingPattern : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_createBenzolRingPattern instance = null;
		public static Rule_createBenzolRingPattern Instance { get { if(instance==null) { instance = new Rule_createBenzolRingPattern(); instance.initialize(); } return instance; } }

		public enum createBenzolRingPattern_NodeNums { };
		public enum createBenzolRingPattern_EdgeNums { };
		public enum createBenzolRingPattern_VariableNums { };
		public enum createBenzolRingPattern_SubNums { };
		public enum createBenzolRingPattern_AltNums { };
		public enum createBenzolRingPattern_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_createBenzolRingPattern;


		private Rule_createBenzolRingPattern()
			: base("createBenzolRingPattern",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_createBenzolRingPattern+IMatch_createBenzolRingPattern",
				"de.unika.ipd.grGen.Action_TNT.Rule_createBenzolRingPattern+Match_createBenzolRingPattern"
			)
		{
		}
		private void initialize()
		{
			bool[,] createBenzolRingPattern_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] createBenzolRingPattern_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] createBenzolRingPattern_isNodeTotallyHomomorphic = new bool[0];
			bool[] createBenzolRingPattern_isEdgeTotallyHomomorphic = new bool[0];
			pat_createBenzolRingPattern = new GRGEN_LGSP.PatternGraph(
				"createBenzolRingPattern",
				"",
				null, "createBenzolRingPattern",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] {  }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				createBenzolRingPattern_isNodeHomomorphicGlobal,
				createBenzolRingPattern_isEdgeHomomorphicGlobal,
				createBenzolRingPattern_isNodeTotallyHomomorphic,
				createBenzolRingPattern_isEdgeTotallyHomomorphic
			);


			patternGraph = pat_createBenzolRingPattern;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_createBenzolRingPattern curMatch = (Match_createBenzolRingPattern)_curMatch;
			graph.SettingAddedNodeNames( createBenzolRingPattern_addedNodeNames );
			graph.SettingAddedEdgeNames( createBenzolRingPattern_addedEdgeNames );
			GRGEN_ACTIONS.Pattern_BenzolRing.Instance.BenzolRing_Create(actionEnv);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] createBenzolRingPattern_addedNodeNames = new string[] {  };
		private static string[] createBenzolRingPattern_addedEdgeNames = new string[] {  };

		static Rule_createBenzolRingPattern() {
		}

		public interface IMatch_createBenzolRingPattern : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_createBenzolRingPattern : GRGEN_LGSP.MatchListElement<Match_createBenzolRingPattern>, IMatch_createBenzolRingPattern
		{
			public enum createBenzolRingPattern_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createBenzolRingPattern_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createBenzolRingPattern_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum createBenzolRingPattern_SubNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createBenzolRingPattern_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createBenzolRingPattern_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum createBenzolRingPattern_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_createBenzolRingPattern.instance.pat_createBenzolRingPattern; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_createBenzolRingPattern(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_createBenzolRingPattern(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_createBenzolRingPattern nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_createBenzolRingPattern cur = this;
				while(cur != null) {
					Match_createBenzolRingPattern next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_createBenzolRingPattern that)
			{
			}

			public Match_createBenzolRingPattern(Match_createBenzolRingPattern that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_createBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
			}

			public Match_createBenzolRingPattern(Match_createBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_createBenzolRingPattern()
			{
			}

			public bool IsEqual(Match_createBenzolRingPattern that)
			{
				if(that==null) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern>)
				return ((List<GRGEN_ACTIONS.Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern instanceBearingAttributeForSearch_createBenzolRingPattern = new GRGEN_ACTIONS.Rule_createBenzolRingPattern.Match_createBenzolRingPattern();
	}

	public class Rule_deleteBenzolRingPattern : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_deleteBenzolRingPattern instance = null;
		public static Rule_deleteBenzolRingPattern Instance { get { if(instance==null) { instance = new Rule_deleteBenzolRingPattern(); instance.initialize(); } return instance; } }

		public enum deleteBenzolRingPattern_NodeNums { };
		public enum deleteBenzolRingPattern_EdgeNums { };
		public enum deleteBenzolRingPattern_VariableNums { };
		public enum deleteBenzolRingPattern_SubNums { @_sub0, };
		public enum deleteBenzolRingPattern_AltNums { };
		public enum deleteBenzolRingPattern_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_deleteBenzolRingPattern;


		private Rule_deleteBenzolRingPattern()
			: base("deleteBenzolRingPattern",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_deleteBenzolRingPattern+IMatch_deleteBenzolRingPattern",
				"de.unika.ipd.grGen.Action_TNT.Rule_deleteBenzolRingPattern+Match_deleteBenzolRingPattern"
			)
		{
		}
		private void initialize()
		{
			bool[,] deleteBenzolRingPattern_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] deleteBenzolRingPattern_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] deleteBenzolRingPattern_isNodeTotallyHomomorphic = new bool[0];
			bool[] deleteBenzolRingPattern_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternGraphEmbedding deleteBenzolRingPattern__sub0 = new GRGEN_LGSP.PatternGraphEmbedding("_sub0", Pattern_BenzolRing.Instance, 
				new GRGEN_EXPR.Expression[] {
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] {  }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] {  }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_deleteBenzolRingPattern = new GRGEN_LGSP.PatternGraph(
				"deleteBenzolRingPattern",
				"",
				null, "deleteBenzolRingPattern",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { deleteBenzolRingPattern__sub0 }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				deleteBenzolRingPattern_isNodeHomomorphicGlobal,
				deleteBenzolRingPattern_isEdgeHomomorphicGlobal,
				deleteBenzolRingPattern_isNodeTotallyHomomorphic,
				deleteBenzolRingPattern_isEdgeTotallyHomomorphic
			);

			deleteBenzolRingPattern__sub0.PointOfDefinition = pat_deleteBenzolRingPattern;

			patternGraph = pat_deleteBenzolRingPattern;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_deleteBenzolRingPattern curMatch = (Match_deleteBenzolRingPattern)_curMatch;
			GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing subpattern__sub0 = curMatch.@__sub0;
			graph.SettingAddedNodeNames( deleteBenzolRingPattern_addedNodeNames );
			graph.SettingAddedEdgeNames( deleteBenzolRingPattern_addedEdgeNames );
			GRGEN_ACTIONS.Pattern_BenzolRing.Instance.BenzolRing_Delete(actionEnv, subpattern__sub0);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] deleteBenzolRingPattern_addedNodeNames = new string[] {  };
		private static string[] deleteBenzolRingPattern_addedEdgeNames = new string[] {  };

		static Rule_deleteBenzolRingPattern() {
		}

		public interface IMatch_deleteBenzolRingPattern : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_sub0 { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_deleteBenzolRingPattern : GRGEN_LGSP.MatchListElement<Match_deleteBenzolRingPattern>, IMatch_deleteBenzolRingPattern
		{
			public enum deleteBenzolRingPattern_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum deleteBenzolRingPattern_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum deleteBenzolRingPattern_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_sub0 { get { return @__sub0; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @__sub0;
			public enum deleteBenzolRingPattern_SubNums { @_sub0, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 1; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)deleteBenzolRingPattern_SubNums.@_sub0: return __sub0;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "_sub0": return __sub0;
				default: return null;
				}
			}

			public enum deleteBenzolRingPattern_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum deleteBenzolRingPattern_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum deleteBenzolRingPattern_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_deleteBenzolRingPattern.instance.pat_deleteBenzolRingPattern; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_deleteBenzolRingPattern(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_deleteBenzolRingPattern(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_deleteBenzolRingPattern nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_deleteBenzolRingPattern cur = this;
				while(cur != null) {
					Match_deleteBenzolRingPattern next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_deleteBenzolRingPattern that)
			{
				@__sub0 = that.@__sub0;
			}

			public Match_deleteBenzolRingPattern(Match_deleteBenzolRingPattern that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_deleteBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				@__sub0 = new GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing(that.@__sub0, oldToNewMap);
			}

			public Match_deleteBenzolRingPattern(Match_deleteBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_deleteBenzolRingPattern()
			{
			}

			public bool IsEqual(Match_deleteBenzolRingPattern that)
			{
				if(that==null) return false;
				if(!@__sub0.IsEqual(that.@__sub0)) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern>)
				return ((List<GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern instanceBearingAttributeForSearch_deleteBenzolRingPattern = new GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Match_deleteBenzolRingPattern();
	}

	public class Rule_deleteInModifyBenzolRingPattern : GRGEN_LGSP.LGSPRulePattern
	{
		private static Rule_deleteInModifyBenzolRingPattern instance = null;
		public static Rule_deleteInModifyBenzolRingPattern Instance { get { if(instance==null) { instance = new Rule_deleteInModifyBenzolRingPattern(); instance.initialize(); } return instance; } }

		public enum deleteInModifyBenzolRingPattern_NodeNums { };
		public enum deleteInModifyBenzolRingPattern_EdgeNums { };
		public enum deleteInModifyBenzolRingPattern_VariableNums { };
		public enum deleteInModifyBenzolRingPattern_SubNums { @br, };
		public enum deleteInModifyBenzolRingPattern_AltNums { };
		public enum deleteInModifyBenzolRingPattern_IterNums { };





		public GRGEN_LGSP.PatternGraph pat_deleteInModifyBenzolRingPattern;


		private Rule_deleteInModifyBenzolRingPattern()
			: base("deleteInModifyBenzolRingPattern",
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new string[] { },
				new GRGEN_LIBGR.GrGenType[] { },
				new GRGEN_LGSP.LGSPFilter[] {
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirst", null, "keepFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLast", null, "keepLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepFirstFraction", null, "keepFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("keepLastFraction", null, "keepLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirst", null, "removeFirst", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLast", null, "removeLast", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(int)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeFirstFraction", null, "removeFirstFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
					new GRGEN_LGSP.LGSPFilterAutoSupplied("removeLastFraction", null, "removeLastFraction", null, new GRGEN_LIBGR.GrGenType[] {GRGEN_LIBGR.VarType.GetVarType(typeof(double)), }, new String[] {"param"}),
				},
				new GRGEN_LIBGR.MatchClassInfo[] { },
				"de.unika.ipd.grGen.Action_TNT.Rule_deleteInModifyBenzolRingPattern+IMatch_deleteInModifyBenzolRingPattern",
				"de.unika.ipd.grGen.Action_TNT.Rule_deleteInModifyBenzolRingPattern+Match_deleteInModifyBenzolRingPattern"
			)
		{
		}
		private void initialize()
		{
			bool[,] deleteInModifyBenzolRingPattern_isNodeHomomorphicGlobal = new bool[0, 0];
			bool[,] deleteInModifyBenzolRingPattern_isEdgeHomomorphicGlobal = new bool[0, 0];
			bool[] deleteInModifyBenzolRingPattern_isNodeTotallyHomomorphic = new bool[0];
			bool[] deleteInModifyBenzolRingPattern_isEdgeTotallyHomomorphic = new bool[0];
			GRGEN_LGSP.PatternGraphEmbedding deleteInModifyBenzolRingPattern_br = new GRGEN_LGSP.PatternGraphEmbedding("br", Pattern_BenzolRing.Instance, 
				new GRGEN_EXPR.Expression[] {
				}, 
				new string[] { }, new GRGEN_LGSP.PatternElement[] { }, new GRGEN_LGSP.PatternVariable[] { },
				new string[] {  }, new string[] {  }, new string[] {  },
				new GRGEN_LGSP.PatternNode[] {  }, new GRGEN_LGSP.PatternEdge[] {  }, new GRGEN_LGSP.PatternVariable[] {  });
			pat_deleteInModifyBenzolRingPattern = new GRGEN_LGSP.PatternGraph(
				"deleteInModifyBenzolRingPattern",
				"",
				null, "deleteInModifyBenzolRingPattern",
				false, false,
				new GRGEN_LGSP.PatternNode[] {  }, 
				new GRGEN_LGSP.PatternEdge[] {  }, 
				new GRGEN_LGSP.PatternVariable[] {  }, 
				new GRGEN_LGSP.PatternGraphEmbedding[] { deleteInModifyBenzolRingPattern_br }, 
				new GRGEN_LGSP.Alternative[] {  }, 
				new GRGEN_LGSP.Iterated[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternGraph[] {  }, 
				new GRGEN_LGSP.PatternCondition[] {  }, 
				new GRGEN_LGSP.PatternYielding[] {  }, 
				new bool[0, 0] ,
				new bool[0, 0] ,
				deleteInModifyBenzolRingPattern_isNodeHomomorphicGlobal,
				deleteInModifyBenzolRingPattern_isEdgeHomomorphicGlobal,
				deleteInModifyBenzolRingPattern_isNodeTotallyHomomorphic,
				deleteInModifyBenzolRingPattern_isEdgeTotallyHomomorphic
			);

			deleteInModifyBenzolRingPattern_br.PointOfDefinition = pat_deleteInModifyBenzolRingPattern;

			patternGraph = pat_deleteInModifyBenzolRingPattern;
		}


		public void Modify(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch _curMatch)
		{
			GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
			Match_deleteInModifyBenzolRingPattern curMatch = (Match_deleteInModifyBenzolRingPattern)_curMatch;
			GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing subpattern_br = curMatch.@_br;
			graph.SettingAddedNodeNames( deleteInModifyBenzolRingPattern_addedNodeNames );
			graph.SettingAddedEdgeNames( deleteInModifyBenzolRingPattern_addedEdgeNames );
			GRGEN_ACTIONS.Pattern_BenzolRing.Instance.BenzolRing_Delete(actionEnv, subpattern_br);
			actionEnv.SelectedMatchRewritten();
			return;
		}
		private static string[] deleteInModifyBenzolRingPattern_addedNodeNames = new string[] {  };
		private static string[] deleteInModifyBenzolRingPattern_addedEdgeNames = new string[] {  };

		static Rule_deleteInModifyBenzolRingPattern() {
		}

		public interface IMatch_deleteInModifyBenzolRingPattern : GRGEN_LIBGR.IMatch
		{
			//Nodes
			//Edges
			//Variables
			//EmbeddedGraphs
			@GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @br { get; }
			//Alternatives
			//Iterateds
			//Independents
			// further match object stuff
			void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern);
		}

		public class Match_deleteInModifyBenzolRingPattern : GRGEN_LGSP.MatchListElement<Match_deleteInModifyBenzolRingPattern>, IMatch_deleteInModifyBenzolRingPattern
		{
			public enum deleteInModifyBenzolRingPattern_NodeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.INode> Nodes { get { return new GRGEN_LGSP.Nodes_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.INode> NodesEnumerator { get { return new GRGEN_LGSP.Nodes_Enumerator(this); } }
			public override int NumberOfNodes { get { return 0; } }
			public override GRGEN_LIBGR.INode getNodeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.INode getNode(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetNode(string name, GRGEN_LIBGR.INode value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum deleteInModifyBenzolRingPattern_EdgeNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IEdge> Edges { get { return new GRGEN_LGSP.Edges_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IEdge> EdgesEnumerator { get { return new GRGEN_LGSP.Edges_Enumerator(this); } }
			public override int NumberOfEdges { get { return 0; } }
			public override GRGEN_LIBGR.IEdge getEdgeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IEdge getEdge(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetEdge(string name, GRGEN_LIBGR.IEdge value)
			{
				switch(name) {
				default: break;
				}
			}

			public enum deleteInModifyBenzolRingPattern_VariableNums { END_OF_ENUM };
			public override IEnumerable<object> Variables { get { return new GRGEN_LGSP.Variables_Enumerable(this); } }
			public override IEnumerator<object> VariablesEnumerator { get { return new GRGEN_LGSP.Variables_Enumerator(this); } }
			public override int NumberOfVariables { get { return 0; } }
			public override object getVariableAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override object getVariable(string name)
			{
				switch(name) {
				default: return null;
				}
			}
			public override void SetVariable(string name, object value)
			{
				switch(name) {
				default: break;
				}
			}

			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @br { get { return @_br; } }
			public @GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing @_br;
			public enum deleteInModifyBenzolRingPattern_SubNums { @br, END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> EmbeddedGraphs { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> EmbeddedGraphsEnumerator { get { return new GRGEN_LGSP.EmbeddedGraphs_Enumerator(this); } }
			public override int NumberOfEmbeddedGraphs { get { return 1; } }
			public override GRGEN_LIBGR.IMatch getEmbeddedGraphAt(int index)
			{
				switch(index) {
				case (int)deleteInModifyBenzolRingPattern_SubNums.@br: return _br;
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getEmbeddedGraph(string name)
			{
				switch(name) {
				case "br": return _br;
				default: return null;
				}
			}

			public enum deleteInModifyBenzolRingPattern_AltNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Alternatives { get { return new GRGEN_LGSP.Alternatives_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> AlternativesEnumerator { get { return new GRGEN_LGSP.Alternatives_Enumerator(this); } }
			public override int NumberOfAlternatives { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getAlternativeAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getAlternative(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum deleteInModifyBenzolRingPattern_IterNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatches> Iterateds { get { return new GRGEN_LGSP.Iterateds_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatches> IteratedsEnumerator { get { return new GRGEN_LGSP.Iterateds_Enumerator(this); } }
			public override int NumberOfIterateds { get { return 0; } }
			public override GRGEN_LIBGR.IMatches getIteratedAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatches getIterated(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public enum deleteInModifyBenzolRingPattern_IdptNums { END_OF_ENUM };
			public override IEnumerable<GRGEN_LIBGR.IMatch> Independents { get { return new GRGEN_LGSP.Independents_Enumerable(this); } }
			public override IEnumerator<GRGEN_LIBGR.IMatch> IndependentsEnumerator { get { return new GRGEN_LGSP.Independents_Enumerator(this); } }
			public override int NumberOfIndependents { get { return 0; } }
			public override GRGEN_LIBGR.IMatch getIndependentAt(int index)
			{
				switch(index) {
				default: return null;
				}
			}
			public override GRGEN_LIBGR.IMatch getIndependent(string name)
			{
				switch(name) {
				default: return null;
				}
			}

			public override GRGEN_LIBGR.IPatternGraph Pattern { get { return Rule_deleteInModifyBenzolRingPattern.instance.pat_deleteInModifyBenzolRingPattern; } }
			public override GRGEN_LIBGR.IMatchClass MatchClass { get { return null; } }
			public override GRGEN_LIBGR.IMatch Clone() { return new Match_deleteInModifyBenzolRingPattern(this); }
			public override GRGEN_LIBGR.IMatch Clone(IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap) { return new Match_deleteInModifyBenzolRingPattern(this, oldToNewMap); }
			public void SetMatchOfEnclosingPattern(GRGEN_LIBGR.IMatch matchOfEnclosingPattern) { _matchOfEnclosingPattern = matchOfEnclosingPattern; }
			public Match_deleteInModifyBenzolRingPattern nextWithSameHash;
			public void CleanNextWithSameHash() {
				Match_deleteInModifyBenzolRingPattern cur = this;
				while(cur != null) {
					Match_deleteInModifyBenzolRingPattern next = cur.nextWithSameHash;
					cur.nextWithSameHash = null;
					cur = next;
				}
			}

			public void AssignContent(Match_deleteInModifyBenzolRingPattern that)
			{
				@_br = that.@_br;
			}

			public Match_deleteInModifyBenzolRingPattern(Match_deleteInModifyBenzolRingPattern that)
			{
				AssignContent(that);
			}
			public void AssignContent(Match_deleteInModifyBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				@_br = new GRGEN_ACTIONS.Pattern_BenzolRing.Match_BenzolRing(that.@_br, oldToNewMap);
			}

			public Match_deleteInModifyBenzolRingPattern(Match_deleteInModifyBenzolRingPattern that, IDictionary<GRGEN_LIBGR.IGraphElement, GRGEN_LIBGR.IGraphElement> oldToNewMap)
			{
				AssignContent(that, oldToNewMap);
			}
			public Match_deleteInModifyBenzolRingPattern()
			{
			}

			public bool IsEqual(Match_deleteInModifyBenzolRingPattern that)
			{
				if(that==null) return false;
				if(!@_br.IsEqual(that.@_br)) return false;
				return true;
			}
		}


		public class Extractor
		{
		}


		public static List<GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> ConvertAsNeeded(object parameter)
		{
			if(parameter is List<GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern>)
				return ((List<GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern>)parameter);
			else
				return GRGEN_LIBGR.MatchListHelper.ToList<GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern>((IList<GRGEN_LIBGR.IMatch>)parameter);
		}
	}

	
	public partial class ArrayHelper
	{
		private static GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern instanceBearingAttributeForSearch_deleteInModifyBenzolRingPattern = new GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Match_deleteInModifyBenzolRingPattern();
	}

	public class Functions
	{

		static Functions() {
		}

	}

	public class Procedures
	{

		static Procedures() {
		}

	}

	public partial class MatchFilters
	{

		static MatchFilters() {
		}

	}

	public partial class MatchClassFilters
	{

		static MatchClassFilters() {
		}

	}



	//-----------------------------------------------------------

	public class TNT_RuleAndMatchingPatterns : GRGEN_LGSP.LGSPRuleAndMatchingPatterns
	{
		public TNT_RuleAndMatchingPatterns()
		{
			subpatterns = new GRGEN_LGSP.LGSPMatchingPattern[11];
			rules = new GRGEN_LGSP.LGSPRulePattern[19];
			rulesAndSubpatterns = new GRGEN_LGSP.LGSPMatchingPattern[11+19];
			definedSequences = new GRGEN_LIBGR.DefinedSequenceInfo[0];
			functions = new GRGEN_LIBGR.FunctionInfo[0+0];
			procedures = new GRGEN_LIBGR.ProcedureInfo[0+0];
			matchClasses = new GRGEN_LIBGR.MatchClassInfo[0];
			packages = new string[0];
			subpatterns[0] = Pattern_BenzolRing.Instance;
			rulesAndSubpatterns[0] = Pattern_BenzolRing.Instance;
			subpatterns[1] = Pattern_BenzolRingC123456Exposed.Instance;
			rulesAndSubpatterns[1] = Pattern_BenzolRingC123456Exposed.Instance;
			subpatterns[2] = Pattern_BenzolRingC1Exposed.Instance;
			rulesAndSubpatterns[2] = Pattern_BenzolRingC1Exposed.Instance;
			subpatterns[3] = Pattern_BenzolRingC1ExposedNotC6Nitro.Instance;
			rulesAndSubpatterns[3] = Pattern_BenzolRingC1ExposedNotC6Nitro.Instance;
			subpatterns[4] = Pattern_Oxygen.Instance;
			rulesAndSubpatterns[4] = Pattern_Oxygen.Instance;
			subpatterns[5] = Pattern_Hydrogen.Instance;
			rulesAndSubpatterns[5] = Pattern_Hydrogen.Instance;
			subpatterns[6] = Pattern_Hydroxyl.Instance;
			rulesAndSubpatterns[6] = Pattern_Hydroxyl.Instance;
			subpatterns[7] = Pattern_Methyl.Instance;
			rulesAndSubpatterns[7] = Pattern_Methyl.Instance;
			subpatterns[8] = Pattern_Nitro.Instance;
			rulesAndSubpatterns[8] = Pattern_Nitro.Instance;
			subpatterns[9] = Pattern_TriNitro.Instance;
			rulesAndSubpatterns[9] = Pattern_TriNitro.Instance;
			subpatterns[10] = Pattern_ToluolCoreThenTriNitro.Instance;
			rulesAndSubpatterns[10] = Pattern_ToluolCoreThenTriNitro.Instance;
			rules[0] = Rule_BenzolRing.Instance;
			rulesAndSubpatterns[11+0] = Rule_BenzolRing.Instance;
			rules[1] = Rule_TNTTotallyFolded.Instance;
			rulesAndSubpatterns[11+1] = Rule_TNTTotallyFolded.Instance;
			rules[2] = Rule_TNTChain.Instance;
			rulesAndSubpatterns[11+2] = Rule_TNTChain.Instance;
			rules[3] = Rule_ToluolCore.Instance;
			rulesAndSubpatterns[11+3] = Rule_ToluolCore.Instance;
			rules[4] = Rule_ToluolCoreNotC6Nitro.Instance;
			rulesAndSubpatterns[11+4] = Rule_ToluolCoreNotC6Nitro.Instance;
			rules[5] = Rule_Toluol.Instance;
			rulesAndSubpatterns[11+5] = Rule_Toluol.Instance;
			rules[6] = Rule_TNT.Instance;
			rulesAndSubpatterns[11+6] = Rule_TNT.Instance;
			rules[7] = Rule_TNTUnfolded.Instance;
			rulesAndSubpatterns[11+7] = Rule_TNTUnfolded.Instance;
			rules[8] = Rule_createTNT.Instance;
			rulesAndSubpatterns[11+8] = Rule_createTNT.Instance;
			rules[9] = Rule_DNT.Instance;
			rulesAndSubpatterns[11+9] = Rule_DNT.Instance;
			rules[10] = Rule_DNTUnfolded.Instance;
			rulesAndSubpatterns[11+10] = Rule_DNTUnfolded.Instance;
			rules[11] = Rule_createDNT.Instance;
			rulesAndSubpatterns[11+11] = Rule_createDNT.Instance;
			rules[12] = Rule_TNB.Instance;
			rulesAndSubpatterns[11+12] = Rule_TNB.Instance;
			rules[13] = Rule_TNBUnfolded.Instance;
			rulesAndSubpatterns[11+13] = Rule_TNBUnfolded.Instance;
			rules[14] = Rule_createTNB.Instance;
			rulesAndSubpatterns[11+14] = Rule_createTNB.Instance;
			rules[15] = Rule_keepBenzolRingPattern.Instance;
			rulesAndSubpatterns[11+15] = Rule_keepBenzolRingPattern.Instance;
			rules[16] = Rule_createBenzolRingPattern.Instance;
			rulesAndSubpatterns[11+16] = Rule_createBenzolRingPattern.Instance;
			rules[17] = Rule_deleteBenzolRingPattern.Instance;
			rulesAndSubpatterns[11+17] = Rule_deleteBenzolRingPattern.Instance;
			rules[18] = Rule_deleteInModifyBenzolRingPattern.Instance;
			rulesAndSubpatterns[11+18] = Rule_deleteInModifyBenzolRingPattern.Instance;
		}
		public override GRGEN_LGSP.LGSPRulePattern[] Rules { get { return rules; } }
		private GRGEN_LGSP.LGSPRulePattern[] rules;
		public override GRGEN_LGSP.LGSPMatchingPattern[] Subpatterns { get { return subpatterns; } }
		private GRGEN_LGSP.LGSPMatchingPattern[] subpatterns;
		public override GRGEN_LGSP.LGSPMatchingPattern[] RulesAndSubpatterns { get { return rulesAndSubpatterns; } }
		private GRGEN_LGSP.LGSPMatchingPattern[] rulesAndSubpatterns;
		public override GRGEN_LIBGR.DefinedSequenceInfo[] DefinedSequences { get { return definedSequences; } }
		private GRGEN_LIBGR.DefinedSequenceInfo[] definedSequences;
		public override GRGEN_LIBGR.FunctionInfo[] Functions { get { return functions; } }
		private GRGEN_LIBGR.FunctionInfo[] functions;
		public override GRGEN_LIBGR.ProcedureInfo[] Procedures { get { return procedures; } }
		private GRGEN_LIBGR.ProcedureInfo[] procedures;
		public override GRGEN_LIBGR.MatchClassInfo[] MatchClasses { get { return matchClasses; } }
		private GRGEN_LIBGR.MatchClassInfo[] matchClasses;
		public override string[] Packages { get { return packages; } }
		private string[] packages;
	}


    public class PatternAction_BenzolRing : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_BenzolRing(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_BenzolRing.Instance.patternGraph;
        }

        public static PatternAction_BenzolRing getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_BenzolRing newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_BenzolRing(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_BenzolRing oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_BenzolRing freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_BenzolRing next = null;

        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // Lookup BenzolRing_edge__edge0 
            int type_id_candidate_BenzolRing_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_BenzolRing_edge__edge0], candidate_BenzolRing_edge__edge0 = head_candidate_BenzolRing_edge__edge0.lgspTypeNext; candidate_BenzolRing_edge__edge0 != head_candidate_BenzolRing_edge__edge0; candidate_BenzolRing_edge__edge0 = candidate_BenzolRing_edge__edge0.lgspTypeNext)
            {
                if((candidate_BenzolRing_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    continue;
                }
                uint prev__candidate_BenzolRing_edge__edge0;
                prev__candidate_BenzolRing_edge__edge0 = candidate_BenzolRing_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRing_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source BenzolRing_node_c1 from BenzolRing_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c1 = candidate_BenzolRing_edge__edge0.lgspSource;
                if(candidate_BenzolRing_node_c1.lgspType.TypeID!=1) {
                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                    continue;
                }
                if((candidate_BenzolRing_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                    continue;
                }
                uint prev__candidate_BenzolRing_node_c1;
                prev__candidate_BenzolRing_node_c1 = candidate_BenzolRing_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRing_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target BenzolRing_node_c2 from BenzolRing_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c2 = candidate_BenzolRing_edge__edge0.lgspTarget;
                if(candidate_BenzolRing_node_c2.lgspType.TypeID!=1) {
                    candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                    continue;
                }
                if((candidate_BenzolRing_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                    continue;
                }
                if((candidate_BenzolRing_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                    continue;
                }
                uint prev__candidate_BenzolRing_node_c2;
                prev__candidate_BenzolRing_node_c2 = candidate_BenzolRing_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRing_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Extend Outgoing BenzolRing_edge__edge6 from BenzolRing_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge6 = candidate_BenzolRing_node_c1.lgspOuthead;
                if(head_candidate_BenzolRing_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge6 = head_candidate_BenzolRing_edge__edge6;
                    do
                    {
                        if(candidate_BenzolRing_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_BenzolRing_edge__edge6.lgspTarget != candidate_BenzolRing_node_c2) {
                            continue;
                        }
                        if((candidate_BenzolRing_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        if((candidate_BenzolRing_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                        {
                            continue;
                        }
                        uint prev__candidate_BenzolRing_edge__edge6;
                        prev__candidate_BenzolRing_edge__edge6 = candidate_BenzolRing_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_BenzolRing_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing BenzolRing_edge__edge1 from BenzolRing_node_c2 
                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge1 = candidate_BenzolRing_node_c2.lgspOuthead;
                        if(head_candidate_BenzolRing_edge__edge1 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge1 = head_candidate_BenzolRing_edge__edge1;
                            do
                            {
                                if(candidate_BenzolRing_edge__edge1.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_BenzolRing_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                if((candidate_BenzolRing_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                {
                                    continue;
                                }
                                uint prev__candidate_BenzolRing_edge__edge1;
                                prev__candidate_BenzolRing_edge__edge1 = candidate_BenzolRing_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRing_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target BenzolRing_node_c3 from BenzolRing_edge__edge1 
                                GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c3 = candidate_BenzolRing_edge__edge1.lgspTarget;
                                if(candidate_BenzolRing_node_c3.lgspType.TypeID!=1) {
                                    candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                                    continue;
                                }
                                if((candidate_BenzolRing_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                                    continue;
                                }
                                if((candidate_BenzolRing_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                {
                                    candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                                    continue;
                                }
                                uint prev__candidate_BenzolRing_node_c3;
                                prev__candidate_BenzolRing_node_c3 = candidate_BenzolRing_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRing_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing BenzolRing_edge__edge2 from BenzolRing_node_c3 
                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge2 = candidate_BenzolRing_node_c3.lgspOuthead;
                                if(head_candidate_BenzolRing_edge__edge2 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge2 = head_candidate_BenzolRing_edge__edge2;
                                    do
                                    {
                                        if(candidate_BenzolRing_edge__edge2.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_BenzolRing_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        if((candidate_BenzolRing_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_BenzolRing_edge__edge2;
                                        prev__candidate_BenzolRing_edge__edge2 = candidate_BenzolRing_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_BenzolRing_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target BenzolRing_node_c4 from BenzolRing_edge__edge2 
                                        GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c4 = candidate_BenzolRing_edge__edge2.lgspTarget;
                                        if(candidate_BenzolRing_node_c4.lgspType.TypeID!=1) {
                                            candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                            continue;
                                        }
                                        if((candidate_BenzolRing_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                            continue;
                                        }
                                        if((candidate_BenzolRing_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                        {
                                            candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                            continue;
                                        }
                                        uint prev__candidate_BenzolRing_node_c4;
                                        prev__candidate_BenzolRing_node_c4 = candidate_BenzolRing_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_BenzolRing_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing BenzolRing_edge__edge7 from BenzolRing_node_c3 
                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge7 = candidate_BenzolRing_node_c3.lgspOuthead;
                                        if(head_candidate_BenzolRing_edge__edge7 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge7 = head_candidate_BenzolRing_edge__edge7;
                                            do
                                            {
                                                if(candidate_BenzolRing_edge__edge7.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if(candidate_BenzolRing_edge__edge7.lgspTarget != candidate_BenzolRing_node_c4) {
                                                    continue;
                                                }
                                                if((candidate_BenzolRing_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                if((candidate_BenzolRing_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRing_edge__edge7;
                                                prev__candidate_BenzolRing_edge__edge7 = candidate_BenzolRing_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRing_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRing_edge__edge3 from BenzolRing_node_c4 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge3 = candidate_BenzolRing_node_c4.lgspOuthead;
                                                if(head_candidate_BenzolRing_edge__edge3 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge3 = head_candidate_BenzolRing_edge__edge3;
                                                    do
                                                    {
                                                        if(candidate_BenzolRing_edge__edge3.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRing_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRing_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRing_edge__edge3;
                                                        prev__candidate_BenzolRing_edge__edge3 = candidate_BenzolRing_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRing_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target BenzolRing_node_c5 from BenzolRing_edge__edge3 
                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c5 = candidate_BenzolRing_edge__edge3.lgspTarget;
                                                        if(candidate_BenzolRing_node_c5.lgspType.TypeID!=1) {
                                                            candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRing_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRing_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                        {
                                                            candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRing_node_c5;
                                                        prev__candidate_BenzolRing_node_c5 = candidate_BenzolRing_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRing_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing BenzolRing_edge__edge4 from BenzolRing_node_c5 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge4 = candidate_BenzolRing_node_c5.lgspOuthead;
                                                        if(head_candidate_BenzolRing_edge__edge4 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge4 = head_candidate_BenzolRing_edge__edge4;
                                                            do
                                                            {
                                                                if(candidate_BenzolRing_edge__edge4.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRing_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRing_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRing_edge__edge4;
                                                                prev__candidate_BenzolRing_edge__edge4 = candidate_BenzolRing_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRing_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target BenzolRing_node_c6 from BenzolRing_edge__edge4 
                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRing_node_c6 = candidate_BenzolRing_edge__edge4.lgspTarget;
                                                                if(candidate_BenzolRing_node_c6.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRing_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRing_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                {
                                                                    candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                                    continue;
                                                                }
                                                                // Extend Outgoing BenzolRing_edge__edge8 from BenzolRing_node_c5 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge8 = candidate_BenzolRing_node_c5.lgspOuthead;
                                                                if(head_candidate_BenzolRing_edge__edge8 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge8 = head_candidate_BenzolRing_edge__edge8;
                                                                    do
                                                                    {
                                                                        if(candidate_BenzolRing_edge__edge8.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if(candidate_BenzolRing_edge__edge8.lgspTarget != candidate_BenzolRing_node_c6) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRing_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRing_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRing_edge__edge8;
                                                                        prev__candidate_BenzolRing_edge__edge8 = candidate_BenzolRing_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRing_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing BenzolRing_edge__edge5 from BenzolRing_node_c6 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRing_edge__edge5 = candidate_BenzolRing_node_c6.lgspOuthead;
                                                                        if(head_candidate_BenzolRing_edge__edge5 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRing_edge__edge5 = head_candidate_BenzolRing_edge__edge5;
                                                                            do
                                                                            {
                                                                                if(candidate_BenzolRing_edge__edge5.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if(candidate_BenzolRing_edge__edge5.lgspTarget != candidate_BenzolRing_node_c1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_BenzolRing_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_BenzolRing_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                // Check whether there are subpattern matching tasks left to execute
                                                                                if(openTasks.Count==0)
                                                                                {
                                                                                    Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                                                    foundPartialMatches.Add(currentFoundPartialMatch);
                                                                                    Pattern_BenzolRing.Match_BenzolRing match = new Pattern_BenzolRing.Match_BenzolRing();
                                                                                    match._node_c1 = candidate_BenzolRing_node_c1;
                                                                                    match._node_c2 = candidate_BenzolRing_node_c2;
                                                                                    match._node_c3 = candidate_BenzolRing_node_c3;
                                                                                    match._node_c4 = candidate_BenzolRing_node_c4;
                                                                                    match._node_c5 = candidate_BenzolRing_node_c5;
                                                                                    match._node_c6 = candidate_BenzolRing_node_c6;
                                                                                    match._edge__edge0 = candidate_BenzolRing_edge__edge0;
                                                                                    match._edge__edge1 = candidate_BenzolRing_edge__edge1;
                                                                                    match._edge__edge2 = candidate_BenzolRing_edge__edge2;
                                                                                    match._edge__edge3 = candidate_BenzolRing_edge__edge3;
                                                                                    match._edge__edge4 = candidate_BenzolRing_edge__edge4;
                                                                                    match._edge__edge5 = candidate_BenzolRing_edge__edge5;
                                                                                    match._edge__edge6 = candidate_BenzolRing_edge__edge6;
                                                                                    match._edge__edge7 = candidate_BenzolRing_edge__edge7;
                                                                                    match._edge__edge8 = candidate_BenzolRing_edge__edge8;
                                                                                    currentFoundPartialMatch.Push(match);
                                                                                    // if enough matches were found, we leave
                                                                                    if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                    {
                                                                                        candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge8;
                                                                                        candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                                                        candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c5;
                                                                                        candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                                                        candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge7;
                                                                                        candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c4;
                                                                                        candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                                                                        candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c3;
                                                                                        candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                                                                                        candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge6;
                                                                                        candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c2;
                                                                                        candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                                                                                        candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                                                                                        openTasks.Push(this);
                                                                                        return;
                                                                                    }
                                                                                    continue;
                                                                                }
                                                                                uint prevGlobal__candidate_BenzolRing_node_c1;
                                                                                prevGlobal__candidate_BenzolRing_node_c1 = candidate_BenzolRing_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_node_c2;
                                                                                prevGlobal__candidate_BenzolRing_node_c2 = candidate_BenzolRing_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_node_c3;
                                                                                prevGlobal__candidate_BenzolRing_node_c3 = candidate_BenzolRing_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_node_c4;
                                                                                prevGlobal__candidate_BenzolRing_node_c4 = candidate_BenzolRing_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_node_c5;
                                                                                prevGlobal__candidate_BenzolRing_node_c5 = candidate_BenzolRing_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_node_c6;
                                                                                prevGlobal__candidate_BenzolRing_node_c6 = candidate_BenzolRing_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_node_c6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge0;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge0 = candidate_BenzolRing_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge1;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge1 = candidate_BenzolRing_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge2;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge2 = candidate_BenzolRing_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge3;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge3 = candidate_BenzolRing_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge4;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge4 = candidate_BenzolRing_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge5;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge5 = candidate_BenzolRing_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge6;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge6 = candidate_BenzolRing_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge7;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge7 = candidate_BenzolRing_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRing_edge__edge8;
                                                                                prevGlobal__candidate_BenzolRing_edge__edge8 = candidate_BenzolRing_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRing_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                // Match subpatterns 
                                                                                openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                // Check whether subpatterns were found 
                                                                                if(matchesList.Count>0) {
                                                                                    // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                                    foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                    {
                                                                                        Pattern_BenzolRing.Match_BenzolRing match = new Pattern_BenzolRing.Match_BenzolRing();
                                                                                        match._node_c1 = candidate_BenzolRing_node_c1;
                                                                                        match._node_c2 = candidate_BenzolRing_node_c2;
                                                                                        match._node_c3 = candidate_BenzolRing_node_c3;
                                                                                        match._node_c4 = candidate_BenzolRing_node_c4;
                                                                                        match._node_c5 = candidate_BenzolRing_node_c5;
                                                                                        match._node_c6 = candidate_BenzolRing_node_c6;
                                                                                        match._edge__edge0 = candidate_BenzolRing_edge__edge0;
                                                                                        match._edge__edge1 = candidate_BenzolRing_edge__edge1;
                                                                                        match._edge__edge2 = candidate_BenzolRing_edge__edge2;
                                                                                        match._edge__edge3 = candidate_BenzolRing_edge__edge3;
                                                                                        match._edge__edge4 = candidate_BenzolRing_edge__edge4;
                                                                                        match._edge__edge5 = candidate_BenzolRing_edge__edge5;
                                                                                        match._edge__edge6 = candidate_BenzolRing_edge__edge6;
                                                                                        match._edge__edge7 = candidate_BenzolRing_edge__edge7;
                                                                                        match._edge__edge8 = candidate_BenzolRing_edge__edge8;
                                                                                        currentFoundPartialMatch.Push(match);
                                                                                    }
                                                                                    if(matchesList==foundPartialMatches) {
                                                                                        matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                                    } else {
                                                                                        foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                                            foundPartialMatches.Add(match);
                                                                                        }
                                                                                        matchesList.Clear();
                                                                                    }
                                                                                    // if enough matches were found, we leave
                                                                                    if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                    {
                                                                                        candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge8;
                                                                                        candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge7;
                                                                                        candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge6;
                                                                                        candidate_BenzolRing_edge__edge5.lgspFlags = candidate_BenzolRing_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge5;
                                                                                        candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge4;
                                                                                        candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge3;
                                                                                        candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge2;
                                                                                        candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge1;
                                                                                        candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge0;
                                                                                        candidate_BenzolRing_node_c6.lgspFlags = candidate_BenzolRing_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c6;
                                                                                        candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c5;
                                                                                        candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c4;
                                                                                        candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c3;
                                                                                        candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c2;
                                                                                        candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c1;
                                                                                        candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge8;
                                                                                        candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                                                        candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c5;
                                                                                        candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                                                        candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge7;
                                                                                        candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c4;
                                                                                        candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                                                                        candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c3;
                                                                                        candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                                                                                        candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge6;
                                                                                        candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c2;
                                                                                        candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                                                                                        candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
                                                                                        openTasks.Push(this);
                                                                                        return;
                                                                                    }
                                                                                    candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge8;
                                                                                    candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge7;
                                                                                    candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge6;
                                                                                    candidate_BenzolRing_edge__edge5.lgspFlags = candidate_BenzolRing_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge5;
                                                                                    candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge4;
                                                                                    candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge3;
                                                                                    candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge2;
                                                                                    candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge1;
                                                                                    candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge0;
                                                                                    candidate_BenzolRing_node_c6.lgspFlags = candidate_BenzolRing_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c6;
                                                                                    candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c5;
                                                                                    candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c4;
                                                                                    candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c3;
                                                                                    candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c2;
                                                                                    candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c1;
                                                                                    continue;
                                                                                }
                                                                                candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c1;
                                                                                candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c2;
                                                                                candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c3;
                                                                                candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c4;
                                                                                candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c5;
                                                                                candidate_BenzolRing_node_c6.lgspFlags = candidate_BenzolRing_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_node_c6;
                                                                                candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge0;
                                                                                candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge1;
                                                                                candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge2;
                                                                                candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge3;
                                                                                candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge4;
                                                                                candidate_BenzolRing_edge__edge5.lgspFlags = candidate_BenzolRing_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge5;
                                                                                candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge6;
                                                                                candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge7;
                                                                                candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRing_edge__edge8;
                                                                            }
                                                                            while( (candidate_BenzolRing_edge__edge5 = candidate_BenzolRing_edge__edge5.lgspOutNext) != head_candidate_BenzolRing_edge__edge5 );
                                                                        }
                                                                        candidate_BenzolRing_edge__edge8.lgspFlags = candidate_BenzolRing_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge8;
                                                                    }
                                                                    while( (candidate_BenzolRing_edge__edge8 = candidate_BenzolRing_edge__edge8.lgspOutNext) != head_candidate_BenzolRing_edge__edge8 );
                                                                }
                                                                candidate_BenzolRing_edge__edge4.lgspFlags = candidate_BenzolRing_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge4;
                                                            }
                                                            while( (candidate_BenzolRing_edge__edge4 = candidate_BenzolRing_edge__edge4.lgspOutNext) != head_candidate_BenzolRing_edge__edge4 );
                                                        }
                                                        candidate_BenzolRing_node_c5.lgspFlags = candidate_BenzolRing_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c5;
                                                        candidate_BenzolRing_edge__edge3.lgspFlags = candidate_BenzolRing_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge3;
                                                    }
                                                    while( (candidate_BenzolRing_edge__edge3 = candidate_BenzolRing_edge__edge3.lgspOutNext) != head_candidate_BenzolRing_edge__edge3 );
                                                }
                                                candidate_BenzolRing_edge__edge7.lgspFlags = candidate_BenzolRing_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge7;
                                            }
                                            while( (candidate_BenzolRing_edge__edge7 = candidate_BenzolRing_edge__edge7.lgspOutNext) != head_candidate_BenzolRing_edge__edge7 );
                                        }
                                        candidate_BenzolRing_node_c4.lgspFlags = candidate_BenzolRing_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c4;
                                        candidate_BenzolRing_edge__edge2.lgspFlags = candidate_BenzolRing_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge2;
                                    }
                                    while( (candidate_BenzolRing_edge__edge2 = candidate_BenzolRing_edge__edge2.lgspOutNext) != head_candidate_BenzolRing_edge__edge2 );
                                }
                                candidate_BenzolRing_node_c3.lgspFlags = candidate_BenzolRing_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c3;
                                candidate_BenzolRing_edge__edge1.lgspFlags = candidate_BenzolRing_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge1;
                            }
                            while( (candidate_BenzolRing_edge__edge1 = candidate_BenzolRing_edge__edge1.lgspOutNext) != head_candidate_BenzolRing_edge__edge1 );
                        }
                        candidate_BenzolRing_edge__edge6.lgspFlags = candidate_BenzolRing_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge6;
                    }
                    while( (candidate_BenzolRing_edge__edge6 = candidate_BenzolRing_edge__edge6.lgspOutNext) != head_candidate_BenzolRing_edge__edge6 );
                }
                candidate_BenzolRing_node_c2.lgspFlags = candidate_BenzolRing_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c2;
                candidate_BenzolRing_node_c1.lgspFlags = candidate_BenzolRing_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_node_c1;
                candidate_BenzolRing_edge__edge0.lgspFlags = candidate_BenzolRing_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRing_edge__edge0;
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_BenzolRingC123456Exposed : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_BenzolRingC123456Exposed(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_BenzolRingC123456Exposed.Instance.patternGraph;
        }

        public static PatternAction_BenzolRingC123456Exposed getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_BenzolRingC123456Exposed newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_BenzolRingC123456Exposed(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_BenzolRingC123456Exposed oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_BenzolRingC123456Exposed freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_BenzolRingC123456Exposed next = null;

        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c1;
        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c2;
        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c3;
        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c4;
        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c5;
        public GRGEN_LGSP.LGSPNode BenzolRingC123456Exposed_node_c6;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset BenzolRingC123456Exposed_node_c1 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c1 = BenzolRingC123456Exposed_node_c1;
            // SubPreset BenzolRingC123456Exposed_node_c2 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c2 = BenzolRingC123456Exposed_node_c2;
            // SubPreset BenzolRingC123456Exposed_node_c3 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c3 = BenzolRingC123456Exposed_node_c3;
            // SubPreset BenzolRingC123456Exposed_node_c4 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c4 = BenzolRingC123456Exposed_node_c4;
            // SubPreset BenzolRingC123456Exposed_node_c5 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c5 = BenzolRingC123456Exposed_node_c5;
            // SubPreset BenzolRingC123456Exposed_node_c6 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c6 = BenzolRingC123456Exposed_node_c6;
            // Extend Outgoing BenzolRingC123456Exposed_edge__edge0 from BenzolRingC123456Exposed_node_c1 
            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge0 = candidate_BenzolRingC123456Exposed_node_c1.lgspOuthead;
            if(head_candidate_BenzolRingC123456Exposed_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge0 = head_candidate_BenzolRingC123456Exposed_edge__edge0;
                do
                {
                    if(candidate_BenzolRingC123456Exposed_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if(candidate_BenzolRingC123456Exposed_edge__edge0.lgspTarget != candidate_BenzolRingC123456Exposed_node_c2) {
                        continue;
                    }
                    if((candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_BenzolRingC123456Exposed_edge__edge0;
                    prev__candidate_BenzolRingC123456Exposed_edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Extend Outgoing BenzolRingC123456Exposed_edge__edge6 from BenzolRingC123456Exposed_node_c1 
                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge6 = candidate_BenzolRingC123456Exposed_node_c1.lgspOuthead;
                    if(head_candidate_BenzolRingC123456Exposed_edge__edge6 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge6 = head_candidate_BenzolRingC123456Exposed_edge__edge6;
                        do
                        {
                            if(candidate_BenzolRingC123456Exposed_edge__edge6.lgspType.TypeID!=1) {
                                continue;
                            }
                            if(candidate_BenzolRingC123456Exposed_edge__edge6.lgspTarget != candidate_BenzolRingC123456Exposed_node_c2) {
                                continue;
                            }
                            if((candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_BenzolRingC123456Exposed_edge__edge6;
                            prev__candidate_BenzolRingC123456Exposed_edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing BenzolRingC123456Exposed_edge__edge1 from BenzolRingC123456Exposed_node_c2 
                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge1 = candidate_BenzolRingC123456Exposed_node_c2.lgspOuthead;
                            if(head_candidate_BenzolRingC123456Exposed_edge__edge1 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge1 = head_candidate_BenzolRingC123456Exposed_edge__edge1;
                                do
                                {
                                    if(candidate_BenzolRingC123456Exposed_edge__edge1.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if(candidate_BenzolRingC123456Exposed_edge__edge1.lgspTarget != candidate_BenzolRingC123456Exposed_node_c3) {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_BenzolRingC123456Exposed_edge__edge1;
                                    prev__candidate_BenzolRingC123456Exposed_edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Extend Outgoing BenzolRingC123456Exposed_edge__edge2 from BenzolRingC123456Exposed_node_c3 
                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge2 = candidate_BenzolRingC123456Exposed_node_c3.lgspOuthead;
                                    if(head_candidate_BenzolRingC123456Exposed_edge__edge2 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge2 = head_candidate_BenzolRingC123456Exposed_edge__edge2;
                                        do
                                        {
                                            if(candidate_BenzolRingC123456Exposed_edge__edge2.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if(candidate_BenzolRingC123456Exposed_edge__edge2.lgspTarget != candidate_BenzolRingC123456Exposed_node_c4) {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            uint prev__candidate_BenzolRingC123456Exposed_edge__edge2;
                                            prev__candidate_BenzolRingC123456Exposed_edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Extend Outgoing BenzolRingC123456Exposed_edge__edge7 from BenzolRingC123456Exposed_node_c3 
                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge7 = candidate_BenzolRingC123456Exposed_node_c3.lgspOuthead;
                                            if(head_candidate_BenzolRingC123456Exposed_edge__edge7 != null)
                                            {
                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge7 = head_candidate_BenzolRingC123456Exposed_edge__edge7;
                                                do
                                                {
                                                    if(candidate_BenzolRingC123456Exposed_edge__edge7.lgspType.TypeID!=1) {
                                                        continue;
                                                    }
                                                    if(candidate_BenzolRingC123456Exposed_edge__edge7.lgspTarget != candidate_BenzolRingC123456Exposed_node_c4) {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        continue;
                                                    }
                                                    uint prev__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                    prev__candidate_BenzolRingC123456Exposed_edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Extend Outgoing BenzolRingC123456Exposed_edge__edge3 from BenzolRingC123456Exposed_node_c4 
                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge3 = candidate_BenzolRingC123456Exposed_node_c4.lgspOuthead;
                                                    if(head_candidate_BenzolRingC123456Exposed_edge__edge3 != null)
                                                    {
                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge3 = head_candidate_BenzolRingC123456Exposed_edge__edge3;
                                                        do
                                                        {
                                                            if(candidate_BenzolRingC123456Exposed_edge__edge3.lgspType.TypeID!=1) {
                                                                continue;
                                                            }
                                                            if(candidate_BenzolRingC123456Exposed_edge__edge3.lgspTarget != candidate_BenzolRingC123456Exposed_node_c5) {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            uint prev__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                            prev__candidate_BenzolRingC123456Exposed_edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Extend Outgoing BenzolRingC123456Exposed_edge__edge4 from BenzolRingC123456Exposed_node_c5 
                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge4 = candidate_BenzolRingC123456Exposed_node_c5.lgspOuthead;
                                                            if(head_candidate_BenzolRingC123456Exposed_edge__edge4 != null)
                                                            {
                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge4 = head_candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                do
                                                                {
                                                                    if(candidate_BenzolRingC123456Exposed_edge__edge4.lgspType.TypeID!=1) {
                                                                        continue;
                                                                    }
                                                                    if(candidate_BenzolRingC123456Exposed_edge__edge4.lgspTarget != candidate_BenzolRingC123456Exposed_node_c6) {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    uint prev__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                    prev__candidate_BenzolRingC123456Exposed_edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    // Extend Outgoing BenzolRingC123456Exposed_edge__edge8 from BenzolRingC123456Exposed_node_c5 
                                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge8 = candidate_BenzolRingC123456Exposed_node_c5.lgspOuthead;
                                                                    if(head_candidate_BenzolRingC123456Exposed_edge__edge8 != null)
                                                                    {
                                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge8 = head_candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                        do
                                                                        {
                                                                            if(candidate_BenzolRingC123456Exposed_edge__edge8.lgspType.TypeID!=1) {
                                                                                continue;
                                                                            }
                                                                            if(candidate_BenzolRingC123456Exposed_edge__edge8.lgspTarget != candidate_BenzolRingC123456Exposed_node_c6) {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            uint prev__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                            prev__candidate_BenzolRingC123456Exposed_edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            // Extend Outgoing BenzolRingC123456Exposed_edge__edge5 from BenzolRingC123456Exposed_node_c6 
                                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge5 = candidate_BenzolRingC123456Exposed_node_c6.lgspOuthead;
                                                                            if(head_candidate_BenzolRingC123456Exposed_edge__edge5 != null)
                                                                            {
                                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge5 = head_candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                do
                                                                                {
                                                                                    if(candidate_BenzolRingC123456Exposed_edge__edge5.lgspType.TypeID!=1) {
                                                                                        continue;
                                                                                    }
                                                                                    if(candidate_BenzolRingC123456Exposed_edge__edge5.lgspTarget != candidate_BenzolRingC123456Exposed_node_c1) {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    // Check whether there are subpattern matching tasks left to execute
                                                                                    if(openTasks.Count==0)
                                                                                    {
                                                                                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                                                        foundPartialMatches.Add(currentFoundPartialMatch);
                                                                                        Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed match = new Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed();
                                                                                        match._node_c1 = candidate_BenzolRingC123456Exposed_node_c1;
                                                                                        match._node_c2 = candidate_BenzolRingC123456Exposed_node_c2;
                                                                                        match._node_c3 = candidate_BenzolRingC123456Exposed_node_c3;
                                                                                        match._node_c4 = candidate_BenzolRingC123456Exposed_node_c4;
                                                                                        match._node_c5 = candidate_BenzolRingC123456Exposed_node_c5;
                                                                                        match._node_c6 = candidate_BenzolRingC123456Exposed_node_c6;
                                                                                        match._edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                        match._edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                        match._edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                        match._edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                        match._edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                        match._edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                        match._edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                        match._edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                        match._edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                        currentFoundPartialMatch.Push(match);
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        continue;
                                                                                    }
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                    prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    // Match subpatterns 
                                                                                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                    // Check whether subpatterns were found 
                                                                                    if(matchesList.Count>0) {
                                                                                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                        {
                                                                                            Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed match = new Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed();
                                                                                            match._node_c1 = candidate_BenzolRingC123456Exposed_node_c1;
                                                                                            match._node_c2 = candidate_BenzolRingC123456Exposed_node_c2;
                                                                                            match._node_c3 = candidate_BenzolRingC123456Exposed_node_c3;
                                                                                            match._node_c4 = candidate_BenzolRingC123456Exposed_node_c4;
                                                                                            match._node_c5 = candidate_BenzolRingC123456Exposed_node_c5;
                                                                                            match._node_c6 = candidate_BenzolRingC123456Exposed_node_c6;
                                                                                            match._edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                            match._edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                            match._edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                            match._edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                            match._edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                            match._edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                            match._edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                            match._edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                            match._edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                            currentFoundPartialMatch.Push(match);
                                                                                        }
                                                                                        if(matchesList==foundPartialMatches) {
                                                                                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                                        } else {
                                                                                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                                                foundPartialMatches.Add(match);
                                                                                            }
                                                                                            matchesList.Clear();
                                                                                        }
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                        continue;
                                                                                    }
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                                }
                                                                                while( (candidate_BenzolRingC123456Exposed_edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge5 );
                                                                            }
                                                                            candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8;
                                                                        }
                                                                        while( (candidate_BenzolRingC123456Exposed_edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge8 );
                                                                    }
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4;
                                                                }
                                                                while( (candidate_BenzolRingC123456Exposed_edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge4 );
                                                            }
                                                            candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3;
                                                        }
                                                        while( (candidate_BenzolRingC123456Exposed_edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge3 );
                                                    }
                                                    candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7;
                                                }
                                                while( (candidate_BenzolRingC123456Exposed_edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge7 );
                                            }
                                            candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2;
                                        }
                                        while( (candidate_BenzolRingC123456Exposed_edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge2 );
                                    }
                                    candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1;
                                }
                                while( (candidate_BenzolRingC123456Exposed_edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge1 );
                            }
                            candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6;
                        }
                        while( (candidate_BenzolRingC123456Exposed_edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge6 );
                    }
                    candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0;
                }
                while( (candidate_BenzolRingC123456Exposed_edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_BenzolRingC1Exposed : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_BenzolRingC1Exposed(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_BenzolRingC1Exposed.Instance.patternGraph;
        }

        public static PatternAction_BenzolRingC1Exposed getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_BenzolRingC1Exposed newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_BenzolRingC1Exposed(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_BenzolRingC1Exposed oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_BenzolRingC1Exposed freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_BenzolRingC1Exposed next = null;

        public GRGEN_LGSP.LGSPNode BenzolRingC1Exposed_node_c1;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset BenzolRingC1Exposed_node_c1 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c1 = BenzolRingC1Exposed_node_c1;
            // Extend Outgoing BenzolRingC1Exposed_edge__edge0 from BenzolRingC1Exposed_node_c1 
            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge0 = candidate_BenzolRingC1Exposed_node_c1.lgspOuthead;
            if(head_candidate_BenzolRingC1Exposed_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge0 = head_candidate_BenzolRingC1Exposed_edge__edge0;
                do
                {
                    if(candidate_BenzolRingC1Exposed_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_BenzolRingC1Exposed_edge__edge0;
                    prev__candidate_BenzolRingC1Exposed_edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target BenzolRingC1Exposed_node_c2 from BenzolRingC1Exposed_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c2 = candidate_BenzolRingC1Exposed_edge__edge0.lgspTarget;
                    if(candidate_BenzolRingC1Exposed_node_c2.lgspType.TypeID!=1) {
                        candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                        continue;
                    }
                    if((candidate_BenzolRingC1Exposed_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                    {
                        candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                        continue;
                    }
                    if((candidate_BenzolRingC1Exposed_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                        continue;
                    }
                    uint prev__candidate_BenzolRingC1Exposed_node_c2;
                    prev__candidate_BenzolRingC1Exposed_node_c2 = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_BenzolRingC1Exposed_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Extend Outgoing BenzolRingC1Exposed_edge__edge6 from BenzolRingC1Exposed_node_c1 
                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge6 = candidate_BenzolRingC1Exposed_node_c1.lgspOuthead;
                    if(head_candidate_BenzolRingC1Exposed_edge__edge6 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge6 = head_candidate_BenzolRingC1Exposed_edge__edge6;
                        do
                        {
                            if(candidate_BenzolRingC1Exposed_edge__edge6.lgspType.TypeID!=1) {
                                continue;
                            }
                            if(candidate_BenzolRingC1Exposed_edge__edge6.lgspTarget != candidate_BenzolRingC1Exposed_node_c2) {
                                continue;
                            }
                            if((candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_BenzolRingC1Exposed_edge__edge6;
                            prev__candidate_BenzolRingC1Exposed_edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing BenzolRingC1Exposed_edge__edge1 from BenzolRingC1Exposed_node_c2 
                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge1 = candidate_BenzolRingC1Exposed_node_c2.lgspOuthead;
                            if(head_candidate_BenzolRingC1Exposed_edge__edge1 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge1 = head_candidate_BenzolRingC1Exposed_edge__edge1;
                                do
                                {
                                    if(candidate_BenzolRingC1Exposed_edge__edge1.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                    prev__candidate_BenzolRingC1Exposed_edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Implicit Target BenzolRingC1Exposed_node_c3 from BenzolRingC1Exposed_edge__edge1 
                                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c3 = candidate_BenzolRingC1Exposed_edge__edge1.lgspTarget;
                                    if(candidate_BenzolRingC1Exposed_node_c3.lgspType.TypeID!=1) {
                                        candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1Exposed_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1Exposed_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                        continue;
                                    }
                                    uint prev__candidate_BenzolRingC1Exposed_node_c3;
                                    prev__candidate_BenzolRingC1Exposed_node_c3 = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_BenzolRingC1Exposed_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Extend Outgoing BenzolRingC1Exposed_edge__edge2 from BenzolRingC1Exposed_node_c3 
                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge2 = candidate_BenzolRingC1Exposed_node_c3.lgspOuthead;
                                    if(head_candidate_BenzolRingC1Exposed_edge__edge2 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge2 = head_candidate_BenzolRingC1Exposed_edge__edge2;
                                        do
                                        {
                                            if(candidate_BenzolRingC1Exposed_edge__edge2.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            uint prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                            prev__candidate_BenzolRingC1Exposed_edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Implicit Target BenzolRingC1Exposed_node_c4 from BenzolRingC1Exposed_edge__edge2 
                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c4 = candidate_BenzolRingC1Exposed_edge__edge2.lgspTarget;
                                            if(candidate_BenzolRingC1Exposed_node_c4.lgspType.TypeID!=1) {
                                                candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1Exposed_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1Exposed_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                                continue;
                                            }
                                            uint prev__candidate_BenzolRingC1Exposed_node_c4;
                                            prev__candidate_BenzolRingC1Exposed_node_c4 = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_BenzolRingC1Exposed_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Extend Outgoing BenzolRingC1Exposed_edge__edge7 from BenzolRingC1Exposed_node_c3 
                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge7 = candidate_BenzolRingC1Exposed_node_c3.lgspOuthead;
                                            if(head_candidate_BenzolRingC1Exposed_edge__edge7 != null)
                                            {
                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge7 = head_candidate_BenzolRingC1Exposed_edge__edge7;
                                                do
                                                {
                                                    if(candidate_BenzolRingC1Exposed_edge__edge7.lgspType.TypeID!=1) {
                                                        continue;
                                                    }
                                                    if(candidate_BenzolRingC1Exposed_edge__edge7.lgspTarget != candidate_BenzolRingC1Exposed_node_c4) {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        continue;
                                                    }
                                                    uint prev__candidate_BenzolRingC1Exposed_edge__edge7;
                                                    prev__candidate_BenzolRingC1Exposed_edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Extend Outgoing BenzolRingC1Exposed_edge__edge3 from BenzolRingC1Exposed_node_c4 
                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge3 = candidate_BenzolRingC1Exposed_node_c4.lgspOuthead;
                                                    if(head_candidate_BenzolRingC1Exposed_edge__edge3 != null)
                                                    {
                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge3 = head_candidate_BenzolRingC1Exposed_edge__edge3;
                                                        do
                                                        {
                                                            if(candidate_BenzolRingC1Exposed_edge__edge3.lgspType.TypeID!=1) {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            uint prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                            prev__candidate_BenzolRingC1Exposed_edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Implicit Target BenzolRingC1Exposed_node_c5 from BenzolRingC1Exposed_edge__edge3 
                                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c5 = candidate_BenzolRingC1Exposed_edge__edge3.lgspTarget;
                                                            if(candidate_BenzolRingC1Exposed_node_c5.lgspType.TypeID!=1) {
                                                                candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1Exposed_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1Exposed_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                continue;
                                                            }
                                                            uint prev__candidate_BenzolRingC1Exposed_node_c5;
                                                            prev__candidate_BenzolRingC1Exposed_node_c5 = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_BenzolRingC1Exposed_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Extend Outgoing BenzolRingC1Exposed_edge__edge4 from BenzolRingC1Exposed_node_c5 
                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge4 = candidate_BenzolRingC1Exposed_node_c5.lgspOuthead;
                                                            if(head_candidate_BenzolRingC1Exposed_edge__edge4 != null)
                                                            {
                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge4 = head_candidate_BenzolRingC1Exposed_edge__edge4;
                                                                do
                                                                {
                                                                    if(candidate_BenzolRingC1Exposed_edge__edge4.lgspType.TypeID!=1) {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    uint prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                    prev__candidate_BenzolRingC1Exposed_edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    // Implicit Target BenzolRingC1Exposed_node_c6 from BenzolRingC1Exposed_edge__edge4 
                                                                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c6 = candidate_BenzolRingC1Exposed_edge__edge4.lgspTarget;
                                                                    if(candidate_BenzolRingC1Exposed_node_c6.lgspType.TypeID!=1) {
                                                                        candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1Exposed_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1Exposed_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    // Extend Outgoing BenzolRingC1Exposed_edge__edge8 from BenzolRingC1Exposed_node_c5 
                                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge8 = candidate_BenzolRingC1Exposed_node_c5.lgspOuthead;
                                                                    if(head_candidate_BenzolRingC1Exposed_edge__edge8 != null)
                                                                    {
                                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge8 = head_candidate_BenzolRingC1Exposed_edge__edge8;
                                                                        do
                                                                        {
                                                                            if(candidate_BenzolRingC1Exposed_edge__edge8.lgspType.TypeID!=1) {
                                                                                continue;
                                                                            }
                                                                            if(candidate_BenzolRingC1Exposed_edge__edge8.lgspTarget != candidate_BenzolRingC1Exposed_node_c6) {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            uint prev__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                            prev__candidate_BenzolRingC1Exposed_edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            // Extend Outgoing BenzolRingC1Exposed_edge__edge5 from BenzolRingC1Exposed_node_c6 
                                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge5 = candidate_BenzolRingC1Exposed_node_c6.lgspOuthead;
                                                                            if(head_candidate_BenzolRingC1Exposed_edge__edge5 != null)
                                                                            {
                                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge5 = head_candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                do
                                                                                {
                                                                                    if(candidate_BenzolRingC1Exposed_edge__edge5.lgspType.TypeID!=1) {
                                                                                        continue;
                                                                                    }
                                                                                    if(candidate_BenzolRingC1Exposed_edge__edge5.lgspTarget != candidate_BenzolRingC1Exposed_node_c1) {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    // Check whether there are subpattern matching tasks left to execute
                                                                                    if(openTasks.Count==0)
                                                                                    {
                                                                                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                                                        foundPartialMatches.Add(currentFoundPartialMatch);
                                                                                        Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed match = new Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed();
                                                                                        match._node_c1 = candidate_BenzolRingC1Exposed_node_c1;
                                                                                        match._node_c2 = candidate_BenzolRingC1Exposed_node_c2;
                                                                                        match._node_c3 = candidate_BenzolRingC1Exposed_node_c3;
                                                                                        match._node_c4 = candidate_BenzolRingC1Exposed_node_c4;
                                                                                        match._node_c5 = candidate_BenzolRingC1Exposed_node_c5;
                                                                                        match._node_c6 = candidate_BenzolRingC1Exposed_node_c6;
                                                                                        match._edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                        match._edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                        match._edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                        match._edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                        match._edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                        match._edge__edge5 = candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                        match._edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                        match._edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                        match._edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                        currentFoundPartialMatch.Push(match);
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c5;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c4;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c3;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c2;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        continue;
                                                                                    }
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_node_c2;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_node_c2 = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_node_c3;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_node_c3 = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_node_c4;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_node_c4 = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_node_c5;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_node_c5 = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_node_c6;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_node_c6 = candidate_BenzolRingC1Exposed_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_node_c6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge5 = candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                    prevGlobal__candidate_BenzolRingC1Exposed_edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    // Match subpatterns 
                                                                                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                    // Check whether subpatterns were found 
                                                                                    if(matchesList.Count>0) {
                                                                                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                        {
                                                                                            Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed match = new Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed();
                                                                                            match._node_c1 = candidate_BenzolRingC1Exposed_node_c1;
                                                                                            match._node_c2 = candidate_BenzolRingC1Exposed_node_c2;
                                                                                            match._node_c3 = candidate_BenzolRingC1Exposed_node_c3;
                                                                                            match._node_c4 = candidate_BenzolRingC1Exposed_node_c4;
                                                                                            match._node_c5 = candidate_BenzolRingC1Exposed_node_c5;
                                                                                            match._node_c6 = candidate_BenzolRingC1Exposed_node_c6;
                                                                                            match._edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                            match._edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                            match._edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                            match._edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                            match._edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                            match._edge__edge5 = candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                            match._edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                            match._edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                            match._edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                            currentFoundPartialMatch.Push(match);
                                                                                        }
                                                                                        if(matchesList==foundPartialMatches) {
                                                                                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                                        } else {
                                                                                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                                                foundPartialMatches.Add(match);
                                                                                            }
                                                                                            matchesList.Clear();
                                                                                        }
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                            candidate_BenzolRingC1Exposed_node_c6.lgspFlags = candidate_BenzolRingC1Exposed_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c6;
                                                                                            candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c5;
                                                                                            candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c4;
                                                                                            candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c3;
                                                                                            candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c2;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                            candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c5;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                            candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c4;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                            candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c3;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                            candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c2;
                                                                                            candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                        candidate_BenzolRingC1Exposed_node_c6.lgspFlags = candidate_BenzolRingC1Exposed_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c6;
                                                                                        candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c5;
                                                                                        candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c4;
                                                                                        candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c3;
                                                                                        candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c2;
                                                                                        continue;
                                                                                    }
                                                                                    candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c2;
                                                                                    candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c3;
                                                                                    candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c4;
                                                                                    candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c5;
                                                                                    candidate_BenzolRingC1Exposed_node_c6.lgspFlags = candidate_BenzolRingC1Exposed_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_node_c6;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge0;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge1;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge2;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge3;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge5;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge6;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge7;
                                                                                    candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                                }
                                                                                while( (candidate_BenzolRingC1Exposed_edge__edge5 = candidate_BenzolRingC1Exposed_edge__edge5.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge5 );
                                                                            }
                                                                            candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge8;
                                                                        }
                                                                        while( (candidate_BenzolRingC1Exposed_edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge8 );
                                                                    }
                                                                    candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4;
                                                                }
                                                                while( (candidate_BenzolRingC1Exposed_edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge4 );
                                                            }
                                                            candidate_BenzolRingC1Exposed_node_c5.lgspFlags = candidate_BenzolRingC1Exposed_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c5;
                                                            candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3;
                                                        }
                                                        while( (candidate_BenzolRingC1Exposed_edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge3 );
                                                    }
                                                    candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge7;
                                                }
                                                while( (candidate_BenzolRingC1Exposed_edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge7 );
                                            }
                                            candidate_BenzolRingC1Exposed_node_c4.lgspFlags = candidate_BenzolRingC1Exposed_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c4;
                                            candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2;
                                        }
                                        while( (candidate_BenzolRingC1Exposed_edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge2 );
                                    }
                                    candidate_BenzolRingC1Exposed_node_c3.lgspFlags = candidate_BenzolRingC1Exposed_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c3;
                                    candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1;
                                }
                                while( (candidate_BenzolRingC1Exposed_edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge1 );
                            }
                            candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge6;
                        }
                        while( (candidate_BenzolRingC1Exposed_edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge6 );
                    }
                    candidate_BenzolRingC1Exposed_node_c2.lgspFlags = candidate_BenzolRingC1Exposed_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c2;
                    candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0;
                }
                while( (candidate_BenzolRingC1Exposed_edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_BenzolRingC1ExposedNotC6Nitro : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_BenzolRingC1ExposedNotC6Nitro(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph;
        }

        public static PatternAction_BenzolRingC1ExposedNotC6Nitro getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_BenzolRingC1ExposedNotC6Nitro newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_BenzolRingC1ExposedNotC6Nitro(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_BenzolRingC1ExposedNotC6Nitro oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_BenzolRingC1ExposedNotC6Nitro freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_BenzolRingC1ExposedNotC6Nitro next = null;

        public GRGEN_LGSP.LGSPNode BenzolRingC1ExposedNotC6Nitro_node_c1;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset BenzolRingC1ExposedNotC6Nitro_node_c1 
            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c1 = BenzolRingC1ExposedNotC6Nitro_node_c1;
            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge0 from BenzolRingC1ExposedNotC6Nitro_node_c1 
            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1.lgspOuthead;
            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                do
                {
                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c2 from BenzolRingC1ExposedNotC6Nitro_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspTarget;
                    if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspType.TypeID!=1) {
                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                        continue;
                    }
                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                    {
                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                        continue;
                    }
                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                        continue;
                    }
                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge6 from BenzolRingC1ExposedNotC6Nitro_node_c1 
                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1.lgspOuthead;
                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                        do
                        {
                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspType.TypeID!=1) {
                                continue;
                            }
                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c2) {
                                continue;
                            }
                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge1 from BenzolRingC1ExposedNotC6Nitro_node_c2 
                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspOuthead;
                            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                do
                                {
                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c3 from BenzolRingC1ExposedNotC6Nitro_edge__edge1 
                                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspTarget;
                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspType.TypeID!=1) {
                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                        continue;
                                    }
                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                        continue;
                                    }
                                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge2 from BenzolRingC1ExposedNotC6Nitro_node_c3 
                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspOuthead;
                                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                        do
                                        {
                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c4 from BenzolRingC1ExposedNotC6Nitro_edge__edge2 
                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspTarget;
                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspType.TypeID!=1) {
                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                continue;
                                            }
                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                continue;
                                            }
                                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge7 from BenzolRingC1ExposedNotC6Nitro_node_c3 
                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspOuthead;
                                            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 != null)
                                            {
                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                do
                                                {
                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspType.TypeID!=1) {
                                                        continue;
                                                    }
                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c4) {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        continue;
                                                    }
                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        continue;
                                                    }
                                                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge3 from BenzolRingC1ExposedNotC6Nitro_node_c4 
                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspOuthead;
                                                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 != null)
                                                    {
                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                        do
                                                        {
                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspType.TypeID!=1) {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c5 from BenzolRingC1ExposedNotC6Nitro_edge__edge3 
                                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspTarget;
                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspType.TypeID!=1) {
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                continue;
                                                            }
                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                continue;
                                                            }
                                                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge4 from BenzolRingC1ExposedNotC6Nitro_node_c5 
                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspOuthead;
                                                            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 != null)
                                                            {
                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                do
                                                                {
                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspType.TypeID!=1) {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                    prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c6 from BenzolRingC1ExposedNotC6Nitro_edge__edge4 
                                                                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspTarget;
                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspType.TypeID!=1) {
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                        continue;
                                                                    }
                                                                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge8 from BenzolRingC1ExposedNotC6Nitro_node_c5 
                                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspOuthead;
                                                                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 != null)
                                                                    {
                                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                        do
                                                                        {
                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspType.TypeID!=1) {
                                                                                continue;
                                                                            }
                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c6) {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                            prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge5 from BenzolRingC1ExposedNotC6Nitro_node_c6 
                                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspOuthead;
                                                                            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 != null)
                                                                            {
                                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                do
                                                                                {
                                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspType.TypeID!=1) {
                                                                                        continue;
                                                                                    }
                                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c1) {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    // NegativePattern 
                                                                                    {
                                                                                        ++isoSpace;
                                                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 from BenzolRingC1ExposedNotC6Nitro_node_c6 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspOuthead;
                                                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                                prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node_n from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 
                                                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspTarget;
                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n.lgspType.TypeID!=4) {
                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                {
                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                                    continue;
                                                                                                }
                                                                                                // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 from BenzolRingC1ExposedNotC6Nitro_neg_0_node_n 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n.lgspOuthead;
                                                                                                if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                        prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0 from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspTarget;
                                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspType.TypeID!=3) {
                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                        {
                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0;
                                                                                                        prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 from BenzolRingC1ExposedNotC6Nitro_neg_0_node_n 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n.lgspOuthead;
                                                                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1 from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.lgspTarget;
                                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1.lgspType.TypeID!=3) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // negative pattern found
                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0;
                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                                                --isoSpace;
                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                                                goto label0;
                                                                                                            }
                                                                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2 );
                                                                                                        }
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0;
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1;
                                                                                                    }
                                                                                                    while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1 );
                                                                                                }
                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0;
                                                                                            }
                                                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0 );
                                                                                        }
                                                                                        --isoSpace;
                                                                                    }
                                                                                    // Check whether there are subpattern matching tasks left to execute
                                                                                    if(openTasks.Count==0)
                                                                                    {
                                                                                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                                                        foundPartialMatches.Add(currentFoundPartialMatch);
                                                                                        Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro match = new Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro();
                                                                                        match._node_c1 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1;
                                                                                        match._node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                        match._node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                        match._node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                        match._node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                        match._node_c6 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                        match._edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                        match._edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                        match._edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                        match._edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                        match._edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                        match._edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                        match._edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                        match._edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                        match._edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                        currentFoundPartialMatch.Push(match);
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        goto label1;
                                                                                    }
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c6 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                    prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    // Match subpatterns 
                                                                                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                    // Check whether subpatterns were found 
                                                                                    if(matchesList.Count>0) {
                                                                                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                        {
                                                                                            Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro match = new Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro();
                                                                                            match._node_c1 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1;
                                                                                            match._node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                            match._node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                            match._node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                            match._node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                            match._node_c6 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                            match._edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                            match._edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                            match._edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                            match._edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                            match._edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                            match._edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                            match._edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                            match._edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                            match._edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                            currentFoundPartialMatch.Push(match);
                                                                                        }
                                                                                        if(matchesList==foundPartialMatches) {
                                                                                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                                        } else {
                                                                                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                                                foundPartialMatches.Add(match);
                                                                                            }
                                                                                            matchesList.Clear();
                                                                                        }
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                        goto label2;
                                                                                    }
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_node_c6;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
label1: ;
label2: ;
                                                                                }
                                                                                while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5 );
                                                                            }
                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8;
                                                                        }
                                                                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8 );
                                                                    }
                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4;
label0: ;
                                                                }
                                                                while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4 );
                                                            }
                                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5;
                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3;
                                                        }
                                                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3 );
                                                    }
                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7;
                                                }
                                                while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7 );
                                            }
                                            candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4;
                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2;
                                        }
                                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2 );
                                    }
                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3;
                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1;
                                }
                                while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1 );
                            }
                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6;
                        }
                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6 );
                    }
                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2;
                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0;
                }
                while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_Oxygen : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_Oxygen(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_Oxygen.Instance.patternGraph;
        }

        public static PatternAction_Oxygen getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_Oxygen newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_Oxygen(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_Oxygen oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_Oxygen freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_Oxygen next = null;

        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // Lookup Oxygen_edge__edge0 
            int type_id_candidate_Oxygen_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_Oxygen_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_Oxygen_edge__edge0], candidate_Oxygen_edge__edge0 = head_candidate_Oxygen_edge__edge0.lgspTypeNext; candidate_Oxygen_edge__edge0 != head_candidate_Oxygen_edge__edge0; candidate_Oxygen_edge__edge0 = candidate_Oxygen_edge__edge0.lgspTypeNext)
            {
                if((candidate_Oxygen_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    continue;
                }
                uint prev__candidate_Oxygen_edge__edge0;
                prev__candidate_Oxygen_edge__edge0 = candidate_Oxygen_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Oxygen_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source Oxygen_node_o1 from Oxygen_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_Oxygen_node_o1 = candidate_Oxygen_edge__edge0.lgspSource;
                if(candidate_Oxygen_node_o1.lgspType.TypeID!=3) {
                    candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                    continue;
                }
                if((candidate_Oxygen_node_o1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                    continue;
                }
                uint prev__candidate_Oxygen_node_o1;
                prev__candidate_Oxygen_node_o1 = candidate_Oxygen_node_o1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Oxygen_node_o1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target Oxygen_node_o2 from Oxygen_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_Oxygen_node_o2 = candidate_Oxygen_edge__edge0.lgspTarget;
                if(candidate_Oxygen_node_o2.lgspType.TypeID!=3) {
                    candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                    candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                    continue;
                }
                if((candidate_Oxygen_node_o2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                    candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                    continue;
                }
                if((candidate_Oxygen_node_o2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                {
                    candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                    candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                    continue;
                }
                // Extend Outgoing Oxygen_edge__edge1 from Oxygen_node_o2 
                GRGEN_LGSP.LGSPEdge head_candidate_Oxygen_edge__edge1 = candidate_Oxygen_node_o2.lgspOuthead;
                if(head_candidate_Oxygen_edge__edge1 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_Oxygen_edge__edge1 = head_candidate_Oxygen_edge__edge1;
                    do
                    {
                        if(candidate_Oxygen_edge__edge1.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_Oxygen_edge__edge1.lgspTarget != candidate_Oxygen_node_o1) {
                            continue;
                        }
                        if((candidate_Oxygen_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        if((candidate_Oxygen_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                        {
                            continue;
                        }
                        // Check whether there are subpattern matching tasks left to execute
                        if(openTasks.Count==0)
                        {
                            Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                            foundPartialMatches.Add(currentFoundPartialMatch);
                            Pattern_Oxygen.Match_Oxygen match = new Pattern_Oxygen.Match_Oxygen();
                            match._node_o1 = candidate_Oxygen_node_o1;
                            match._node_o2 = candidate_Oxygen_node_o2;
                            match._edge__edge0 = candidate_Oxygen_edge__edge0;
                            match._edge__edge1 = candidate_Oxygen_edge__edge1;
                            currentFoundPartialMatch.Push(match);
                            // if enough matches were found, we leave
                            if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                            {
                                candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                                candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                                openTasks.Push(this);
                                return;
                            }
                            continue;
                        }
                        uint prevGlobal__candidate_Oxygen_node_o1;
                        prevGlobal__candidate_Oxygen_node_o1 = candidate_Oxygen_node_o1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        candidate_Oxygen_node_o1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        uint prevGlobal__candidate_Oxygen_node_o2;
                        prevGlobal__candidate_Oxygen_node_o2 = candidate_Oxygen_node_o2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        candidate_Oxygen_node_o2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        uint prevGlobal__candidate_Oxygen_edge__edge0;
                        prevGlobal__candidate_Oxygen_edge__edge0 = candidate_Oxygen_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        candidate_Oxygen_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        uint prevGlobal__candidate_Oxygen_edge__edge1;
                        prevGlobal__candidate_Oxygen_edge__edge1 = candidate_Oxygen_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        candidate_Oxygen_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                        // Match subpatterns 
                        openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                        // Check whether subpatterns were found 
                        if(matchesList.Count>0) {
                            // subpatterns/alternatives were found, extend the partial matches by our local match object
                            foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                            {
                                Pattern_Oxygen.Match_Oxygen match = new Pattern_Oxygen.Match_Oxygen();
                                match._node_o1 = candidate_Oxygen_node_o1;
                                match._node_o2 = candidate_Oxygen_node_o2;
                                match._edge__edge0 = candidate_Oxygen_edge__edge0;
                                match._edge__edge1 = candidate_Oxygen_edge__edge1;
                                currentFoundPartialMatch.Push(match);
                            }
                            if(matchesList==foundPartialMatches) {
                                matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                            } else {
                                foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                    foundPartialMatches.Add(match);
                                }
                                matchesList.Clear();
                            }
                            // if enough matches were found, we leave
                            if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                            {
                                candidate_Oxygen_edge__edge1.lgspFlags = candidate_Oxygen_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge1;
                                candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge0;
                                candidate_Oxygen_node_o2.lgspFlags = candidate_Oxygen_node_o2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o2;
                                candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o1;
                                candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                                candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
                                openTasks.Push(this);
                                return;
                            }
                            candidate_Oxygen_edge__edge1.lgspFlags = candidate_Oxygen_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge1;
                            candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge0;
                            candidate_Oxygen_node_o2.lgspFlags = candidate_Oxygen_node_o2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o2;
                            candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o1;
                            continue;
                        }
                        candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o1;
                        candidate_Oxygen_node_o2.lgspFlags = candidate_Oxygen_node_o2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_node_o2;
                        candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge0;
                        candidate_Oxygen_edge__edge1.lgspFlags = candidate_Oxygen_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Oxygen_edge__edge1;
                    }
                    while( (candidate_Oxygen_edge__edge1 = candidate_Oxygen_edge__edge1.lgspOutNext) != head_candidate_Oxygen_edge__edge1 );
                }
                candidate_Oxygen_node_o1.lgspFlags = candidate_Oxygen_node_o1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_node_o1;
                candidate_Oxygen_edge__edge0.lgspFlags = candidate_Oxygen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Oxygen_edge__edge0;
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_Hydrogen : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_Hydrogen(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_Hydrogen.Instance.patternGraph;
        }

        public static PatternAction_Hydrogen getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_Hydrogen newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_Hydrogen(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_Hydrogen oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_Hydrogen freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_Hydrogen next = null;

        public GRGEN_LGSP.LGSPNode Hydrogen_node_anchor;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset Hydrogen_node_anchor 
            GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor = Hydrogen_node_anchor;
            // Extend Outgoing Hydrogen_edge__edge0 from Hydrogen_node_anchor 
            GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0 = candidate_Hydrogen_node_anchor.lgspOuthead;
            if(head_candidate_Hydrogen_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0 = head_candidate_Hydrogen_edge__edge0;
                do
                {
                    if(candidate_Hydrogen_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Hydrogen_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    // Implicit Target Hydrogen_node__node0 from Hydrogen_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0 = candidate_Hydrogen_edge__edge0.lgspTarget;
                    if(candidate_Hydrogen_node__node0.lgspType.TypeID!=2) {
                        continue;
                    }
                    if((candidate_Hydrogen_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    // Check whether there are subpattern matching tasks left to execute
                    if(openTasks.Count==0)
                    {
                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                        foundPartialMatches.Add(currentFoundPartialMatch);
                        Pattern_Hydrogen.Match_Hydrogen match = new Pattern_Hydrogen.Match_Hydrogen();
                        match._node_anchor = candidate_Hydrogen_node_anchor;
                        match._node__node0 = candidate_Hydrogen_node__node0;
                        match._edge__edge0 = candidate_Hydrogen_edge__edge0;
                        currentFoundPartialMatch.Push(match);
                        // if enough matches were found, we leave
                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                        {
                            openTasks.Push(this);
                            return;
                        }
                        continue;
                    }
                    uint prevGlobal__candidate_Hydrogen_node__node0;
                    prevGlobal__candidate_Hydrogen_node__node0 = candidate_Hydrogen_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                    candidate_Hydrogen_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                    uint prevGlobal__candidate_Hydrogen_edge__edge0;
                    prevGlobal__candidate_Hydrogen_edge__edge0 = candidate_Hydrogen_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                    candidate_Hydrogen_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                    // Match subpatterns 
                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                    // Check whether subpatterns were found 
                    if(matchesList.Count>0) {
                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                        {
                            Pattern_Hydrogen.Match_Hydrogen match = new Pattern_Hydrogen.Match_Hydrogen();
                            match._node_anchor = candidate_Hydrogen_node_anchor;
                            match._node__node0 = candidate_Hydrogen_node__node0;
                            match._edge__edge0 = candidate_Hydrogen_edge__edge0;
                            currentFoundPartialMatch.Push(match);
                        }
                        if(matchesList==foundPartialMatches) {
                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                        } else {
                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                foundPartialMatches.Add(match);
                            }
                            matchesList.Clear();
                        }
                        // if enough matches were found, we leave
                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                        {
                            candidate_Hydrogen_edge__edge0.lgspFlags = candidate_Hydrogen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0;
                            candidate_Hydrogen_node__node0.lgspFlags = candidate_Hydrogen_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0;
                            openTasks.Push(this);
                            return;
                        }
                        candidate_Hydrogen_edge__edge0.lgspFlags = candidate_Hydrogen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0;
                        candidate_Hydrogen_node__node0.lgspFlags = candidate_Hydrogen_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0;
                        continue;
                    }
                    candidate_Hydrogen_node__node0.lgspFlags = candidate_Hydrogen_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0;
                    candidate_Hydrogen_edge__edge0.lgspFlags = candidate_Hydrogen_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0;
                }
                while( (candidate_Hydrogen_edge__edge0 = candidate_Hydrogen_edge__edge0.lgspOutNext) != head_candidate_Hydrogen_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_Hydroxyl : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_Hydroxyl(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_Hydroxyl.Instance.patternGraph;
        }

        public static PatternAction_Hydroxyl getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_Hydroxyl newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_Hydroxyl(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_Hydroxyl oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_Hydroxyl freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_Hydroxyl next = null;

        public GRGEN_LGSP.LGSPNode Hydroxyl_node_anchor;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset Hydroxyl_node_anchor 
            GRGEN_LGSP.LGSPNode candidate_Hydroxyl_node_anchor = Hydroxyl_node_anchor;
            // Extend Outgoing Hydroxyl_edge__edge0 from Hydroxyl_node_anchor 
            GRGEN_LGSP.LGSPEdge head_candidate_Hydroxyl_edge__edge0 = candidate_Hydroxyl_node_anchor.lgspOuthead;
            if(head_candidate_Hydroxyl_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Hydroxyl_edge__edge0 = head_candidate_Hydroxyl_edge__edge0;
                do
                {
                    if(candidate_Hydroxyl_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Hydroxyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_Hydroxyl_edge__edge0;
                    prev__candidate_Hydroxyl_edge__edge0 = candidate_Hydroxyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Hydroxyl_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target Hydroxyl_node__node0 from Hydroxyl_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_Hydroxyl_node__node0 = candidate_Hydroxyl_edge__edge0.lgspTarget;
                    if(candidate_Hydroxyl_node__node0.lgspType.TypeID!=3) {
                        candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydroxyl_edge__edge0;
                        continue;
                    }
                    if((candidate_Hydroxyl_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydroxyl_edge__edge0;
                        continue;
                    }
                    // Extend Outgoing Hydroxyl_edge__edge1 from Hydroxyl_node__node0 
                    GRGEN_LGSP.LGSPEdge head_candidate_Hydroxyl_edge__edge1 = candidate_Hydroxyl_node__node0.lgspOuthead;
                    if(head_candidate_Hydroxyl_edge__edge1 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_Hydroxyl_edge__edge1 = head_candidate_Hydroxyl_edge__edge1;
                        do
                        {
                            if(candidate_Hydroxyl_edge__edge1.lgspType.TypeID!=1) {
                                continue;
                            }
                            if((candidate_Hydroxyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_Hydroxyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            // Implicit Target Hydroxyl_node__node1 from Hydroxyl_edge__edge1 
                            GRGEN_LGSP.LGSPNode candidate_Hydroxyl_node__node1 = candidate_Hydroxyl_edge__edge1.lgspTarget;
                            if(candidate_Hydroxyl_node__node1.lgspType.TypeID!=2) {
                                continue;
                            }
                            if((candidate_Hydroxyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            // Check whether there are subpattern matching tasks left to execute
                            if(openTasks.Count==0)
                            {
                                Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                foundPartialMatches.Add(currentFoundPartialMatch);
                                Pattern_Hydroxyl.Match_Hydroxyl match = new Pattern_Hydroxyl.Match_Hydroxyl();
                                match._node_anchor = candidate_Hydroxyl_node_anchor;
                                match._node__node0 = candidate_Hydroxyl_node__node0;
                                match._node__node1 = candidate_Hydroxyl_node__node1;
                                match._edge__edge0 = candidate_Hydroxyl_edge__edge0;
                                match._edge__edge1 = candidate_Hydroxyl_edge__edge1;
                                currentFoundPartialMatch.Push(match);
                                // if enough matches were found, we leave
                                if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                {
                                    candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydroxyl_edge__edge0;
                                    openTasks.Push(this);
                                    return;
                                }
                                continue;
                            }
                            uint prevGlobal__candidate_Hydroxyl_node__node0;
                            prevGlobal__candidate_Hydroxyl_node__node0 = candidate_Hydroxyl_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            candidate_Hydroxyl_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            uint prevGlobal__candidate_Hydroxyl_node__node1;
                            prevGlobal__candidate_Hydroxyl_node__node1 = candidate_Hydroxyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            candidate_Hydroxyl_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            uint prevGlobal__candidate_Hydroxyl_edge__edge0;
                            prevGlobal__candidate_Hydroxyl_edge__edge0 = candidate_Hydroxyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            candidate_Hydroxyl_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            uint prevGlobal__candidate_Hydroxyl_edge__edge1;
                            prevGlobal__candidate_Hydroxyl_edge__edge1 = candidate_Hydroxyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            candidate_Hydroxyl_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                            // Match subpatterns 
                            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                            // Check whether subpatterns were found 
                            if(matchesList.Count>0) {
                                // subpatterns/alternatives were found, extend the partial matches by our local match object
                                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                {
                                    Pattern_Hydroxyl.Match_Hydroxyl match = new Pattern_Hydroxyl.Match_Hydroxyl();
                                    match._node_anchor = candidate_Hydroxyl_node_anchor;
                                    match._node__node0 = candidate_Hydroxyl_node__node0;
                                    match._node__node1 = candidate_Hydroxyl_node__node1;
                                    match._edge__edge0 = candidate_Hydroxyl_edge__edge0;
                                    match._edge__edge1 = candidate_Hydroxyl_edge__edge1;
                                    currentFoundPartialMatch.Push(match);
                                }
                                if(matchesList==foundPartialMatches) {
                                    matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                } else {
                                    foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                        foundPartialMatches.Add(match);
                                    }
                                    matchesList.Clear();
                                }
                                // if enough matches were found, we leave
                                if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                {
                                    candidate_Hydroxyl_edge__edge1.lgspFlags = candidate_Hydroxyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge1;
                                    candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge0;
                                    candidate_Hydroxyl_node__node1.lgspFlags = candidate_Hydroxyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node1;
                                    candidate_Hydroxyl_node__node0.lgspFlags = candidate_Hydroxyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node0;
                                    candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydroxyl_edge__edge0;
                                    openTasks.Push(this);
                                    return;
                                }
                                candidate_Hydroxyl_edge__edge1.lgspFlags = candidate_Hydroxyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge1;
                                candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge0;
                                candidate_Hydroxyl_node__node1.lgspFlags = candidate_Hydroxyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node1;
                                candidate_Hydroxyl_node__node0.lgspFlags = candidate_Hydroxyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node0;
                                continue;
                            }
                            candidate_Hydroxyl_node__node0.lgspFlags = candidate_Hydroxyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node0;
                            candidate_Hydroxyl_node__node1.lgspFlags = candidate_Hydroxyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_node__node1;
                            candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge0;
                            candidate_Hydroxyl_edge__edge1.lgspFlags = candidate_Hydroxyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydroxyl_edge__edge1;
                        }
                        while( (candidate_Hydroxyl_edge__edge1 = candidate_Hydroxyl_edge__edge1.lgspOutNext) != head_candidate_Hydroxyl_edge__edge1 );
                    }
                    candidate_Hydroxyl_edge__edge0.lgspFlags = candidate_Hydroxyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydroxyl_edge__edge0;
                }
                while( (candidate_Hydroxyl_edge__edge0 = candidate_Hydroxyl_edge__edge0.lgspOutNext) != head_candidate_Hydroxyl_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_Methyl : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_Methyl(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_Methyl.Instance.patternGraph;
        }

        public static PatternAction_Methyl getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_Methyl newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_Methyl(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_Methyl oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_Methyl freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_Methyl next = null;

        public GRGEN_LGSP.LGSPNode Methyl_node_anchor;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset Methyl_node_anchor 
            GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor = Methyl_node_anchor;
            // Extend Outgoing Methyl_edge__edge0 from Methyl_node_anchor 
            GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0 = candidate_Methyl_node_anchor.lgspOuthead;
            if(head_candidate_Methyl_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0 = head_candidate_Methyl_edge__edge0;
                do
                {
                    if(candidate_Methyl_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Methyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_Methyl_edge__edge0;
                    prev__candidate_Methyl_edge__edge0 = candidate_Methyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Methyl_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target Methyl_node_c from Methyl_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_Methyl_node_c = candidate_Methyl_edge__edge0.lgspTarget;
                    if(candidate_Methyl_node_c.lgspType.TypeID!=1) {
                        candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                        continue;
                    }
                    if((candidate_Methyl_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                    {
                        candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                        continue;
                    }
                    if((candidate_Methyl_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                        continue;
                    }
                    // Extend Outgoing Methyl_edge__edge1 from Methyl_node_c 
                    GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1 = candidate_Methyl_node_c.lgspOuthead;
                    if(head_candidate_Methyl_edge__edge1 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1 = head_candidate_Methyl_edge__edge1;
                        do
                        {
                            if(candidate_Methyl_edge__edge1.lgspType.TypeID!=1) {
                                continue;
                            }
                            if((candidate_Methyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_Methyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_Methyl_edge__edge1;
                            prev__candidate_Methyl_edge__edge1 = candidate_Methyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Methyl_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Implicit Target Methyl_node__node0 from Methyl_edge__edge1 
                            GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0 = candidate_Methyl_edge__edge1.lgspTarget;
                            if(candidate_Methyl_node__node0.lgspType.TypeID!=2) {
                                candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1;
                                continue;
                            }
                            if((candidate_Methyl_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1;
                                continue;
                            }
                            uint prev__candidate_Methyl_node__node0;
                            prev__candidate_Methyl_node__node0 = candidate_Methyl_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Methyl_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing Methyl_edge__edge2 from Methyl_node_c 
                            GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2 = candidate_Methyl_node_c.lgspOuthead;
                            if(head_candidate_Methyl_edge__edge2 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2 = head_candidate_Methyl_edge__edge2;
                                do
                                {
                                    if(candidate_Methyl_edge__edge2.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_Methyl_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_Methyl_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_Methyl_edge__edge2;
                                    prev__candidate_Methyl_edge__edge2 = candidate_Methyl_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_Methyl_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Implicit Target Methyl_node__node1 from Methyl_edge__edge2 
                                    GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1 = candidate_Methyl_edge__edge2.lgspTarget;
                                    if(candidate_Methyl_node__node1.lgspType.TypeID!=2) {
                                        candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                        continue;
                                    }
                                    if((candidate_Methyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                        continue;
                                    }
                                    if((candidate_Methyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                        continue;
                                    }
                                    uint prev__candidate_Methyl_node__node1;
                                    prev__candidate_Methyl_node__node1 = candidate_Methyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_Methyl_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Extend Outgoing Methyl_edge__edge3 from Methyl_node_c 
                                    GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3 = candidate_Methyl_node_c.lgspOuthead;
                                    if(head_candidate_Methyl_edge__edge3 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3 = head_candidate_Methyl_edge__edge3;
                                        do
                                        {
                                            if(candidate_Methyl_edge__edge3.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if((candidate_Methyl_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_Methyl_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            // Implicit Target Methyl_node__node2 from Methyl_edge__edge3 
                                            GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2 = candidate_Methyl_edge__edge3.lgspTarget;
                                            if(candidate_Methyl_node__node2.lgspType.TypeID!=2) {
                                                continue;
                                            }
                                            if((candidate_Methyl_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_Methyl_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            // Check whether there are subpattern matching tasks left to execute
                                            if(openTasks.Count==0)
                                            {
                                                Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                foundPartialMatches.Add(currentFoundPartialMatch);
                                                Pattern_Methyl.Match_Methyl match = new Pattern_Methyl.Match_Methyl();
                                                match._node_anchor = candidate_Methyl_node_anchor;
                                                match._node_c = candidate_Methyl_node_c;
                                                match._node__node0 = candidate_Methyl_node__node0;
                                                match._node__node1 = candidate_Methyl_node__node1;
                                                match._node__node2 = candidate_Methyl_node__node2;
                                                match._edge__edge0 = candidate_Methyl_edge__edge0;
                                                match._edge__edge1 = candidate_Methyl_edge__edge1;
                                                match._edge__edge2 = candidate_Methyl_edge__edge2;
                                                match._edge__edge3 = candidate_Methyl_edge__edge3;
                                                currentFoundPartialMatch.Push(match);
                                                // if enough matches were found, we leave
                                                if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                {
                                                    candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1;
                                                    candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                                    candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0;
                                                    candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1;
                                                    candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                                                    openTasks.Push(this);
                                                    return;
                                                }
                                                continue;
                                            }
                                            uint prevGlobal__candidate_Methyl_node_c;
                                            prevGlobal__candidate_Methyl_node_c = candidate_Methyl_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_node_c.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_node__node0;
                                            prevGlobal__candidate_Methyl_node__node0 = candidate_Methyl_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_node__node1;
                                            prevGlobal__candidate_Methyl_node__node1 = candidate_Methyl_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_node__node2;
                                            prevGlobal__candidate_Methyl_node__node2 = candidate_Methyl_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_node__node2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_edge__edge0;
                                            prevGlobal__candidate_Methyl_edge__edge0 = candidate_Methyl_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_edge__edge1;
                                            prevGlobal__candidate_Methyl_edge__edge1 = candidate_Methyl_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_edge__edge2;
                                            prevGlobal__candidate_Methyl_edge__edge2 = candidate_Methyl_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            uint prevGlobal__candidate_Methyl_edge__edge3;
                                            prevGlobal__candidate_Methyl_edge__edge3 = candidate_Methyl_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            candidate_Methyl_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                            // Match subpatterns 
                                            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                            // Check whether subpatterns were found 
                                            if(matchesList.Count>0) {
                                                // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                {
                                                    Pattern_Methyl.Match_Methyl match = new Pattern_Methyl.Match_Methyl();
                                                    match._node_anchor = candidate_Methyl_node_anchor;
                                                    match._node_c = candidate_Methyl_node_c;
                                                    match._node__node0 = candidate_Methyl_node__node0;
                                                    match._node__node1 = candidate_Methyl_node__node1;
                                                    match._node__node2 = candidate_Methyl_node__node2;
                                                    match._edge__edge0 = candidate_Methyl_edge__edge0;
                                                    match._edge__edge1 = candidate_Methyl_edge__edge1;
                                                    match._edge__edge2 = candidate_Methyl_edge__edge2;
                                                    match._edge__edge3 = candidate_Methyl_edge__edge3;
                                                    currentFoundPartialMatch.Push(match);
                                                }
                                                if(matchesList==foundPartialMatches) {
                                                    matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                } else {
                                                    foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                        foundPartialMatches.Add(match);
                                                    }
                                                    matchesList.Clear();
                                                }
                                                // if enough matches were found, we leave
                                                if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                {
                                                    candidate_Methyl_edge__edge3.lgspFlags = candidate_Methyl_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3;
                                                    candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2;
                                                    candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1;
                                                    candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0;
                                                    candidate_Methyl_node__node2.lgspFlags = candidate_Methyl_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2;
                                                    candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1;
                                                    candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0;
                                                    candidate_Methyl_node_c.lgspFlags = candidate_Methyl_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c;
                                                    candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1;
                                                    candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                                    candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0;
                                                    candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1;
                                                    candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                                                    openTasks.Push(this);
                                                    return;
                                                }
                                                candidate_Methyl_edge__edge3.lgspFlags = candidate_Methyl_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3;
                                                candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2;
                                                candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1;
                                                candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0;
                                                candidate_Methyl_node__node2.lgspFlags = candidate_Methyl_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2;
                                                candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1;
                                                candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0;
                                                candidate_Methyl_node_c.lgspFlags = candidate_Methyl_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c;
                                                continue;
                                            }
                                            candidate_Methyl_node_c.lgspFlags = candidate_Methyl_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c;
                                            candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0;
                                            candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1;
                                            candidate_Methyl_node__node2.lgspFlags = candidate_Methyl_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2;
                                            candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0;
                                            candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1;
                                            candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2;
                                            candidate_Methyl_edge__edge3.lgspFlags = candidate_Methyl_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3;
                                        }
                                        while( (candidate_Methyl_edge__edge3 = candidate_Methyl_edge__edge3.lgspOutNext) != head_candidate_Methyl_edge__edge3 );
                                    }
                                    candidate_Methyl_node__node1.lgspFlags = candidate_Methyl_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1;
                                    candidate_Methyl_edge__edge2.lgspFlags = candidate_Methyl_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2;
                                }
                                while( (candidate_Methyl_edge__edge2 = candidate_Methyl_edge__edge2.lgspOutNext) != head_candidate_Methyl_edge__edge2 );
                            }
                            candidate_Methyl_node__node0.lgspFlags = candidate_Methyl_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0;
                            candidate_Methyl_edge__edge1.lgspFlags = candidate_Methyl_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1;
                        }
                        while( (candidate_Methyl_edge__edge1 = candidate_Methyl_edge__edge1.lgspOutNext) != head_candidate_Methyl_edge__edge1 );
                    }
                    candidate_Methyl_edge__edge0.lgspFlags = candidate_Methyl_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0;
                }
                while( (candidate_Methyl_edge__edge0 = candidate_Methyl_edge__edge0.lgspOutNext) != head_candidate_Methyl_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_Nitro : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_Nitro(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_Nitro.Instance.patternGraph;
        }

        public static PatternAction_Nitro getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_Nitro newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_Nitro(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_Nitro oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_Nitro freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_Nitro next = null;

        public GRGEN_LGSP.LGSPNode Nitro_node_anchor;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset Nitro_node_anchor 
            GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor = Nitro_node_anchor;
            // Extend Outgoing Nitro_edge__edge0 from Nitro_node_anchor 
            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0 = candidate_Nitro_node_anchor.lgspOuthead;
            if(head_candidate_Nitro_edge__edge0 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0 = head_candidate_Nitro_edge__edge0;
                do
                {
                    if(candidate_Nitro_edge__edge0.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_Nitro_edge__edge0;
                    prev__candidate_Nitro_edge__edge0 = candidate_Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Nitro_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target Nitro_node_n from Nitro_edge__edge0 
                    GRGEN_LGSP.LGSPNode candidate_Nitro_node_n = candidate_Nitro_edge__edge0.lgspTarget;
                    if(candidate_Nitro_node_n.lgspType.TypeID!=4) {
                        candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0;
                        continue;
                    }
                    if((candidate_Nitro_node_n.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0;
                        continue;
                    }
                    // Extend Outgoing Nitro_edge__edge1 from Nitro_node_n 
                    GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1 = candidate_Nitro_node_n.lgspOuthead;
                    if(head_candidate_Nitro_edge__edge1 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1 = head_candidate_Nitro_edge__edge1;
                        do
                        {
                            if(candidate_Nitro_edge__edge1.lgspType.TypeID!=1) {
                                continue;
                            }
                            if((candidate_Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_Nitro_edge__edge1;
                            prev__candidate_Nitro_edge__edge1 = candidate_Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Nitro_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Implicit Target Nitro_node__node0 from Nitro_edge__edge1 
                            GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0 = candidate_Nitro_edge__edge1.lgspTarget;
                            if(candidate_Nitro_node__node0.lgspType.TypeID!=3) {
                                candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1;
                                continue;
                            }
                            if((candidate_Nitro_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1;
                                continue;
                            }
                            uint prev__candidate_Nitro_node__node0;
                            prev__candidate_Nitro_node__node0 = candidate_Nitro_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Nitro_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing Nitro_edge__edge2 from Nitro_node_n 
                            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2 = candidate_Nitro_node_n.lgspOuthead;
                            if(head_candidate_Nitro_edge__edge2 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2 = head_candidate_Nitro_edge__edge2;
                                do
                                {
                                    if(candidate_Nitro_edge__edge2.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    // Implicit Target Nitro_node__node1 from Nitro_edge__edge2 
                                    GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1 = candidate_Nitro_edge__edge2.lgspTarget;
                                    if(candidate_Nitro_node__node1.lgspType.TypeID!=3) {
                                        continue;
                                    }
                                    if((candidate_Nitro_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_Nitro_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    // Check whether there are subpattern matching tasks left to execute
                                    if(openTasks.Count==0)
                                    {
                                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                        foundPartialMatches.Add(currentFoundPartialMatch);
                                        Pattern_Nitro.Match_Nitro match = new Pattern_Nitro.Match_Nitro();
                                        match._node_anchor = candidate_Nitro_node_anchor;
                                        match._node_n = candidate_Nitro_node_n;
                                        match._node__node0 = candidate_Nitro_node__node0;
                                        match._node__node1 = candidate_Nitro_node__node1;
                                        match._edge__edge0 = candidate_Nitro_edge__edge0;
                                        match._edge__edge1 = candidate_Nitro_edge__edge1;
                                        match._edge__edge2 = candidate_Nitro_edge__edge2;
                                        currentFoundPartialMatch.Push(match);
                                        // if enough matches were found, we leave
                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                        {
                                            candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0;
                                            candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1;
                                            candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0;
                                            openTasks.Push(this);
                                            return;
                                        }
                                        continue;
                                    }
                                    uint prevGlobal__candidate_Nitro_node_n;
                                    prevGlobal__candidate_Nitro_node_n = candidate_Nitro_node_n.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_node_n.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    uint prevGlobal__candidate_Nitro_node__node0;
                                    prevGlobal__candidate_Nitro_node__node0 = candidate_Nitro_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    uint prevGlobal__candidate_Nitro_node__node1;
                                    prevGlobal__candidate_Nitro_node__node1 = candidate_Nitro_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    uint prevGlobal__candidate_Nitro_edge__edge0;
                                    prevGlobal__candidate_Nitro_edge__edge0 = candidate_Nitro_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    uint prevGlobal__candidate_Nitro_edge__edge1;
                                    prevGlobal__candidate_Nitro_edge__edge1 = candidate_Nitro_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    uint prevGlobal__candidate_Nitro_edge__edge2;
                                    prevGlobal__candidate_Nitro_edge__edge2 = candidate_Nitro_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    candidate_Nitro_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                    // Match subpatterns 
                                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                    // Check whether subpatterns were found 
                                    if(matchesList.Count>0) {
                                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                        {
                                            Pattern_Nitro.Match_Nitro match = new Pattern_Nitro.Match_Nitro();
                                            match._node_anchor = candidate_Nitro_node_anchor;
                                            match._node_n = candidate_Nitro_node_n;
                                            match._node__node0 = candidate_Nitro_node__node0;
                                            match._node__node1 = candidate_Nitro_node__node1;
                                            match._edge__edge0 = candidate_Nitro_edge__edge0;
                                            match._edge__edge1 = candidate_Nitro_edge__edge1;
                                            match._edge__edge2 = candidate_Nitro_edge__edge2;
                                            currentFoundPartialMatch.Push(match);
                                        }
                                        if(matchesList==foundPartialMatches) {
                                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                        } else {
                                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                foundPartialMatches.Add(match);
                                            }
                                            matchesList.Clear();
                                        }
                                        // if enough matches were found, we leave
                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                        {
                                            candidate_Nitro_edge__edge2.lgspFlags = candidate_Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2;
                                            candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1;
                                            candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0;
                                            candidate_Nitro_node__node1.lgspFlags = candidate_Nitro_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1;
                                            candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0;
                                            candidate_Nitro_node_n.lgspFlags = candidate_Nitro_node_n.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n;
                                            candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0;
                                            candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1;
                                            candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0;
                                            openTasks.Push(this);
                                            return;
                                        }
                                        candidate_Nitro_edge__edge2.lgspFlags = candidate_Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2;
                                        candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1;
                                        candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0;
                                        candidate_Nitro_node__node1.lgspFlags = candidate_Nitro_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1;
                                        candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0;
                                        candidate_Nitro_node_n.lgspFlags = candidate_Nitro_node_n.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n;
                                        continue;
                                    }
                                    candidate_Nitro_node_n.lgspFlags = candidate_Nitro_node_n.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n;
                                    candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0;
                                    candidate_Nitro_node__node1.lgspFlags = candidate_Nitro_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1;
                                    candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0;
                                    candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1;
                                    candidate_Nitro_edge__edge2.lgspFlags = candidate_Nitro_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2;
                                }
                                while( (candidate_Nitro_edge__edge2 = candidate_Nitro_edge__edge2.lgspOutNext) != head_candidate_Nitro_edge__edge2 );
                            }
                            candidate_Nitro_node__node0.lgspFlags = candidate_Nitro_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0;
                            candidate_Nitro_edge__edge1.lgspFlags = candidate_Nitro_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1;
                        }
                        while( (candidate_Nitro_edge__edge1 = candidate_Nitro_edge__edge1.lgspOutNext) != head_candidate_Nitro_edge__edge1 );
                    }
                    candidate_Nitro_edge__edge0.lgspFlags = candidate_Nitro_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0;
                }
                while( (candidate_Nitro_edge__edge0 = candidate_Nitro_edge__edge0.lgspOutNext) != head_candidate_Nitro_edge__edge0 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_TriNitro : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_TriNitro(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_TriNitro.Instance.patternGraph;
        }

        public static PatternAction_TriNitro getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_TriNitro newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_TriNitro(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_TriNitro oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_TriNitro freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_TriNitro next = null;

        public GRGEN_LGSP.LGSPNode TriNitro_node_c2;
        public GRGEN_LGSP.LGSPNode TriNitro_node_c4;
        public GRGEN_LGSP.LGSPNode TriNitro_node_c6;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset TriNitro_node_c2 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c2 = TriNitro_node_c2;
            // SubPreset TriNitro_node_c4 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c4 = TriNitro_node_c4;
            // SubPreset TriNitro_node_c6 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c6 = TriNitro_node_c6;
            // Element Nitro_node_anchor_inlined__sub2_2 assigned from other element TriNitro_node_c6 
            GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub2_2 = candidate_TriNitro_node_c6;
            if(candidate_Nitro_node_anchor_inlined__sub2_2.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element Nitro_node_anchor_inlined__sub1_1 assigned from other element TriNitro_node_c4 
            GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub1_1 = candidate_TriNitro_node_c4;
            if(candidate_Nitro_node_anchor_inlined__sub1_1.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element Nitro_node_anchor_inlined__sub0_0 assigned from other element TriNitro_node_c2 
            GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub0_0 = candidate_TriNitro_node_c2;
            if(candidate_Nitro_node_anchor_inlined__sub0_0.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Extend Outgoing Nitro_edge__edge0_inlined__sub2_2 from Nitro_node_anchor_inlined__sub2_2 
            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub2_2 = candidate_Nitro_node_anchor_inlined__sub2_2.lgspOuthead;
            if(head_candidate_Nitro_edge__edge0_inlined__sub2_2 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub2_2 = head_candidate_Nitro_edge__edge0_inlined__sub2_2;
                do
                {
                    if(candidate_Nitro_edge__edge0_inlined__sub2_2.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                    prev__candidate_Nitro_edge__edge0_inlined__sub2_2 = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target Nitro_node_n_inlined__sub2_2 from Nitro_edge__edge0_inlined__sub2_2 
                    GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub2_2 = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspTarget;
                    if(candidate_Nitro_node_n_inlined__sub2_2.lgspType.TypeID!=4) {
                        candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                        continue;
                    }
                    if((candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                        continue;
                    }
                    uint prev__candidate_Nitro_node_n_inlined__sub2_2;
                    prev__candidate_Nitro_node_n_inlined__sub2_2 = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Nitro_node_n_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Extend Outgoing Nitro_edge__edge0_inlined__sub1_1 from Nitro_node_anchor_inlined__sub1_1 
                    GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub1_1 = candidate_Nitro_node_anchor_inlined__sub1_1.lgspOuthead;
                    if(head_candidate_Nitro_edge__edge0_inlined__sub1_1 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub1_1 = head_candidate_Nitro_edge__edge0_inlined__sub1_1;
                        do
                        {
                            if(candidate_Nitro_edge__edge0_inlined__sub1_1.lgspType.TypeID!=1) {
                                continue;
                            }
                            if((candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                            prev__candidate_Nitro_edge__edge0_inlined__sub1_1 = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Implicit Target Nitro_node_n_inlined__sub1_1 from Nitro_edge__edge0_inlined__sub1_1 
                            GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub1_1 = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspTarget;
                            if(candidate_Nitro_node_n_inlined__sub1_1.lgspType.TypeID!=4) {
                                candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                continue;
                            }
                            if((candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                continue;
                            }
                            if((candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                continue;
                            }
                            uint prev__candidate_Nitro_node_n_inlined__sub1_1;
                            prev__candidate_Nitro_node_n_inlined__sub1_1 = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Nitro_node_n_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing Nitro_edge__edge0_inlined__sub0_0 from Nitro_node_anchor_inlined__sub0_0 
                            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub0_0 = candidate_Nitro_node_anchor_inlined__sub0_0.lgspOuthead;
                            if(head_candidate_Nitro_edge__edge0_inlined__sub0_0 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub0_0 = head_candidate_Nitro_edge__edge0_inlined__sub0_0;
                                do
                                {
                                    if(candidate_Nitro_edge__edge0_inlined__sub0_0.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                    prev__candidate_Nitro_edge__edge0_inlined__sub0_0 = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Implicit Target Nitro_node_n_inlined__sub0_0 from Nitro_edge__edge0_inlined__sub0_0 
                                    GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub0_0 = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspTarget;
                                    if(candidate_Nitro_node_n_inlined__sub0_0.lgspType.TypeID!=4) {
                                        candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                        continue;
                                    }
                                    if((candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                        continue;
                                    }
                                    if((candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                        continue;
                                    }
                                    // Extend Outgoing Nitro_edge__edge1_inlined__sub2_2 from Nitro_node_n_inlined__sub2_2 
                                    GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub2_2 = candidate_Nitro_node_n_inlined__sub2_2.lgspOuthead;
                                    if(head_candidate_Nitro_edge__edge1_inlined__sub2_2 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub2_2 = head_candidate_Nitro_edge__edge1_inlined__sub2_2;
                                        do
                                        {
                                            if(candidate_Nitro_edge__edge1_inlined__sub2_2.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if((candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            uint prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                            prev__candidate_Nitro_edge__edge1_inlined__sub2_2 = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Implicit Target Nitro_node__node0_inlined__sub2_2 from Nitro_edge__edge1_inlined__sub2_2 
                                            GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub2_2 = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspTarget;
                                            if(candidate_Nitro_node__node0_inlined__sub2_2.lgspType.TypeID!=3) {
                                                candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                continue;
                                            }
                                            if((candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                continue;
                                            }
                                            uint prev__candidate_Nitro_node__node0_inlined__sub2_2;
                                            prev__candidate_Nitro_node__node0_inlined__sub2_2 = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Extend Outgoing Nitro_edge__edge2_inlined__sub2_2 from Nitro_node_n_inlined__sub2_2 
                                            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub2_2 = candidate_Nitro_node_n_inlined__sub2_2.lgspOuthead;
                                            if(head_candidate_Nitro_edge__edge2_inlined__sub2_2 != null)
                                            {
                                                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub2_2 = head_candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                do
                                                {
                                                    if(candidate_Nitro_edge__edge2_inlined__sub2_2.lgspType.TypeID!=1) {
                                                        continue;
                                                    }
                                                    if((candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        continue;
                                                    }
                                                    if((candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        continue;
                                                    }
                                                    uint prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                    prev__candidate_Nitro_edge__edge2_inlined__sub2_2 = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Implicit Target Nitro_node__node1_inlined__sub2_2 from Nitro_edge__edge2_inlined__sub2_2 
                                                    GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub2_2 = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspTarget;
                                                    if(candidate_Nitro_node__node1_inlined__sub2_2.lgspType.TypeID!=3) {
                                                        candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                        continue;
                                                    }
                                                    if((candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                        continue;
                                                    }
                                                    if((candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                        continue;
                                                    }
                                                    uint prev__candidate_Nitro_node__node1_inlined__sub2_2;
                                                    prev__candidate_Nitro_node__node1_inlined__sub2_2 = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Extend Outgoing Nitro_edge__edge1_inlined__sub1_1 from Nitro_node_n_inlined__sub1_1 
                                                    GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub1_1 = candidate_Nitro_node_n_inlined__sub1_1.lgspOuthead;
                                                    if(head_candidate_Nitro_edge__edge1_inlined__sub1_1 != null)
                                                    {
                                                        GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub1_1 = head_candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                        do
                                                        {
                                                            if(candidate_Nitro_edge__edge1_inlined__sub1_1.lgspType.TypeID!=1) {
                                                                continue;
                                                            }
                                                            if((candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            uint prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                            prev__candidate_Nitro_edge__edge1_inlined__sub1_1 = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Implicit Target Nitro_node__node0_inlined__sub1_1 from Nitro_edge__edge1_inlined__sub1_1 
                                                            GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub1_1 = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspTarget;
                                                            if(candidate_Nitro_node__node0_inlined__sub1_1.lgspType.TypeID!=3) {
                                                                candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                continue;
                                                            }
                                                            if((candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                continue;
                                                            }
                                                            if((candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                continue;
                                                            }
                                                            uint prev__candidate_Nitro_node__node0_inlined__sub1_1;
                                                            prev__candidate_Nitro_node__node0_inlined__sub1_1 = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                            // Extend Outgoing Nitro_edge__edge2_inlined__sub1_1 from Nitro_node_n_inlined__sub1_1 
                                                            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub1_1 = candidate_Nitro_node_n_inlined__sub1_1.lgspOuthead;
                                                            if(head_candidate_Nitro_edge__edge2_inlined__sub1_1 != null)
                                                            {
                                                                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub1_1 = head_candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                do
                                                                {
                                                                    if(candidate_Nitro_edge__edge2_inlined__sub1_1.lgspType.TypeID!=1) {
                                                                        continue;
                                                                    }
                                                                    if((candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    if((candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        continue;
                                                                    }
                                                                    uint prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                    prev__candidate_Nitro_edge__edge2_inlined__sub1_1 = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    // Implicit Target Nitro_node__node1_inlined__sub1_1 from Nitro_edge__edge2_inlined__sub1_1 
                                                                    GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub1_1 = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspTarget;
                                                                    if(candidate_Nitro_node__node1_inlined__sub1_1.lgspType.TypeID!=3) {
                                                                        candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                        continue;
                                                                    }
                                                                    if((candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                    {
                                                                        candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                        continue;
                                                                    }
                                                                    if((candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                    {
                                                                        candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                        continue;
                                                                    }
                                                                    uint prev__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                    prev__candidate_Nitro_node__node1_inlined__sub1_1 = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                    // Extend Outgoing Nitro_edge__edge1_inlined__sub0_0 from Nitro_node_n_inlined__sub0_0 
                                                                    GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub0_0 = candidate_Nitro_node_n_inlined__sub0_0.lgspOuthead;
                                                                    if(head_candidate_Nitro_edge__edge1_inlined__sub0_0 != null)
                                                                    {
                                                                        GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub0_0 = head_candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                        do
                                                                        {
                                                                            if(candidate_Nitro_edge__edge1_inlined__sub0_0.lgspType.TypeID!=1) {
                                                                                continue;
                                                                            }
                                                                            if((candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            if((candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                            {
                                                                                continue;
                                                                            }
                                                                            uint prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                            prev__candidate_Nitro_edge__edge1_inlined__sub0_0 = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            // Implicit Target Nitro_node__node0_inlined__sub0_0 from Nitro_edge__edge1_inlined__sub0_0 
                                                                            GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub0_0 = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspTarget;
                                                                            if(candidate_Nitro_node__node0_inlined__sub0_0.lgspType.TypeID!=3) {
                                                                                candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                continue;
                                                                            }
                                                                            if((candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                            {
                                                                                candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                continue;
                                                                            }
                                                                            if((candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                            {
                                                                                candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                continue;
                                                                            }
                                                                            uint prev__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                            prev__candidate_Nitro_node__node0_inlined__sub0_0 = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                            // Extend Outgoing Nitro_edge__edge2_inlined__sub0_0 from Nitro_node_n_inlined__sub0_0 
                                                                            GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub0_0 = candidate_Nitro_node_n_inlined__sub0_0.lgspOuthead;
                                                                            if(head_candidate_Nitro_edge__edge2_inlined__sub0_0 != null)
                                                                            {
                                                                                GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub0_0 = head_candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                do
                                                                                {
                                                                                    if(candidate_Nitro_edge__edge2_inlined__sub0_0.lgspType.TypeID!=1) {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    // Implicit Target Nitro_node__node1_inlined__sub0_0 from Nitro_edge__edge2_inlined__sub0_0 
                                                                                    GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub0_0 = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspTarget;
                                                                                    if(candidate_Nitro_node__node1_inlined__sub0_0.lgspType.TypeID!=3) {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    if((candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                                                    {
                                                                                        continue;
                                                                                    }
                                                                                    // Check whether there are subpattern matching tasks left to execute
                                                                                    if(openTasks.Count==0)
                                                                                    {
                                                                                        Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch = new Stack<GRGEN_LIBGR.IMatch>();
                                                                                        foundPartialMatches.Add(currentFoundPartialMatch);
                                                                                        Pattern_TriNitro.Match_TriNitro match = new Pattern_TriNitro.Match_TriNitro();
                                                                                        Pattern_Nitro.Match_Nitro match__sub0 = new Pattern_Nitro.Match_Nitro();
                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                        Pattern_Nitro.Match_Nitro match__sub1 = new Pattern_Nitro.Match_Nitro();
                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                        Pattern_Nitro.Match_Nitro match__sub2 = new Pattern_Nitro.Match_Nitro();
                                                                                        match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                        match._node_c2 = candidate_TriNitro_node_c2;
                                                                                        match._node_c4 = candidate_TriNitro_node_c4;
                                                                                        match._node_c6 = candidate_TriNitro_node_c6;
                                                                                        match__sub0._node_anchor = candidate_Nitro_node_anchor_inlined__sub0_0;
                                                                                        match__sub0._node_n = candidate_Nitro_node_n_inlined__sub0_0;
                                                                                        match__sub0._node__node0 = candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                        match__sub0._node__node1 = candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                        match__sub1._node_anchor = candidate_Nitro_node_anchor_inlined__sub1_1;
                                                                                        match__sub1._node_n = candidate_Nitro_node_n_inlined__sub1_1;
                                                                                        match__sub1._node__node0 = candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                        match__sub1._node__node1 = candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                        match__sub2._node_anchor = candidate_Nitro_node_anchor_inlined__sub2_2;
                                                                                        match__sub2._node_n = candidate_Nitro_node_n_inlined__sub2_2;
                                                                                        match__sub2._node__node0 = candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                        match__sub2._node__node1 = candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                        match__sub0._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                        match__sub0._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                        match__sub0._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                        match__sub1._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                        match__sub1._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                        match__sub1._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                        match__sub2._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                        match__sub2._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                        match__sub2._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                        match.__sub0 = match__sub0;
                                                                                        match.__sub1 = match__sub1;
                                                                                        match.__sub2 = match__sub2;
                                                                                        currentFoundPartialMatch.Push(match);
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                            candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                            candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                            candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                            candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        continue;
                                                                                    }
                                                                                    uint prevGlobal__candidate_Nitro_node_n_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_node_n_inlined__sub0_0 = candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node_n_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_node__node0_inlined__sub0_0 = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_node__node1_inlined__sub0_0 = candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_node_n_inlined__sub1_1 = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node_n_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_node__node0_inlined__sub1_1 = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_node__node1_inlined__sub1_1 = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_node_n_inlined__sub2_2 = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node_n_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_node__node0_inlined__sub2_2 = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_node__node1_inlined__sub2_2 = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_edge__edge0_inlined__sub0_0 = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_edge__edge1_inlined__sub0_0 = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                    prevGlobal__candidate_Nitro_edge__edge2_inlined__sub0_0 = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_edge__edge0_inlined__sub1_1 = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_edge__edge1_inlined__sub1_1 = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                    prevGlobal__candidate_Nitro_edge__edge2_inlined__sub1_1 = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_edge__edge0_inlined__sub2_2 = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_edge__edge1_inlined__sub2_2 = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    uint prevGlobal__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                    prevGlobal__candidate_Nitro_edge__edge2_inlined__sub2_2 = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                    // Match subpatterns 
                                                                                    openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                    // Check whether subpatterns were found 
                                                                                    if(matchesList.Count>0) {
                                                                                        // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                                        foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                        {
                                                                                            Pattern_TriNitro.Match_TriNitro match = new Pattern_TriNitro.Match_TriNitro();
                                                                                            Pattern_Nitro.Match_Nitro match__sub0 = new Pattern_Nitro.Match_Nitro();
                                                                                            match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                            Pattern_Nitro.Match_Nitro match__sub1 = new Pattern_Nitro.Match_Nitro();
                                                                                            match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                            Pattern_Nitro.Match_Nitro match__sub2 = new Pattern_Nitro.Match_Nitro();
                                                                                            match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                            match._node_c2 = candidate_TriNitro_node_c2;
                                                                                            match._node_c4 = candidate_TriNitro_node_c4;
                                                                                            match._node_c6 = candidate_TriNitro_node_c6;
                                                                                            match__sub0._node_anchor = candidate_Nitro_node_anchor_inlined__sub0_0;
                                                                                            match__sub0._node_n = candidate_Nitro_node_n_inlined__sub0_0;
                                                                                            match__sub0._node__node0 = candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                            match__sub0._node__node1 = candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                            match__sub1._node_anchor = candidate_Nitro_node_anchor_inlined__sub1_1;
                                                                                            match__sub1._node_n = candidate_Nitro_node_n_inlined__sub1_1;
                                                                                            match__sub1._node__node0 = candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                            match__sub1._node__node1 = candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                            match__sub2._node_anchor = candidate_Nitro_node_anchor_inlined__sub2_2;
                                                                                            match__sub2._node_n = candidate_Nitro_node_n_inlined__sub2_2;
                                                                                            match__sub2._node__node0 = candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                            match__sub2._node__node1 = candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                            match__sub0._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                            match__sub0._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                            match__sub0._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                            match__sub1._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                            match__sub1._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                            match__sub1._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                            match__sub2._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                            match__sub2._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                            match__sub2._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                            match.__sub0 = match__sub0;
                                                                                            match.__sub1 = match__sub1;
                                                                                            match.__sub2 = match__sub2;
                                                                                            currentFoundPartialMatch.Push(match);
                                                                                        }
                                                                                        if(matchesList==foundPartialMatches) {
                                                                                            matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                                        } else {
                                                                                            foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                                                foundPartialMatches.Add(match);
                                                                                            }
                                                                                            matchesList.Clear();
                                                                                        }
                                                                                        // if enough matches were found, we leave
                                                                                        if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                                        {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                            candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                            candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                            candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                            candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                            candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                            candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                            candidate_Nitro_node_n_inlined__sub0_0.lgspFlags = candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub0_0;
                                                                                            candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                            candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                            candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                            candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                            candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                            candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                            candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                            openTasks.Push(this);
                                                                                            return;
                                                                                        }
                                                                                        candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                        candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                        candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                        candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                        candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                        candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                        candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                        candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                        candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                        candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                        candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                        candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                        candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                        candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                        candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                        candidate_Nitro_node_n_inlined__sub0_0.lgspFlags = candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub0_0;
                                                                                        continue;
                                                                                    }
                                                                                    candidate_Nitro_node_n_inlined__sub0_0.lgspFlags = candidate_Nitro_node_n_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub0_0;
                                                                                    candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                                    candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub0_0;
                                                                                    candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub1_1;
                                                                                    candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub1_1;
                                                                                    candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                                    candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node_n_inlined__sub2_2;
                                                                                    candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node0_inlined__sub2_2;
                                                                                    candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_node__node1_inlined__sub2_2;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub0_0;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub1_1;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                                    candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge0_inlined__sub2_2;
                                                                                    candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                                                                    candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                                                }
                                                                                while( (candidate_Nitro_edge__edge2_inlined__sub0_0 = candidate_Nitro_edge__edge2_inlined__sub0_0.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub0_0 );
                                                                            }
                                                                            candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags = candidate_Nitro_node__node0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub0_0;
                                                                            candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub0_0;
                                                                        }
                                                                        while( (candidate_Nitro_edge__edge1_inlined__sub0_0 = candidate_Nitro_edge__edge1_inlined__sub0_0.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub0_0 );
                                                                    }
                                                                    candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_1;
                                                                    candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_1;
                                                                }
                                                                while( (candidate_Nitro_edge__edge2_inlined__sub1_1 = candidate_Nitro_edge__edge2_inlined__sub1_1.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub1_1 );
                                                            }
                                                            candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_1;
                                                            candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_1;
                                                        }
                                                        while( (candidate_Nitro_edge__edge1_inlined__sub1_1 = candidate_Nitro_edge__edge1_inlined__sub1_1.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub1_1 );
                                                    }
                                                    candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub2_2;
                                                    candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_2;
                                                }
                                                while( (candidate_Nitro_edge__edge2_inlined__sub2_2 = candidate_Nitro_edge__edge2_inlined__sub2_2.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub2_2 );
                                            }
                                            candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub2_2;
                                            candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_2;
                                        }
                                        while( (candidate_Nitro_edge__edge1_inlined__sub2_2 = candidate_Nitro_edge__edge1_inlined__sub2_2.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub2_2 );
                                    }
                                    candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub0_0;
                                }
                                while( (candidate_Nitro_edge__edge0_inlined__sub0_0 = candidate_Nitro_edge__edge0_inlined__sub0_0.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub0_0 );
                            }
                            candidate_Nitro_node_n_inlined__sub1_1.lgspFlags = candidate_Nitro_node_n_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_1;
                            candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_1;
                        }
                        while( (candidate_Nitro_edge__edge0_inlined__sub1_1 = candidate_Nitro_edge__edge0_inlined__sub1_1.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub1_1 );
                    }
                    candidate_Nitro_node_n_inlined__sub2_2.lgspFlags = candidate_Nitro_node_n_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub2_2;
                    candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_2;
                }
                while( (candidate_Nitro_edge__edge0_inlined__sub2_2 = candidate_Nitro_edge__edge0_inlined__sub2_2.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub2_2 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    public class PatternAction_ToluolCoreThenTriNitro : GRGEN_LGSP.LGSPSubpatternAction
    {
        private PatternAction_ToluolCoreThenTriNitro(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_)
            : base(null)
        {
            actionEnv = actionEnv_; openTasks = openTasks_;
            patternGraph = Pattern_ToluolCoreThenTriNitro.Instance.patternGraph;
        }

        public static PatternAction_ToluolCoreThenTriNitro getNewTask(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv_, Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks_) {
            PatternAction_ToluolCoreThenTriNitro newTask;
            if(numFreeTasks>0) {
                newTask = freeListHead;
                newTask.actionEnv = actionEnv_; newTask.openTasks = openTasks_;
                freeListHead = newTask.next;
                newTask.next = null;
                --numFreeTasks;
            } else {
                newTask = new PatternAction_ToluolCoreThenTriNitro(actionEnv_, openTasks_);
            }
            return newTask;
        }

        public static void releaseTask(PatternAction_ToluolCoreThenTriNitro oldTask) {
            if(numFreeTasks<MAX_NUM_FREE_TASKS) {
                oldTask.next = freeListHead;
                oldTask.actionEnv = null; oldTask.openTasks = null;
                freeListHead = oldTask;
                ++numFreeTasks;
            }
        }

        private static PatternAction_ToluolCoreThenTriNitro freeListHead = null;
        private static int numFreeTasks = 0;
        private const int MAX_NUM_FREE_TASKS = 100;

        private PatternAction_ToluolCoreThenTriNitro next = null;

        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c1;
        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c2;
        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c3;
        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c4;
        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c5;
        public GRGEN_LGSP.LGSPNode ToluolCoreThenTriNitro_node_c6;
        
        public override void myMatch(List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches, int maxMatches, int isoSpace)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            openTasks.Pop();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            if(matchesList.Count!=0) throw new ApplicationException(); //debug assert
            // SubPreset ToluolCoreThenTriNitro_node_c1 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c1 = ToluolCoreThenTriNitro_node_c1;
            // SubPreset ToluolCoreThenTriNitro_node_c2 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c2 = ToluolCoreThenTriNitro_node_c2;
            // SubPreset ToluolCoreThenTriNitro_node_c3 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c3 = ToluolCoreThenTriNitro_node_c3;
            // SubPreset ToluolCoreThenTriNitro_node_c4 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c4 = ToluolCoreThenTriNitro_node_c4;
            // SubPreset ToluolCoreThenTriNitro_node_c5 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c5 = ToluolCoreThenTriNitro_node_c5;
            // SubPreset ToluolCoreThenTriNitro_node_c6 
            GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c6 = ToluolCoreThenTriNitro_node_c6;
            // Element Hydrogen_node_anchor_inlined__sub1_4 assigned from other element ToluolCoreThenTriNitro_node_c3 
            GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub1_4 = candidate_ToluolCoreThenTriNitro_node_c3;
            if(candidate_Hydrogen_node_anchor_inlined__sub1_4.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element Hydrogen_node_anchor_inlined__sub2_5 assigned from other element ToluolCoreThenTriNitro_node_c5 
            GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub2_5 = candidate_ToluolCoreThenTriNitro_node_c5;
            if(candidate_Hydrogen_node_anchor_inlined__sub2_5.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element TriNitro_node_c6_inlined__sub3_6 assigned from other element ToluolCoreThenTriNitro_node_c6 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c6_inlined__sub3_6 = candidate_ToluolCoreThenTriNitro_node_c6;
            if(candidate_TriNitro_node_c6_inlined__sub3_6.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element TriNitro_node_c4_inlined__sub3_6 assigned from other element ToluolCoreThenTriNitro_node_c4 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c4_inlined__sub3_6 = candidate_ToluolCoreThenTriNitro_node_c4;
            if(candidate_TriNitro_node_c4_inlined__sub3_6.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element TriNitro_node_c2_inlined__sub3_6 assigned from other element ToluolCoreThenTriNitro_node_c2 
            GRGEN_LGSP.LGSPNode candidate_TriNitro_node_c2_inlined__sub3_6 = candidate_ToluolCoreThenTriNitro_node_c2;
            if(candidate_TriNitro_node_c2_inlined__sub3_6.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Element Methyl_node_anchor_inlined__sub0_3 assigned from other element ToluolCoreThenTriNitro_node_c1 
            GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub0_3 = candidate_ToluolCoreThenTriNitro_node_c1;
            if(candidate_Methyl_node_anchor_inlined__sub0_3.lgspType.TypeID!=1) {
                openTasks.Push(this);
                return;
            }
            // Extend Outgoing Hydrogen_edge__edge0_inlined__sub1_4 from Hydrogen_node_anchor_inlined__sub1_4 
            GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub1_4 = candidate_Hydrogen_node_anchor_inlined__sub1_4.lgspOuthead;
            if(head_candidate_Hydrogen_edge__edge0_inlined__sub1_4 != null)
            {
                GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub1_4 = head_candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                do
                {
                    if(candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspType.TypeID!=1) {
                        continue;
                    }
                    if((candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        continue;
                    }
                    uint prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                    prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4 = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Implicit Target Hydrogen_node__node0_inlined__sub1_4 from Hydrogen_edge__edge0_inlined__sub1_4 
                    GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub1_4 = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspTarget;
                    if(candidate_Hydrogen_node__node0_inlined__sub1_4.lgspType.TypeID!=2) {
                        candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                        continue;
                    }
                    if((candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                    {
                        candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                        continue;
                    }
                    uint prev__candidate_Hydrogen_node__node0_inlined__sub1_4;
                    prev__candidate_Hydrogen_node__node0_inlined__sub1_4 = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                    // Extend Outgoing Hydrogen_edge__edge0_inlined__sub2_5 from Hydrogen_node_anchor_inlined__sub2_5 
                    GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub2_5 = candidate_Hydrogen_node_anchor_inlined__sub2_5.lgspOuthead;
                    if(head_candidate_Hydrogen_edge__edge0_inlined__sub2_5 != null)
                    {
                        GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub2_5 = head_candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                        do
                        {
                            if(candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspType.TypeID!=1) {
                                continue;
                            }
                            if((candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                continue;
                            }
                            if((candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                continue;
                            }
                            uint prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                            prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5 = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Implicit Target Hydrogen_node__node0_inlined__sub2_5 from Hydrogen_edge__edge0_inlined__sub2_5 
                            GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub2_5 = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspTarget;
                            if(candidate_Hydrogen_node__node0_inlined__sub2_5.lgspType.TypeID!=2) {
                                candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                continue;
                            }
                            if((candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                            {
                                candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                continue;
                            }
                            if((candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                            {
                                candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                continue;
                            }
                            uint prev__candidate_Hydrogen_node__node0_inlined__sub2_5;
                            prev__candidate_Hydrogen_node__node0_inlined__sub2_5 = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                            // Extend Outgoing Methyl_edge__edge0_inlined__sub0_3 from Methyl_node_anchor_inlined__sub0_3 
                            GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub0_3 = candidate_Methyl_node_anchor_inlined__sub0_3.lgspOuthead;
                            if(head_candidate_Methyl_edge__edge0_inlined__sub0_3 != null)
                            {
                                GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0_inlined__sub0_3 = head_candidate_Methyl_edge__edge0_inlined__sub0_3;
                                do
                                {
                                    if(candidate_Methyl_edge__edge0_inlined__sub0_3.lgspType.TypeID!=1) {
                                        continue;
                                    }
                                    if((candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        continue;
                                    }
                                    if((candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        continue;
                                    }
                                    uint prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                    prev__candidate_Methyl_edge__edge0_inlined__sub0_3 = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                    // Implicit Target Methyl_node_c_inlined__sub0_3 from Methyl_edge__edge0_inlined__sub0_3 
                                    GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub0_3 = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspTarget;
                                    if(candidate_Methyl_node_c_inlined__sub0_3.lgspType.TypeID!=1) {
                                        candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                        continue;
                                    }
                                    if((candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                    {
                                        candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                        continue;
                                    }
                                    if((candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                    {
                                        candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                        continue;
                                    }
                                    // Extend Outgoing Methyl_edge__edge1_inlined__sub0_3 from Methyl_node_c_inlined__sub0_3 
                                    GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub0_3 = candidate_Methyl_node_c_inlined__sub0_3.lgspOuthead;
                                    if(head_candidate_Methyl_edge__edge1_inlined__sub0_3 != null)
                                    {
                                        GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub0_3 = head_candidate_Methyl_edge__edge1_inlined__sub0_3;
                                        do
                                        {
                                            if(candidate_Methyl_edge__edge1_inlined__sub0_3.lgspType.TypeID!=1) {
                                                continue;
                                            }
                                            if((candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                continue;
                                            }
                                            if((candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                continue;
                                            }
                                            uint prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                            prev__candidate_Methyl_edge__edge1_inlined__sub0_3 = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Implicit Target Methyl_node__node0_inlined__sub0_3 from Methyl_edge__edge1_inlined__sub0_3 
                                            GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub0_3 = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspTarget;
                                            if(candidate_Methyl_node__node0_inlined__sub0_3.lgspType.TypeID!=2) {
                                                candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                continue;
                                            }
                                            if((candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                            {
                                                candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                continue;
                                            }
                                            if((candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                            {
                                                candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                continue;
                                            }
                                            uint prev__candidate_Methyl_node__node0_inlined__sub0_3;
                                            prev__candidate_Methyl_node__node0_inlined__sub0_3 = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                            // Extend Outgoing Methyl_edge__edge2_inlined__sub0_3 from Methyl_node_c_inlined__sub0_3 
                                            GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub0_3 = candidate_Methyl_node_c_inlined__sub0_3.lgspOuthead;
                                            if(head_candidate_Methyl_edge__edge2_inlined__sub0_3 != null)
                                            {
                                                GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub0_3 = head_candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                do
                                                {
                                                    if(candidate_Methyl_edge__edge2_inlined__sub0_3.lgspType.TypeID!=1) {
                                                        continue;
                                                    }
                                                    if((candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        continue;
                                                    }
                                                    if((candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        continue;
                                                    }
                                                    uint prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                    prev__candidate_Methyl_edge__edge2_inlined__sub0_3 = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Implicit Target Methyl_node__node1_inlined__sub0_3 from Methyl_edge__edge2_inlined__sub0_3 
                                                    GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub0_3 = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspTarget;
                                                    if(candidate_Methyl_node__node1_inlined__sub0_3.lgspType.TypeID!=2) {
                                                        candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                        continue;
                                                    }
                                                    if((candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                    {
                                                        candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                        continue;
                                                    }
                                                    if((candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                    {
                                                        candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                        continue;
                                                    }
                                                    uint prev__candidate_Methyl_node__node1_inlined__sub0_3;
                                                    prev__candidate_Methyl_node__node1_inlined__sub0_3 = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                    // Extend Outgoing Methyl_edge__edge3_inlined__sub0_3 from Methyl_node_c_inlined__sub0_3 
                                                    GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub0_3 = candidate_Methyl_node_c_inlined__sub0_3.lgspOuthead;
                                                    if(head_candidate_Methyl_edge__edge3_inlined__sub0_3 != null)
                                                    {
                                                        GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub0_3 = head_candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                        do
                                                        {
                                                            if(candidate_Methyl_edge__edge3_inlined__sub0_3.lgspType.TypeID!=1) {
                                                                continue;
                                                            }
                                                            if((candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            // Implicit Target Methyl_node__node2_inlined__sub0_3 from Methyl_edge__edge3_inlined__sub0_3 
                                                            GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub0_3 = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspTarget;
                                                            if(candidate_Methyl_node__node2_inlined__sub0_3.lgspType.TypeID!=2) {
                                                                continue;
                                                            }
                                                            if((candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                            {
                                                                continue;
                                                            }
                                                            if((candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)==(uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace)
                                                            {
                                                                continue;
                                                            }
                                                            // Push subpattern matching task for _sub2_inlined__sub3_6
                                                            PatternAction_Nitro taskFor__sub2_inlined__sub3_6 = PatternAction_Nitro.getNewTask(actionEnv, openTasks);
                                                            taskFor__sub2_inlined__sub3_6.Nitro_node_anchor = candidate_TriNitro_node_c6_inlined__sub3_6;
                                                            taskFor__sub2_inlined__sub3_6.searchPatternpath = false;
                                                            taskFor__sub2_inlined__sub3_6.matchOfNestingPattern = null;
                                                            taskFor__sub2_inlined__sub3_6.lastMatchAtPreviousNestingLevel = null;
                                                            openTasks.Push(taskFor__sub2_inlined__sub3_6);
                                                            // Push subpattern matching task for _sub1_inlined__sub3_6
                                                            PatternAction_Nitro taskFor__sub1_inlined__sub3_6 = PatternAction_Nitro.getNewTask(actionEnv, openTasks);
                                                            taskFor__sub1_inlined__sub3_6.Nitro_node_anchor = candidate_TriNitro_node_c4_inlined__sub3_6;
                                                            taskFor__sub1_inlined__sub3_6.searchPatternpath = false;
                                                            taskFor__sub1_inlined__sub3_6.matchOfNestingPattern = null;
                                                            taskFor__sub1_inlined__sub3_6.lastMatchAtPreviousNestingLevel = null;
                                                            openTasks.Push(taskFor__sub1_inlined__sub3_6);
                                                            // Push subpattern matching task for _sub0_inlined__sub3_6
                                                            PatternAction_Nitro taskFor__sub0_inlined__sub3_6 = PatternAction_Nitro.getNewTask(actionEnv, openTasks);
                                                            taskFor__sub0_inlined__sub3_6.Nitro_node_anchor = candidate_TriNitro_node_c2_inlined__sub3_6;
                                                            taskFor__sub0_inlined__sub3_6.searchPatternpath = false;
                                                            taskFor__sub0_inlined__sub3_6.matchOfNestingPattern = null;
                                                            taskFor__sub0_inlined__sub3_6.lastMatchAtPreviousNestingLevel = null;
                                                            openTasks.Push(taskFor__sub0_inlined__sub3_6);
                                                            uint prevGlobal__candidate_Methyl_node_c_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_node_c_inlined__sub0_3 = candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_node_c_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_node__node0_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_node__node0_inlined__sub0_3 = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_node__node1_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_node__node1_inlined__sub0_3 = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_node__node2_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_node__node2_inlined__sub0_3 = candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                            prevGlobal__candidate_Hydrogen_node__node0_inlined__sub1_4 = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                            prevGlobal__candidate_Hydrogen_node__node0_inlined__sub2_5 = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_edge__edge0_inlined__sub0_3 = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_edge__edge1_inlined__sub0_3 = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_edge__edge2_inlined__sub0_3 = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                            prevGlobal__candidate_Methyl_edge__edge3_inlined__sub0_3 = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                            prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub1_4 = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            uint prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                            prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub2_5 = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                            // Match subpatterns 
                                                            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                            // Pop subpattern matching task for _sub0_inlined__sub3_6
                                                            openTasks.Pop();
                                                            PatternAction_Nitro.releaseTask(taskFor__sub0_inlined__sub3_6);
                                                            // Pop subpattern matching task for _sub1_inlined__sub3_6
                                                            openTasks.Pop();
                                                            PatternAction_Nitro.releaseTask(taskFor__sub1_inlined__sub3_6);
                                                            // Pop subpattern matching task for _sub2_inlined__sub3_6
                                                            openTasks.Pop();
                                                            PatternAction_Nitro.releaseTask(taskFor__sub2_inlined__sub3_6);
                                                            // Check whether subpatterns were found 
                                                            if(matchesList.Count>0) {
                                                                // subpatterns/alternatives were found, extend the partial matches by our local match object
                                                                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                {
                                                                    Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro match = new Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro();
                                                                    Pattern_Methyl.Match_Methyl match__sub0 = new Pattern_Methyl.Match_Methyl();
                                                                    match__sub0.SetMatchOfEnclosingPattern(match);
                                                                    Pattern_Hydrogen.Match_Hydrogen match__sub1 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                    match__sub1.SetMatchOfEnclosingPattern(match);
                                                                    Pattern_Hydrogen.Match_Hydrogen match__sub2 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                    match__sub2.SetMatchOfEnclosingPattern(match);
                                                                    Pattern_TriNitro.Match_TriNitro match__sub3 = new Pattern_TriNitro.Match_TriNitro();
                                                                    match__sub3.SetMatchOfEnclosingPattern(match);
                                                                    match._node_c1 = candidate_ToluolCoreThenTriNitro_node_c1;
                                                                    match._node_c2 = candidate_ToluolCoreThenTriNitro_node_c2;
                                                                    match._node_c3 = candidate_ToluolCoreThenTriNitro_node_c3;
                                                                    match._node_c4 = candidate_ToluolCoreThenTriNitro_node_c4;
                                                                    match._node_c5 = candidate_ToluolCoreThenTriNitro_node_c5;
                                                                    match._node_c6 = candidate_ToluolCoreThenTriNitro_node_c6;
                                                                    match__sub0._node_anchor = candidate_Methyl_node_anchor_inlined__sub0_3;
                                                                    match__sub0._node_c = candidate_Methyl_node_c_inlined__sub0_3;
                                                                    match__sub0._node__node0 = candidate_Methyl_node__node0_inlined__sub0_3;
                                                                    match__sub0._node__node1 = candidate_Methyl_node__node1_inlined__sub0_3;
                                                                    match__sub0._node__node2 = candidate_Methyl_node__node2_inlined__sub0_3;
                                                                    match__sub1._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub1_4;
                                                                    match__sub1._node__node0 = candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                                    match__sub2._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub2_5;
                                                                    match__sub2._node__node0 = candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                                    match__sub3._node_c2 = candidate_TriNitro_node_c2_inlined__sub3_6;
                                                                    match__sub3._node_c4 = candidate_TriNitro_node_c4_inlined__sub3_6;
                                                                    match__sub3._node_c6 = candidate_TriNitro_node_c6_inlined__sub3_6;
                                                                    match__sub0._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                                    match__sub0._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                                    match__sub0._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                                    match__sub0._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                                    match__sub1._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                                    match__sub2._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                                    match.__sub0 = match__sub0;
                                                                    match.__sub1 = match__sub1;
                                                                    match.__sub2 = match__sub2;
                                                                    match.__sub3 = match__sub3;
                                                                    match__sub3.__sub0 = (@Pattern_Nitro.Match_Nitro)currentFoundPartialMatch.Pop();
                                                                    match__sub3.__sub0._matchOfEnclosingPattern = match__sub3;
                                                                    match__sub3.__sub1 = (@Pattern_Nitro.Match_Nitro)currentFoundPartialMatch.Pop();
                                                                    match__sub3.__sub1._matchOfEnclosingPattern = match__sub3;
                                                                    match__sub3.__sub2 = (@Pattern_Nitro.Match_Nitro)currentFoundPartialMatch.Pop();
                                                                    match__sub3.__sub2._matchOfEnclosingPattern = match__sub3;
                                                                    currentFoundPartialMatch.Push(match);
                                                                }
                                                                if(matchesList==foundPartialMatches) {
                                                                    matchesList = new List<Stack<GRGEN_LIBGR.IMatch>>();
                                                                } else {
                                                                    foreach(Stack<GRGEN_LIBGR.IMatch> match in matchesList) {
                                                                        foundPartialMatches.Add(match);
                                                                    }
                                                                    matchesList.Clear();
                                                                }
                                                                // if enough matches were found, we leave
                                                                if(maxMatches > 0 && foundPartialMatches.Count >= maxMatches)
                                                                {
                                                                    candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                                    candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                                    candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                                    candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                                    candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                                    candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2_inlined__sub0_3;
                                                                    candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1_inlined__sub0_3;
                                                                    candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0_inlined__sub0_3;
                                                                    candidate_Methyl_node_c_inlined__sub0_3.lgspFlags = candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c_inlined__sub0_3;
                                                                    candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                                    candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                                    candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                                    candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                                    candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                                    candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                                    candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                                    openTasks.Push(this);
                                                                    return;
                                                                }
                                                                candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                                candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                                candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                                candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                                candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                                candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                                candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                                candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                                candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2_inlined__sub0_3;
                                                                candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1_inlined__sub0_3;
                                                                candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0_inlined__sub0_3;
                                                                candidate_Methyl_node_c_inlined__sub0_3.lgspFlags = candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c_inlined__sub0_3;
                                                                continue;
                                                            }
                                                            candidate_Methyl_node_c_inlined__sub0_3.lgspFlags = candidate_Methyl_node_c_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node_c_inlined__sub0_3;
                                                            candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node0_inlined__sub0_3;
                                                            candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node1_inlined__sub0_3;
                                                            candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_node__node2_inlined__sub0_3;
                                                            candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub1_4;
                                                            candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_node__node0_inlined__sub2_5;
                                                            candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                                            candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                                            candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                            candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Methyl_edge__edge3_inlined__sub0_3;
                                                            candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                                                        }
                                                        while( (candidate_Methyl_edge__edge3_inlined__sub0_3 = candidate_Methyl_edge__edge3_inlined__sub0_3.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub0_3 );
                                                    }
                                                    candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_3;
                                                    candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_3;
                                                }
                                                while( (candidate_Methyl_edge__edge2_inlined__sub0_3 = candidate_Methyl_edge__edge2_inlined__sub0_3.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub0_3 );
                                            }
                                            candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_3;
                                            candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_3;
                                        }
                                        while( (candidate_Methyl_edge__edge1_inlined__sub0_3 = candidate_Methyl_edge__edge1_inlined__sub0_3.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub0_3 );
                                    }
                                    candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_3;
                                }
                                while( (candidate_Methyl_edge__edge0_inlined__sub0_3 = candidate_Methyl_edge__edge0_inlined__sub0_3.lgspOutNext) != head_candidate_Methyl_edge__edge0_inlined__sub0_3 );
                            }
                            candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_5;
                            candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_5;
                        }
                        while( (candidate_Hydrogen_edge__edge0_inlined__sub2_5 = candidate_Hydrogen_edge__edge0_inlined__sub2_5.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub2_5 );
                    }
                    candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub1_4;
                    candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub1_4;
                }
                while( (candidate_Hydrogen_edge__edge0_inlined__sub1_4 = candidate_Hydrogen_edge__edge0_inlined__sub1_4.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub1_4 );
            }
            openTasks.Push(this);
            return;
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_BenzolRing
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_BenzolRing.IMatch_BenzolRing match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_BenzolRing : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_BenzolRing
    {
        public Action_BenzolRing()
            : base(Rule_BenzolRing.Instance.patternGraph)
        {
            _rulePattern = Rule_BenzolRing.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_BenzolRing _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "BenzolRing"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_BenzolRing.Match_BenzolRing, Rule_BenzolRing.IMatch_BenzolRing> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_BenzolRing Instance { get { return instance; } set { instance = value; } }
        private static Action_BenzolRing instance = new Action_BenzolRing();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_BenzolRing.Match_BenzolRing, Rule_BenzolRing.IMatch_BenzolRing>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Push subpattern matching task for _sub0
            PatternAction_BenzolRing taskFor__sub0 = PatternAction_BenzolRing.getNewTask(actionEnv, openTasks);
            taskFor__sub0.searchPatternpath = false;
            taskFor__sub0.matchOfNestingPattern = null;
            taskFor__sub0.lastMatchAtPreviousNestingLevel = null;
            openTasks.Push(taskFor__sub0);
            // Match subpatterns 
            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
            // Pop subpattern matching task for _sub0
            openTasks.Pop();
            PatternAction_BenzolRing.releaseTask(taskFor__sub0);
            // Check whether subpatterns were found 
            if(matchesList.Count>0) {
                // subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it
                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                {
                    Rule_BenzolRing.Match_BenzolRing match = matches.GetNextUnfilledPosition();
                    match.__sub0 = (@Pattern_BenzolRing.Match_BenzolRing)currentFoundPartialMatch.Pop();
                    match.__sub0._matchOfEnclosingPattern = match;
                    matches.PositionWasFilledFixIt();
                }
                matchesList.Clear();
                // if enough matches were found, we leave
                if(maxMatches > 0 && matches.Count >= maxMatches)
                {
                    return matches;
                }
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_BenzolRing.IMatch_BenzolRing match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches)
        {
            foreach(Rule_BenzolRing.IMatch_BenzolRing match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_BenzolRing.IMatch_BenzolRing match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_BenzolRing.IMatch_BenzolRing)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_BenzolRing.IMatch_BenzolRing>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNTTotallyFolded
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNTTotallyFolded : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNTTotallyFolded
    {
        public Action_TNTTotallyFolded()
            : base(Rule_TNTTotallyFolded.Instance.patternGraph)
        {
            _rulePattern = Rule_TNTTotallyFolded.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNTTotallyFolded _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNTTotallyFolded"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNTTotallyFolded.Match_TNTTotallyFolded, Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNTTotallyFolded Instance { get { return instance; } set { instance = value; } }
        private static Action_TNTTotallyFolded instance = new Action_TNTTotallyFolded();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNTTotallyFolded.Match_TNTTotallyFolded, Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 
            int type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 = graph.edgesByTypeHeads[type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7], candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspTypeNext; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 != head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspTypeNext)
            {
                uint prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source BenzolRingC123456Exposed_node_c1_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspSource;
                if(candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target BenzolRingC123456Exposed_node_c2_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspTarget;
                if(candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                if((candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element TNTTotallyFolded_node_c2 assigned from other element BenzolRingC123456Exposed_node_c2_inlined__sub0_7 
                GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                if(candidate_TNTTotallyFolded_node_c2.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                // Element Nitro_node_anchor_inlined__sub2_9 assigned from other element TNTTotallyFolded_node_c2 
                GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub2_9 = candidate_TNTTotallyFolded_node_c2;
                if(candidate_Nitro_node_anchor_inlined__sub2_9.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                // Element TNTTotallyFolded_node_c1 assigned from other element BenzolRingC123456Exposed_node_c1_inlined__sub0_7 
                GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                if(candidate_TNTTotallyFolded_node_c1.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                // Element Methyl_node_anchor_inlined__sub1_8 assigned from other element TNTTotallyFolded_node_c1 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub1_8 = candidate_TNTTotallyFolded_node_c1;
                if(candidate_Methyl_node_anchor_inlined__sub1_8.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                    continue;
                }
                // Extend Outgoing BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 from BenzolRingC123456Exposed_node_c1_inlined__sub0_7 
                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspOuthead;
                if(head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7;
                    do
                    {
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspTarget != candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7) {
                            continue;
                        }
                        if((candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7;
                        prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 from BenzolRingC123456Exposed_node_c2_inlined__sub0_7 
                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspOuthead;
                        if(head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                            do
                            {
                                if(candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target BenzolRingC123456Exposed_node_c3_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 
                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspTarget;
                                if(candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element TNTTotallyFolded_node_c3 assigned from other element BenzolRingC123456Exposed_node_c3_inlined__sub0_7 
                                GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                if(candidate_TNTTotallyFolded_node_c3.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                    continue;
                                }
                                // Element Hydrogen_node_anchor_inlined__sub3_10 assigned from other element TNTTotallyFolded_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub3_10 = candidate_TNTTotallyFolded_node_c3;
                                if(candidate_Hydrogen_node_anchor_inlined__sub3_10.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                    continue;
                                }
                                // Extend Outgoing Nitro_edge__edge0_inlined__sub2_9 from Nitro_node_anchor_inlined__sub2_9 
                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub2_9 = candidate_Nitro_node_anchor_inlined__sub2_9.lgspOuthead;
                                if(head_candidate_Nitro_edge__edge0_inlined__sub2_9 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub2_9 = head_candidate_Nitro_edge__edge0_inlined__sub2_9;
                                    do
                                    {
                                        if(candidate_Nitro_edge__edge0_inlined__sub2_9.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub2_9;
                                        prev__candidate_Nitro_edge__edge0_inlined__sub2_9 = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Nitro_node_n_inlined__sub2_9 from Nitro_edge__edge0_inlined__sub2_9 
                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub2_9 = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspTarget;
                                        if(candidate_Nitro_node_n_inlined__sub2_9.lgspType.TypeID!=4) {
                                            candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_9;
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_node_n_inlined__sub2_9;
                                        prev__candidate_Nitro_node_n_inlined__sub2_9 = candidate_Nitro_node_n_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_node_n_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing Methyl_edge__edge0_inlined__sub1_8 from Methyl_node_anchor_inlined__sub1_8 
                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub1_8 = candidate_Methyl_node_anchor_inlined__sub1_8.lgspOuthead;
                                        if(head_candidate_Methyl_edge__edge0_inlined__sub1_8 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0_inlined__sub1_8 = head_candidate_Methyl_edge__edge0_inlined__sub1_8;
                                            do
                                            {
                                                if(candidate_Methyl_edge__edge0_inlined__sub1_8.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_edge__edge0_inlined__sub1_8;
                                                prev__candidate_Methyl_edge__edge0_inlined__sub1_8 = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target Methyl_node_c_inlined__sub1_8 from Methyl_edge__edge0_inlined__sub1_8 
                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub1_8 = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspTarget;
                                                if(candidate_Methyl_node_c_inlined__sub1_8.lgspType.TypeID!=1) {
                                                    candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_8;
                                                    continue;
                                                }
                                                if((candidate_Methyl_node_c_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_8;
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_node_c_inlined__sub1_8;
                                                prev__candidate_Methyl_node_c_inlined__sub1_8 = candidate_Methyl_node_c_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_node_c_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 from BenzolRingC123456Exposed_node_c3_inlined__sub0_7 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspOuthead;
                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                    do
                                                    {
                                                        if(candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target BenzolRingC123456Exposed_node_c4_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 
                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspTarget;
                                                        if(candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                        prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element TNTTotallyFolded_node_c4 assigned from other element BenzolRingC123456Exposed_node_c4_inlined__sub0_7 
                                                        GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                        if(candidate_TNTTotallyFolded_node_c4.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                            continue;
                                                        }
                                                        // Element Nitro_node_anchor_inlined__sub4_11 assigned from other element TNTTotallyFolded_node_c4 
                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub4_11 = candidate_TNTTotallyFolded_node_c4;
                                                        if(candidate_Nitro_node_anchor_inlined__sub4_11.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                            continue;
                                                        }
                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 from BenzolRingC123456Exposed_node_c3_inlined__sub0_7 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspOuthead;
                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7;
                                                            do
                                                            {
                                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspTarget != candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7;
                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub3_10 from Hydrogen_node_anchor_inlined__sub3_10 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub3_10 = candidate_Hydrogen_node_anchor_inlined__sub3_10.lgspOuthead;
                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub3_10 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub3_10 = head_candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                    do
                                                                    {
                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub3_10 = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub3_10 from Hydrogen_edge__edge0_inlined__sub3_10 
                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub3_10 = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspTarget;
                                                                        if(candidate_Hydrogen_node__node0_inlined__sub3_10.lgspType.TypeID!=2) {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub3_10;
                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub3_10 = candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub2_9 from Nitro_node_n_inlined__sub2_9 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub2_9 = candidate_Nitro_node_n_inlined__sub2_9.lgspOuthead;
                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub2_9 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub2_9 = head_candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                            do
                                                                            {
                                                                                if(candidate_Nitro_edge__edge1_inlined__sub2_9.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub2_9 = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target Nitro_node__node0_inlined__sub2_9 from Nitro_edge__edge1_inlined__sub2_9 
                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub2_9 = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspTarget;
                                                                                if(candidate_Nitro_node__node0_inlined__sub2_9.lgspType.TypeID!=3) {
                                                                                    candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub2_9;
                                                                                prev__candidate_Nitro_node__node0_inlined__sub2_9 = candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub2_9 from Nitro_node_n_inlined__sub2_9 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub2_9 = candidate_Nitro_node_n_inlined__sub2_9.lgspOuthead;
                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub2_9 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub2_9 = head_candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub2_9.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub2_9 = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target Nitro_node__node1_inlined__sub2_9 from Nitro_edge__edge2_inlined__sub2_9 
                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub2_9 = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspTarget;
                                                                                        if(candidate_Nitro_node__node1_inlined__sub2_9.lgspType.TypeID!=3) {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub2_9;
                                                                                        prev__candidate_Nitro_node__node1_inlined__sub2_9 = candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing Methyl_edge__edge1_inlined__sub1_8 from Methyl_node_c_inlined__sub1_8 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub1_8 = candidate_Methyl_node_c_inlined__sub1_8.lgspOuthead;
                                                                                        if(head_candidate_Methyl_edge__edge1_inlined__sub1_8 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub1_8 = head_candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_Methyl_edge__edge1_inlined__sub1_8.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                                prev__candidate_Methyl_edge__edge1_inlined__sub1_8 = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target Methyl_node__node0_inlined__sub1_8 from Methyl_edge__edge1_inlined__sub1_8 
                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub1_8 = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspTarget;
                                                                                                if(candidate_Methyl_node__node0_inlined__sub1_8.lgspType.TypeID!=2) {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_node__node0_inlined__sub1_8;
                                                                                                prev__candidate_Methyl_node__node0_inlined__sub1_8 = candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing Methyl_edge__edge2_inlined__sub1_8 from Methyl_node_c_inlined__sub1_8 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub1_8 = candidate_Methyl_node_c_inlined__sub1_8.lgspOuthead;
                                                                                                if(head_candidate_Methyl_edge__edge2_inlined__sub1_8 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub1_8 = head_candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_Methyl_edge__edge2_inlined__sub1_8.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                        prev__candidate_Methyl_edge__edge2_inlined__sub1_8 = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target Methyl_node__node1_inlined__sub1_8 from Methyl_edge__edge2_inlined__sub1_8 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub1_8 = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspTarget;
                                                                                                        if(candidate_Methyl_node__node1_inlined__sub1_8.lgspType.TypeID!=2) {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_node__node1_inlined__sub1_8;
                                                                                                        prev__candidate_Methyl_node__node1_inlined__sub1_8 = candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing Methyl_edge__edge3_inlined__sub1_8 from Methyl_node_c_inlined__sub1_8 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub1_8 = candidate_Methyl_node_c_inlined__sub1_8.lgspOuthead;
                                                                                                        if(head_candidate_Methyl_edge__edge3_inlined__sub1_8 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub1_8 = head_candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_Methyl_edge__edge3_inlined__sub1_8.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                                prev__candidate_Methyl_edge__edge3_inlined__sub1_8 = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target Methyl_node__node2_inlined__sub1_8 from Methyl_edge__edge3_inlined__sub1_8 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub1_8 = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspTarget;
                                                                                                                if(candidate_Methyl_node__node2_inlined__sub1_8.lgspType.TypeID!=2) {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_node__node2_inlined__sub1_8;
                                                                                                                prev__candidate_Methyl_node__node2_inlined__sub1_8 = candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 from BenzolRingC123456Exposed_node_c4_inlined__sub0_7 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspOuthead;
                                                                                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target BenzolRingC123456Exposed_node_c5_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspTarget;
                                                                                                                        if(candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                        prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Element TNTTotallyFolded_node_c5 assigned from other element BenzolRingC123456Exposed_node_c5_inlined__sub0_7 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                        if(candidate_TNTTotallyFolded_node_c5.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Element Hydrogen_node_anchor_inlined__sub5_12 assigned from other element TNTTotallyFolded_node_c5 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub5_12 = candidate_TNTTotallyFolded_node_c5;
                                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub5_12.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Extend Outgoing Nitro_edge__edge0_inlined__sub4_11 from Nitro_node_anchor_inlined__sub4_11 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub4_11 = candidate_Nitro_node_anchor_inlined__sub4_11.lgspOuthead;
                                                                                                                        if(head_candidate_Nitro_edge__edge0_inlined__sub4_11 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub4_11 = head_candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_Nitro_edge__edge0_inlined__sub4_11.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                                prev__candidate_Nitro_edge__edge0_inlined__sub4_11 = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target Nitro_node_n_inlined__sub4_11 from Nitro_edge__edge0_inlined__sub4_11 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub4_11 = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspTarget;
                                                                                                                                if(candidate_Nitro_node_n_inlined__sub4_11.lgspType.TypeID!=4) {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_node_n_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Nitro_node_n_inlined__sub4_11;
                                                                                                                                prev__candidate_Nitro_node_n_inlined__sub4_11 = candidate_Nitro_node_n_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Nitro_node_n_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 from BenzolRingC123456Exposed_node_c5_inlined__sub0_7 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspOuthead;
                                                                                                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target BenzolRingC123456Exposed_node_c6_inlined__sub0_7 from BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspTarget;
                                                                                                                                        if(candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                        prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Element TNTTotallyFolded_node_c6 assigned from other element BenzolRingC123456Exposed_node_c6_inlined__sub0_7 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTTotallyFolded_node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                        if(candidate_TNTTotallyFolded_node_c6.lgspType.TypeID!=1) {
                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Element Nitro_node_anchor_inlined__sub6_13 assigned from other element TNTTotallyFolded_node_c6 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub6_13 = candidate_TNTTotallyFolded_node_c6;
                                                                                                                                        if(candidate_Nitro_node_anchor_inlined__sub6_13.lgspType.TypeID!=1) {
                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 from BenzolRingC123456Exposed_node_c5_inlined__sub0_7 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspOuthead;
                                                                                                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspTarget != candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7;
                                                                                                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub5_12 from Hydrogen_node_anchor_inlined__sub5_12 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub5_12 = candidate_Hydrogen_node_anchor_inlined__sub5_12.lgspOuthead;
                                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub5_12 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub5_12 = head_candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12 = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub5_12 from Hydrogen_edge__edge0_inlined__sub5_12 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub5_12 = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspTarget;
                                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub5_12.lgspType.TypeID!=2) {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub5_12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub4_11 from Nitro_node_n_inlined__sub4_11 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub4_11 = candidate_Nitro_node_n_inlined__sub4_11.lgspOuthead;
                                                                                                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub4_11 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub4_11 = head_candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_Nitro_edge__edge1_inlined__sub4_11.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub4_11 = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target Nitro_node__node0_inlined__sub4_11 from Nitro_edge__edge1_inlined__sub4_11 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub4_11 = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspTarget;
                                                                                                                                                                if(candidate_Nitro_node__node0_inlined__sub4_11.lgspType.TypeID!=3) {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub4_11;
                                                                                                                                                                prev__candidate_Nitro_node__node0_inlined__sub4_11 = candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub4_11 from Nitro_node_n_inlined__sub4_11 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub4_11 = candidate_Nitro_node_n_inlined__sub4_11.lgspOuthead;
                                                                                                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub4_11 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub4_11 = head_candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub4_11.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub4_11 = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target Nitro_node__node1_inlined__sub4_11 from Nitro_edge__edge2_inlined__sub4_11 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub4_11 = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspTarget;
                                                                                                                                                                        if(candidate_Nitro_node__node1_inlined__sub4_11.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub4_11;
                                                                                                                                                                        prev__candidate_Nitro_node__node1_inlined__sub4_11 = candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 from BenzolRingC123456Exposed_node_c6_inlined__sub0_7 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspOuthead;
                                                                                                                                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 = head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspTarget != candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7;
                                                                                                                                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                // Extend Outgoing Nitro_edge__edge0_inlined__sub6_13 from Nitro_node_anchor_inlined__sub6_13 
                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub6_13 = candidate_Nitro_node_anchor_inlined__sub6_13.lgspOuthead;
                                                                                                                                                                                if(head_candidate_Nitro_edge__edge0_inlined__sub6_13 != null)
                                                                                                                                                                                {
                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub6_13 = head_candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                    do
                                                                                                                                                                                    {
                                                                                                                                                                                        if(candidate_Nitro_edge__edge0_inlined__sub6_13.lgspType.TypeID!=1) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                        prev__candidate_Nitro_edge__edge0_inlined__sub6_13 = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        // Implicit Target Nitro_node_n_inlined__sub6_13 from Nitro_edge__edge0_inlined__sub6_13 
                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub6_13 = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspTarget;
                                                                                                                                                                                        if(candidate_Nitro_node_n_inlined__sub6_13.lgspType.TypeID!=4) {
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Nitro_node_n_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub6_13 from Nitro_node_n_inlined__sub6_13 
                                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub6_13 = candidate_Nitro_node_n_inlined__sub6_13.lgspOuthead;
                                                                                                                                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub6_13 != null)
                                                                                                                                                                                        {
                                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub6_13 = head_candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                            do
                                                                                                                                                                                            {
                                                                                                                                                                                                if(candidate_Nitro_edge__edge1_inlined__sub6_13.lgspType.TypeID!=1) {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub6_13 = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Implicit Target Nitro_node__node0_inlined__sub6_13 from Nitro_edge__edge1_inlined__sub6_13 
                                                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub6_13 = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspTarget;
                                                                                                                                                                                                if(candidate_Nitro_node__node0_inlined__sub6_13.lgspType.TypeID!=3) {
                                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub6_13;
                                                                                                                                                                                                prev__candidate_Nitro_node__node0_inlined__sub6_13 = candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub6_13 from Nitro_node_n_inlined__sub6_13 
                                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub6_13 = candidate_Nitro_node_n_inlined__sub6_13.lgspOuthead;
                                                                                                                                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub6_13 != null)
                                                                                                                                                                                                {
                                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub6_13 = head_candidate_Nitro_edge__edge2_inlined__sub6_13;
                                                                                                                                                                                                    do
                                                                                                                                                                                                    {
                                                                                                                                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub6_13.lgspType.TypeID!=1) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        // Implicit Target Nitro_node__node1_inlined__sub6_13 from Nitro_edge__edge2_inlined__sub6_13 
                                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub6_13 = candidate_Nitro_edge__edge2_inlined__sub6_13.lgspTarget;
                                                                                                                                                                                                        if(candidate_Nitro_node__node1_inlined__sub6_13.lgspType.TypeID!=3) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_Nitro_node__node1_inlined__sub6_13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        Rule_TNTTotallyFolded.Match_TNTTotallyFolded match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                                        Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed match__sub0 = new Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed();
                                                                                                                                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Methyl.Match_Methyl match__sub1 = new Pattern_Methyl.Match_Methyl();
                                                                                                                                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub2 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub3 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                                        match__sub3.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub4 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub4.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub5 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                                        match__sub5.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub6 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub6.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        match._node_c1 = candidate_TNTTotallyFolded_node_c1;
                                                                                                                                                                                                        match._node_c2 = candidate_TNTTotallyFolded_node_c2;
                                                                                                                                                                                                        match._node_c3 = candidate_TNTTotallyFolded_node_c3;
                                                                                                                                                                                                        match._node_c4 = candidate_TNTTotallyFolded_node_c4;
                                                                                                                                                                                                        match._node_c5 = candidate_TNTTotallyFolded_node_c5;
                                                                                                                                                                                                        match._node_c6 = candidate_TNTTotallyFolded_node_c6;
                                                                                                                                                                                                        match__sub0._node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                                                                                        match__sub1._node_anchor = candidate_Methyl_node_anchor_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._node_c = candidate_Methyl_node_c_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._node__node0 = candidate_Methyl_node__node0_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._node__node1 = candidate_Methyl_node__node1_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._node__node2 = candidate_Methyl_node__node2_inlined__sub1_8;
                                                                                                                                                                                                        match__sub2._node_anchor = candidate_Nitro_node_anchor_inlined__sub2_9;
                                                                                                                                                                                                        match__sub2._node_n = candidate_Nitro_node_n_inlined__sub2_9;
                                                                                                                                                                                                        match__sub2._node__node0 = candidate_Nitro_node__node0_inlined__sub2_9;
                                                                                                                                                                                                        match__sub2._node__node1 = candidate_Nitro_node__node1_inlined__sub2_9;
                                                                                                                                                                                                        match__sub3._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub3_10;
                                                                                                                                                                                                        match__sub3._node__node0 = candidate_Hydrogen_node__node0_inlined__sub3_10;
                                                                                                                                                                                                        match__sub4._node_anchor = candidate_Nitro_node_anchor_inlined__sub4_11;
                                                                                                                                                                                                        match__sub4._node_n = candidate_Nitro_node_n_inlined__sub4_11;
                                                                                                                                                                                                        match__sub4._node__node0 = candidate_Nitro_node__node0_inlined__sub4_11;
                                                                                                                                                                                                        match__sub4._node__node1 = candidate_Nitro_node__node1_inlined__sub4_11;
                                                                                                                                                                                                        match__sub5._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub5_12;
                                                                                                                                                                                                        match__sub5._node__node0 = candidate_Hydrogen_node__node0_inlined__sub5_12;
                                                                                                                                                                                                        match__sub6._node_anchor = candidate_Nitro_node_anchor_inlined__sub6_13;
                                                                                                                                                                                                        match__sub6._node_n = candidate_Nitro_node_n_inlined__sub6_13;
                                                                                                                                                                                                        match__sub6._node__node0 = candidate_Nitro_node__node0_inlined__sub6_13;
                                                                                                                                                                                                        match__sub6._node__node1 = candidate_Nitro_node__node1_inlined__sub6_13;
                                                                                                                                                                                                        match__sub0._edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7;
                                                                                                                                                                                                        match__sub0._edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7;
                                                                                                                                                                                                        match__sub1._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                                                                                                                        match__sub1._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                                                                                                                        match__sub2._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub2_9;
                                                                                                                                                                                                        match__sub2._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                                                                                                                                                        match__sub2._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                                                                                                                                        match__sub3._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                                                                                                                                                        match__sub4._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                                                                                                        match__sub4._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                                                                        match__sub4._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                                                        match__sub5._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                                                                        match__sub6._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                                        match__sub6._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                                        match__sub6._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub6_13;
                                                                                                                                                                                                        match.__sub0 = match__sub0;
                                                                                                                                                                                                        match.__sub1 = match__sub1;
                                                                                                                                                                                                        match.__sub2 = match__sub2;
                                                                                                                                                                                                        match.__sub3 = match__sub3;
                                                                                                                                                                                                        match.__sub4 = match__sub4;
                                                                                                                                                                                                        match.__sub5 = match__sub5;
                                                                                                                                                                                                        match.__sub6 = match__sub6;
                                                                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub6_13.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub6_13);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub6_13.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub6_13);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub6_13.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub6_13);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub4_11.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub4_11);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub4_11.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub4_11);
                                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub5_12.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub5_12);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub4_11.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub4_11);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_8.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub1_8);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_8.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub1_8);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_8.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub1_8);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub2_9.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub2_9);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub2_9.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub2_9);
                                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub3_10.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub3_10);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7);
                                                                                                                                                                                                            candidate_Methyl_node_anchor_inlined__sub1_8.MoveOutHeadAfter(candidate_Methyl_edge__edge0_inlined__sub1_8);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub2_9.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub2_9);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7);
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7);
                                                                                                                                                                                                            graph.MoveHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7);
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags = candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub6_13;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7;
                                                                                                                                                                                                            candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags = candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub4_11;
                                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags = candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub4_11;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub4_11.lgspFlags = candidate_Nitro_node_n_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub4_11;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                                                                                                            candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub2_9;
                                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub2_9;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub3_10;
                                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_8.lgspFlags = candidate_Methyl_node_c_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_8;
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub2_9.lgspFlags = candidate_Nitro_node_n_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub2_9;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_9;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                                                                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
                                                                                                                                                                                                            return matches;
                                                                                                                                                                                                        }
                                                                                                                                                                                                    }
                                                                                                                                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub6_13 = candidate_Nitro_edge__edge2_inlined__sub6_13.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub6_13 );
                                                                                                                                                                                                }
                                                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags = candidate_Nitro_node__node0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub6_13;
                                                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub6_13;
                                                                                                                                                                                            }
                                                                                                                                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub6_13 = candidate_Nitro_edge__edge1_inlined__sub6_13.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub6_13 );
                                                                                                                                                                                        }
                                                                                                                                                                                        candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub6_13;
                                                                                                                                                                                    }
                                                                                                                                                                                    while( (candidate_Nitro_edge__edge0_inlined__sub6_13 = candidate_Nitro_edge__edge0_inlined__sub6_13.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub6_13 );
                                                                                                                                                                                }
                                                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7;
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_7 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags = candidate_Nitro_node__node1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub4_11;
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub4_11;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub4_11 = candidate_Nitro_edge__edge2_inlined__sub4_11.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub4_11 );
                                                                                                                                                                }
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags = candidate_Nitro_node__node0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub4_11;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub4_11;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub4_11 = candidate_Nitro_edge__edge1_inlined__sub4_11.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub4_11 );
                                                                                                                                                        }
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_12;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub5_12 = candidate_Hydrogen_edge__edge0_inlined__sub5_12.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub5_12 );
                                                                                                                                                }
                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7;
                                                                                                                                            }
                                                                                                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_7 );
                                                                                                                                        }
                                                                                                                                        candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_7;
                                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7;
                                                                                                                                    }
                                                                                                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_7 );
                                                                                                                                }
                                                                                                                                candidate_Nitro_node_n_inlined__sub4_11.lgspFlags = candidate_Nitro_node_n_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub4_11;
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub4_11;
                                                                                                                            }
                                                                                                                            while( (candidate_Nitro_edge__edge0_inlined__sub4_11 = candidate_Nitro_edge__edge0_inlined__sub4_11.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub4_11 );
                                                                                                                        }
                                                                                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_7;
                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7;
                                                                                                                    }
                                                                                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_7 );
                                                                                                                }
                                                                                                                candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub1_8;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_8;
                                                                                                            }
                                                                                                            while( (candidate_Methyl_edge__edge3_inlined__sub1_8 = candidate_Methyl_edge__edge3_inlined__sub1_8.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub1_8 );
                                                                                                        }
                                                                                                        candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_8;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_8;
                                                                                                    }
                                                                                                    while( (candidate_Methyl_edge__edge2_inlined__sub1_8 = candidate_Methyl_edge__edge2_inlined__sub1_8.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub1_8 );
                                                                                                }
                                                                                                candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_8;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_8;
                                                                                            }
                                                                                            while( (candidate_Methyl_edge__edge1_inlined__sub1_8 = candidate_Methyl_edge__edge1_inlined__sub1_8.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub1_8 );
                                                                                        }
                                                                                        candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags = candidate_Nitro_node__node1_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub2_9;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub2_9;
                                                                                    }
                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub2_9 = candidate_Nitro_edge__edge2_inlined__sub2_9.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub2_9 );
                                                                                }
                                                                                candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags = candidate_Nitro_node__node0_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub2_9;
                                                                                candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub2_9;
                                                                            }
                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub2_9 = candidate_Nitro_edge__edge1_inlined__sub2_9.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub2_9 );
                                                                        }
                                                                        candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub3_10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub3_10;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_10;
                                                                    }
                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub3_10 = candidate_Hydrogen_edge__edge0_inlined__sub3_10.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub3_10 );
                                                                }
                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7;
                                                            }
                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_7 );
                                                        }
                                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_7;
                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7;
                                                    }
                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_7 );
                                                }
                                                candidate_Methyl_node_c_inlined__sub1_8.lgspFlags = candidate_Methyl_node_c_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_8;
                                                candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_8;
                                            }
                                            while( (candidate_Methyl_edge__edge0_inlined__sub1_8 = candidate_Methyl_edge__edge0_inlined__sub1_8.lgspOutNext) != head_candidate_Methyl_edge__edge0_inlined__sub1_8 );
                                        }
                                        candidate_Nitro_node_n_inlined__sub2_9.lgspFlags = candidate_Nitro_node_n_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub2_9;
                                        candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub2_9;
                                    }
                                    while( (candidate_Nitro_edge__edge0_inlined__sub2_9 = candidate_Nitro_edge__edge0_inlined__sub2_9.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub2_9 );
                                }
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_7;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7;
                            }
                            while( (candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_7 );
                        }
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7;
                    }
                    while( (candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_7 );
                }
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_7;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_7;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_7;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches)
        {
            foreach(Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNTTotallyFolded.IMatch_TNTTotallyFolded>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNTChain
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTChain.IMatch_TNTChain match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNTChain : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNTChain
    {
        public Action_TNTChain()
            : base(Rule_TNTChain.Instance.patternGraph)
        {
            _rulePattern = Rule_TNTChain.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNTChain _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNTChain"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNTChain.Match_TNTChain, Rule_TNTChain.IMatch_TNTChain> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNTChain Instance { get { return instance; } set { instance = value; } }
        private static Action_TNTChain instance = new Action_TNTChain();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNTChain.Match_TNTChain, Rule_TNTChain.IMatch_TNTChain>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 
            int type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = graph.edgesByTypeHeads[type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14], candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspTypeNext; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 != head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspTypeNext)
            {
                uint prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source BenzolRingC123456Exposed_node_c1_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspSource;
                if(candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target BenzolRingC123456Exposed_node_c2_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspTarget;
                if(candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                if((candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element TNTChain_node_c2 assigned from other element BenzolRingC123456Exposed_node_c2_inlined__sub0_14 
                GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                if(candidate_TNTChain_node_c2.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                // Element ToluolCoreThenTriNitro_node_c2_inlined__sub1_15 assigned from other element TNTChain_node_c2 
                GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c2_inlined__sub1_15 = candidate_TNTChain_node_c2;
                if(candidate_ToluolCoreThenTriNitro_node_c2_inlined__sub1_15.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                // Element TNTChain_node_c1 assigned from other element BenzolRingC123456Exposed_node_c1_inlined__sub0_14 
                GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                if(candidate_TNTChain_node_c1.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                // Element ToluolCoreThenTriNitro_node_c1_inlined__sub1_15 assigned from other element TNTChain_node_c1 
                GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c1_inlined__sub1_15 = candidate_TNTChain_node_c1;
                if(candidate_ToluolCoreThenTriNitro_node_c1_inlined__sub1_15.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                    continue;
                }
                // Extend Outgoing BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 from BenzolRingC123456Exposed_node_c1_inlined__sub0_14 
                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspOuthead;
                if(head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                    do
                    {
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspTarget != candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14) {
                            continue;
                        }
                        if((candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                        prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 from BenzolRingC123456Exposed_node_c2_inlined__sub0_14 
                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspOuthead;
                        if(head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                            do
                            {
                                if(candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target BenzolRingC123456Exposed_node_c3_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 
                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspTarget;
                                if(candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element TNTChain_node_c3 assigned from other element BenzolRingC123456Exposed_node_c3_inlined__sub0_14 
                                GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                if(candidate_TNTChain_node_c3.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                    continue;
                                }
                                // Element ToluolCoreThenTriNitro_node_c3_inlined__sub1_15 assigned from other element TNTChain_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c3_inlined__sub1_15 = candidate_TNTChain_node_c3;
                                if(candidate_ToluolCoreThenTriNitro_node_c3_inlined__sub1_15.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                    continue;
                                }
                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 from BenzolRingC123456Exposed_node_c3_inlined__sub0_14 
                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspOuthead;
                                if(head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                    do
                                    {
                                        if(candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                        prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target BenzolRingC123456Exposed_node_c4_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 
                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspTarget;
                                        if(candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspType.TypeID!=1) {
                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                            continue;
                                        }
                                        if((candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                            continue;
                                        }
                                        uint prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                        prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Element TNTChain_node_c4 assigned from other element BenzolRingC123456Exposed_node_c4_inlined__sub0_14 
                                        GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                        if(candidate_TNTChain_node_c4.lgspType.TypeID!=1) {
                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                            continue;
                                        }
                                        // Element ToluolCoreThenTriNitro_node_c4_inlined__sub1_15 assigned from other element TNTChain_node_c4 
                                        GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c4_inlined__sub1_15 = candidate_TNTChain_node_c4;
                                        if(candidate_ToluolCoreThenTriNitro_node_c4_inlined__sub1_15.lgspType.TypeID!=1) {
                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                            continue;
                                        }
                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 from BenzolRingC123456Exposed_node_c3_inlined__sub0_14 
                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspOuthead;
                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                            do
                                            {
                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspTarget != candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14) {
                                                    continue;
                                                }
                                                if((candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 from BenzolRingC123456Exposed_node_c4_inlined__sub0_14 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspOuthead;
                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                    do
                                                    {
                                                        if(candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target BenzolRingC123456Exposed_node_c5_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 
                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspTarget;
                                                        if(candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                        prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element TNTChain_node_c5 assigned from other element BenzolRingC123456Exposed_node_c5_inlined__sub0_14 
                                                        GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                        if(candidate_TNTChain_node_c5.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                            continue;
                                                        }
                                                        // Element ToluolCoreThenTriNitro_node_c5_inlined__sub1_15 assigned from other element TNTChain_node_c5 
                                                        GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c5_inlined__sub1_15 = candidate_TNTChain_node_c5;
                                                        if(candidate_ToluolCoreThenTriNitro_node_c5_inlined__sub1_15.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                            continue;
                                                        }
                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 from BenzolRingC123456Exposed_node_c5_inlined__sub0_14 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspOuthead;
                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                            do
                                                            {
                                                                if(candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target BenzolRingC123456Exposed_node_c6_inlined__sub0_14 from BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 
                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspTarget;
                                                                if(candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Element TNTChain_node_c6 assigned from other element BenzolRingC123456Exposed_node_c6_inlined__sub0_14 
                                                                GRGEN_LGSP.LGSPNode candidate_TNTChain_node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                if(candidate_TNTChain_node_c6.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                    continue;
                                                                }
                                                                // Element ToluolCoreThenTriNitro_node_c6_inlined__sub1_15 assigned from other element TNTChain_node_c6 
                                                                GRGEN_LGSP.LGSPNode candidate_ToluolCoreThenTriNitro_node_c6_inlined__sub1_15 = candidate_TNTChain_node_c6;
                                                                if(candidate_ToluolCoreThenTriNitro_node_c6_inlined__sub1_15.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                    candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                    continue;
                                                                }
                                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 from BenzolRingC123456Exposed_node_c5_inlined__sub0_14 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspOuthead;
                                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                    do
                                                                    {
                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspTarget != candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 from BenzolRingC123456Exposed_node_c6_inlined__sub0_14 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspOuthead;
                                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 = head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                            do
                                                                            {
                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspTarget != candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                // Push subpattern matching task for _sub3_inlined__sub1_15
                                                                                PatternAction_TriNitro taskFor__sub3_inlined__sub1_15 = PatternAction_TriNitro.getNewTask(actionEnv, openTasks);
                                                                                taskFor__sub3_inlined__sub1_15.TriNitro_node_c2 = candidate_ToluolCoreThenTriNitro_node_c2_inlined__sub1_15;
                                                                                taskFor__sub3_inlined__sub1_15.TriNitro_node_c4 = candidate_ToluolCoreThenTriNitro_node_c4_inlined__sub1_15;
                                                                                taskFor__sub3_inlined__sub1_15.TriNitro_node_c6 = candidate_ToluolCoreThenTriNitro_node_c6_inlined__sub1_15;
                                                                                taskFor__sub3_inlined__sub1_15.searchPatternpath = false;
                                                                                taskFor__sub3_inlined__sub1_15.matchOfNestingPattern = null;
                                                                                taskFor__sub3_inlined__sub1_15.lastMatchAtPreviousNestingLevel = null;
                                                                                openTasks.Push(taskFor__sub3_inlined__sub1_15);
                                                                                // Push subpattern matching task for _sub2_inlined__sub1_15
                                                                                PatternAction_Hydrogen taskFor__sub2_inlined__sub1_15 = PatternAction_Hydrogen.getNewTask(actionEnv, openTasks);
                                                                                taskFor__sub2_inlined__sub1_15.Hydrogen_node_anchor = candidate_ToluolCoreThenTriNitro_node_c5_inlined__sub1_15;
                                                                                taskFor__sub2_inlined__sub1_15.searchPatternpath = false;
                                                                                taskFor__sub2_inlined__sub1_15.matchOfNestingPattern = null;
                                                                                taskFor__sub2_inlined__sub1_15.lastMatchAtPreviousNestingLevel = null;
                                                                                openTasks.Push(taskFor__sub2_inlined__sub1_15);
                                                                                // Push subpattern matching task for _sub1_inlined__sub1_15
                                                                                PatternAction_Hydrogen taskFor__sub1_inlined__sub1_15 = PatternAction_Hydrogen.getNewTask(actionEnv, openTasks);
                                                                                taskFor__sub1_inlined__sub1_15.Hydrogen_node_anchor = candidate_ToluolCoreThenTriNitro_node_c3_inlined__sub1_15;
                                                                                taskFor__sub1_inlined__sub1_15.searchPatternpath = false;
                                                                                taskFor__sub1_inlined__sub1_15.matchOfNestingPattern = null;
                                                                                taskFor__sub1_inlined__sub1_15.lastMatchAtPreviousNestingLevel = null;
                                                                                openTasks.Push(taskFor__sub1_inlined__sub1_15);
                                                                                // Push subpattern matching task for _sub0_inlined__sub1_15
                                                                                PatternAction_Methyl taskFor__sub0_inlined__sub1_15 = PatternAction_Methyl.getNewTask(actionEnv, openTasks);
                                                                                taskFor__sub0_inlined__sub1_15.Methyl_node_anchor = candidate_ToluolCoreThenTriNitro_node_c1_inlined__sub1_15;
                                                                                taskFor__sub0_inlined__sub1_15.searchPatternpath = false;
                                                                                taskFor__sub0_inlined__sub1_15.matchOfNestingPattern = null;
                                                                                taskFor__sub0_inlined__sub1_15.lastMatchAtPreviousNestingLevel = null;
                                                                                openTasks.Push(taskFor__sub0_inlined__sub1_15);
                                                                                uint prevGlobal__candidate_TNTChain_node_c1;
                                                                                prevGlobal__candidate_TNTChain_node_c1 = candidate_TNTChain_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_TNTChain_node_c2;
                                                                                prevGlobal__candidate_TNTChain_node_c2 = candidate_TNTChain_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_TNTChain_node_c3;
                                                                                prevGlobal__candidate_TNTChain_node_c3 = candidate_TNTChain_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_TNTChain_node_c4;
                                                                                prevGlobal__candidate_TNTChain_node_c4 = candidate_TNTChain_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_TNTChain_node_c5;
                                                                                prevGlobal__candidate_TNTChain_node_c5 = candidate_TNTChain_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_TNTChain_node_c6;
                                                                                prevGlobal__candidate_TNTChain_node_c6 = candidate_TNTChain_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_TNTChain_node_c6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                uint prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                                prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace;
                                                                                // Match subpatterns 
                                                                                openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
                                                                                // Pop subpattern matching task for _sub0_inlined__sub1_15
                                                                                openTasks.Pop();
                                                                                PatternAction_Methyl.releaseTask(taskFor__sub0_inlined__sub1_15);
                                                                                // Pop subpattern matching task for _sub1_inlined__sub1_15
                                                                                openTasks.Pop();
                                                                                PatternAction_Hydrogen.releaseTask(taskFor__sub1_inlined__sub1_15);
                                                                                // Pop subpattern matching task for _sub2_inlined__sub1_15
                                                                                openTasks.Pop();
                                                                                PatternAction_Hydrogen.releaseTask(taskFor__sub2_inlined__sub1_15);
                                                                                // Pop subpattern matching task for _sub3_inlined__sub1_15
                                                                                openTasks.Pop();
                                                                                PatternAction_TriNitro.releaseTask(taskFor__sub3_inlined__sub1_15);
                                                                                // Check whether subpatterns were found 
                                                                                if(matchesList.Count>0) {
                                                                                    // subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it
                                                                                    foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                                                                                    {
                                                                                        Rule_TNTChain.Match_TNTChain match = matches.GetNextUnfilledPosition();
                                                                                        Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed match__sub0 = new Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed();
                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                        Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro match__sub1 = new Pattern_ToluolCoreThenTriNitro.Match_ToluolCoreThenTriNitro();
                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                        match._node_c1 = candidate_TNTChain_node_c1;
                                                                                        match._node_c2 = candidate_TNTChain_node_c2;
                                                                                        match._node_c3 = candidate_TNTChain_node_c3;
                                                                                        match._node_c4 = candidate_TNTChain_node_c4;
                                                                                        match._node_c5 = candidate_TNTChain_node_c5;
                                                                                        match._node_c6 = candidate_TNTChain_node_c6;
                                                                                        match__sub0._node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                                                                                        match__sub0._node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                                                                                        match__sub0._node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                                                                        match__sub0._node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                                                                        match__sub0._node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                                                        match__sub0._node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                                        match__sub1._node_c1 = candidate_ToluolCoreThenTriNitro_node_c1_inlined__sub1_15;
                                                                                        match__sub1._node_c2 = candidate_ToluolCoreThenTriNitro_node_c2_inlined__sub1_15;
                                                                                        match__sub1._node_c3 = candidate_ToluolCoreThenTriNitro_node_c3_inlined__sub1_15;
                                                                                        match__sub1._node_c4 = candidate_ToluolCoreThenTriNitro_node_c4_inlined__sub1_15;
                                                                                        match__sub1._node_c5 = candidate_ToluolCoreThenTriNitro_node_c5_inlined__sub1_15;
                                                                                        match__sub1._node_c6 = candidate_ToluolCoreThenTriNitro_node_c6_inlined__sub1_15;
                                                                                        match__sub0._edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                        match__sub0._edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                        match__sub0._edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                        match__sub0._edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                        match__sub0._edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                        match__sub0._edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                                        match__sub0._edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                        match__sub0._edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                        match__sub0._edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                                        match.__sub0 = match__sub0;
                                                                                        match.__sub1 = match__sub1;
                                                                                        match__sub1.__sub0 = (@Pattern_Methyl.Match_Methyl)currentFoundPartialMatch.Pop();
                                                                                        match__sub1.__sub0._matchOfEnclosingPattern = match__sub1;
                                                                                        match__sub1.__sub1 = (@Pattern_Hydrogen.Match_Hydrogen)currentFoundPartialMatch.Pop();
                                                                                        match__sub1.__sub1._matchOfEnclosingPattern = match__sub1;
                                                                                        match__sub1.__sub2 = (@Pattern_Hydrogen.Match_Hydrogen)currentFoundPartialMatch.Pop();
                                                                                        match__sub1.__sub2._matchOfEnclosingPattern = match__sub1;
                                                                                        match__sub1.__sub3 = (@Pattern_TriNitro.Match_TriNitro)currentFoundPartialMatch.Pop();
                                                                                        match__sub1.__sub3._matchOfEnclosingPattern = match__sub1;
                                                                                        matches.PositionWasFilledFixIt();
                                                                                    }
                                                                                    matchesList.Clear();
                                                                                    // if enough matches were found, we leave
                                                                                    if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                    {
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                        candidate_TNTChain_node_c6.lgspFlags = candidate_TNTChain_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c6;
                                                                                        candidate_TNTChain_node_c5.lgspFlags = candidate_TNTChain_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c5;
                                                                                        candidate_TNTChain_node_c4.lgspFlags = candidate_TNTChain_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c4;
                                                                                        candidate_TNTChain_node_c3.lgspFlags = candidate_TNTChain_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c3;
                                                                                        candidate_TNTChain_node_c2.lgspFlags = candidate_TNTChain_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c2;
                                                                                        candidate_TNTChain_node_c1.lgspFlags = candidate_TNTChain_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c1;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                                                                                        candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                        return matches;
                                                                                    }
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                    candidate_TNTChain_node_c6.lgspFlags = candidate_TNTChain_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c6;
                                                                                    candidate_TNTChain_node_c5.lgspFlags = candidate_TNTChain_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c5;
                                                                                    candidate_TNTChain_node_c4.lgspFlags = candidate_TNTChain_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c4;
                                                                                    candidate_TNTChain_node_c3.lgspFlags = candidate_TNTChain_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c3;
                                                                                    candidate_TNTChain_node_c2.lgspFlags = candidate_TNTChain_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c2;
                                                                                    candidate_TNTChain_node_c1.lgspFlags = candidate_TNTChain_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c1;
                                                                                    continue;
                                                                                }
                                                                                candidate_TNTChain_node_c1.lgspFlags = candidate_TNTChain_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c1;
                                                                                candidate_TNTChain_node_c2.lgspFlags = candidate_TNTChain_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c2;
                                                                                candidate_TNTChain_node_c3.lgspFlags = candidate_TNTChain_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c3;
                                                                                candidate_TNTChain_node_c4.lgspFlags = candidate_TNTChain_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c4;
                                                                                candidate_TNTChain_node_c5.lgspFlags = candidate_TNTChain_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c5;
                                                                                candidate_TNTChain_node_c6.lgspFlags = candidate_TNTChain_node_c6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_TNTChain_node_c6;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED_BY_ENCLOSING_PATTERN << isoSpace) | prevGlobal__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                            }
                                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_14 );
                                                                        }
                                                                        candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14;
                                                                    }
                                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_14 );
                                                                }
                                                                candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_14;
                                                                candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14;
                                                            }
                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_14 );
                                                        }
                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_14;
                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14;
                                                    }
                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_14 );
                                                }
                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14;
                                            }
                                            while( (candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_14 );
                                        }
                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_14;
                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14;
                                    }
                                    while( (candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_14 );
                                }
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_14;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14;
                            }
                            while( (candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_14 );
                        }
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14;
                    }
                    while( (candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_14 );
                }
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_14;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_14;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_14;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTChain.IMatch_TNTChain match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches)
        {
            foreach(Rule_TNTChain.IMatch_TNTChain match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNTChain.IMatch_TNTChain match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNTChain.IMatch_TNTChain)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNTChain.IMatch_TNTChain>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_ToluolCore
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_ToluolCore.IMatch_ToluolCore match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_ToluolCore : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_ToluolCore
    {
        public Action_ToluolCore()
            : base(Rule_ToluolCore.Instance.patternGraph)
        {
            _rulePattern = Rule_ToluolCore.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_ToluolCore _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "ToluolCore"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_ToluolCore.Match_ToluolCore, Rule_ToluolCore.IMatch_ToluolCore> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_ToluolCore Instance { get { return instance; } set { instance = value; } }
        private static Action_ToluolCore instance = new Action_ToluolCore();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_ToluolCore.Match_ToluolCore, Rule_ToluolCore.IMatch_ToluolCore>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup Methyl_edge__edge0_inlined__sub1_17 
            int type_id_candidate_Methyl_edge__edge0_inlined__sub1_17 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub1_17 = graph.edgesByTypeHeads[type_id_candidate_Methyl_edge__edge0_inlined__sub1_17], candidate_Methyl_edge__edge0_inlined__sub1_17 = head_candidate_Methyl_edge__edge0_inlined__sub1_17.lgspTypeNext; candidate_Methyl_edge__edge0_inlined__sub1_17 != head_candidate_Methyl_edge__edge0_inlined__sub1_17; candidate_Methyl_edge__edge0_inlined__sub1_17 = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspTypeNext)
            {
                uint prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                prev__candidate_Methyl_edge__edge0_inlined__sub1_17 = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source Methyl_node_anchor_inlined__sub1_17 from Methyl_edge__edge0_inlined__sub1_17 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub1_17 = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspSource;
                if(candidate_Methyl_node_anchor_inlined__sub1_17.lgspType.TypeID!=1) {
                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                    continue;
                }
                uint prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                prev__candidate_Methyl_node_anchor_inlined__sub1_17 = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target Methyl_node_c_inlined__sub1_17 from Methyl_edge__edge0_inlined__sub1_17 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub1_17 = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspTarget;
                if(candidate_Methyl_node_c_inlined__sub1_17.lgspType.TypeID!=1) {
                    candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                    continue;
                }
                if((candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                    continue;
                }
                uint prev__candidate_Methyl_node_c_inlined__sub1_17;
                prev__candidate_Methyl_node_c_inlined__sub1_17 = candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_node_c_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element ToluolCore_node_c1 assigned from other element Methyl_node_anchor_inlined__sub1_17 
                GRGEN_LGSP.LGSPNode candidate_ToluolCore_node_c1 = candidate_Methyl_node_anchor_inlined__sub1_17;
                if(candidate_ToluolCore_node_c1.lgspType.TypeID!=1) {
                    candidate_Methyl_node_c_inlined__sub1_17.lgspFlags = candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_17;
                    candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                    continue;
                }
                // Element BenzolRingC1Exposed_node_c1_inlined__sub0_16 assigned from other element ToluolCore_node_c1 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16 = candidate_ToluolCore_node_c1;
                if(candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16.lgspType.TypeID!=1) {
                    candidate_Methyl_node_c_inlined__sub1_17.lgspFlags = candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_17;
                    candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                    continue;
                }
                // Extend Outgoing Methyl_edge__edge1_inlined__sub1_17 from Methyl_node_c_inlined__sub1_17 
                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub1_17 = candidate_Methyl_node_c_inlined__sub1_17.lgspOuthead;
                if(head_candidate_Methyl_edge__edge1_inlined__sub1_17 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub1_17 = head_candidate_Methyl_edge__edge1_inlined__sub1_17;
                    do
                    {
                        if(candidate_Methyl_edge__edge1_inlined__sub1_17.lgspType.TypeID!=1) {
                            continue;
                        }
                        if((candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_Methyl_edge__edge1_inlined__sub1_17;
                        prev__candidate_Methyl_edge__edge1_inlined__sub1_17 = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Implicit Target Methyl_node__node0_inlined__sub1_17 from Methyl_edge__edge1_inlined__sub1_17 
                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub1_17 = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspTarget;
                        if(candidate_Methyl_node__node0_inlined__sub1_17.lgspType.TypeID!=2) {
                            candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_17;
                            continue;
                        }
                        uint prev__candidate_Methyl_node__node0_inlined__sub1_17;
                        prev__candidate_Methyl_node__node0_inlined__sub1_17 = candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing Methyl_edge__edge2_inlined__sub1_17 from Methyl_node_c_inlined__sub1_17 
                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub1_17 = candidate_Methyl_node_c_inlined__sub1_17.lgspOuthead;
                        if(head_candidate_Methyl_edge__edge2_inlined__sub1_17 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub1_17 = head_candidate_Methyl_edge__edge2_inlined__sub1_17;
                            do
                            {
                                if(candidate_Methyl_edge__edge2_inlined__sub1_17.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_Methyl_edge__edge2_inlined__sub1_17;
                                prev__candidate_Methyl_edge__edge2_inlined__sub1_17 = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target Methyl_node__node1_inlined__sub1_17 from Methyl_edge__edge2_inlined__sub1_17 
                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub1_17 = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspTarget;
                                if(candidate_Methyl_node__node1_inlined__sub1_17.lgspType.TypeID!=2) {
                                    candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_17;
                                    continue;
                                }
                                if((candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_17;
                                    continue;
                                }
                                uint prev__candidate_Methyl_node__node1_inlined__sub1_17;
                                prev__candidate_Methyl_node__node1_inlined__sub1_17 = candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing Methyl_edge__edge3_inlined__sub1_17 from Methyl_node_c_inlined__sub1_17 
                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub1_17 = candidate_Methyl_node_c_inlined__sub1_17.lgspOuthead;
                                if(head_candidate_Methyl_edge__edge3_inlined__sub1_17 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub1_17 = head_candidate_Methyl_edge__edge3_inlined__sub1_17;
                                    do
                                    {
                                        if(candidate_Methyl_edge__edge3_inlined__sub1_17.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Methyl_edge__edge3_inlined__sub1_17;
                                        prev__candidate_Methyl_edge__edge3_inlined__sub1_17 = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Methyl_node__node2_inlined__sub1_17 from Methyl_edge__edge3_inlined__sub1_17 
                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub1_17 = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspTarget;
                                        if(candidate_Methyl_node__node2_inlined__sub1_17.lgspType.TypeID!=2) {
                                            candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_17;
                                            continue;
                                        }
                                        if((candidate_Methyl_node__node2_inlined__sub1_17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_17;
                                            continue;
                                        }
                                        // Extend Outgoing BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 from BenzolRingC1Exposed_node_c1_inlined__sub0_16 
                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16.lgspOuthead;
                                        if(head_candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                            do
                                            {
                                                if(candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                                prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target BenzolRingC1Exposed_node_c2_inlined__sub0_16 from BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 
                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspTarget;
                                                if(candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspType.TypeID!=1) {
                                                    candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                                    continue;
                                                }
                                                if((candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16;
                                                prev__candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 from BenzolRingC1Exposed_node_c1_inlined__sub0_16 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16.lgspOuthead;
                                                if(head_candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16;
                                                    do
                                                    {
                                                        if(candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if(candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspTarget != candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16;
                                                        prev__candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 from BenzolRingC1Exposed_node_c2_inlined__sub0_16 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspOuthead;
                                                        if(head_candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                            do
                                                            {
                                                                if(candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                                prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target BenzolRingC1Exposed_node_c3_inlined__sub0_16 from BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 
                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspTarget;
                                                                if(candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16;
                                                                prev__candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 from BenzolRingC1Exposed_node_c3_inlined__sub0_16 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspOuthead;
                                                                if(head_candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                    do
                                                                    {
                                                                        if(candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                        prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target BenzolRingC1Exposed_node_c4_inlined__sub0_16 from BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 
                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspTarget;
                                                                        if(candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                            candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16;
                                                                        prev__candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 from BenzolRingC1Exposed_node_c3_inlined__sub0_16 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspOuthead;
                                                                        if(head_candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16;
                                                                            do
                                                                            {
                                                                                if(candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if(candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspTarget != candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16;
                                                                                prev__candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 from BenzolRingC1Exposed_node_c4_inlined__sub0_16 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspOuthead;
                                                                                if(head_candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                        prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target BenzolRingC1Exposed_node_c5_inlined__sub0_16 from BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 
                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspTarget;
                                                                                        if(candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                            candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16;
                                                                                        prev__candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 from BenzolRingC1Exposed_node_c5_inlined__sub0_16 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspOuthead;
                                                                                        if(head_candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                                prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target BenzolRingC1Exposed_node_c6_inlined__sub0_16 from BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 
                                                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspTarget;
                                                                                                if(candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                                    candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                                    continue;
                                                                                                }
                                                                                                // Extend Outgoing BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 from BenzolRingC1Exposed_node_c5_inlined__sub0_16 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspOuthead;
                                                                                                if(head_candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if(candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspTarget != candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16;
                                                                                                        prev__candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 from BenzolRingC1Exposed_node_c6_inlined__sub0_16 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 = candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16.lgspOuthead;
                                                                                                        if(head_candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 = head_candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if(candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16.lgspTarget != candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                Rule_ToluolCore.Match_ToluolCore match = matches.GetNextUnfilledPosition();
                                                                                                                Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed match__sub0 = new Pattern_BenzolRingC1Exposed.Match_BenzolRingC1Exposed();
                                                                                                                match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                Pattern_Methyl.Match_Methyl match__sub1 = new Pattern_Methyl.Match_Methyl();
                                                                                                                match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                match._node_c1 = candidate_ToluolCore_node_c1;
                                                                                                                match__sub0._node_c1 = candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16;
                                                                                                                match__sub0._node_c2 = candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16;
                                                                                                                match__sub0._node_c3 = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16;
                                                                                                                match__sub0._node_c4 = candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16;
                                                                                                                match__sub0._node_c5 = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16;
                                                                                                                match__sub0._node_c6 = candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16;
                                                                                                                match__sub1._node_anchor = candidate_Methyl_node_anchor_inlined__sub1_17;
                                                                                                                match__sub1._node_c = candidate_Methyl_node_c_inlined__sub1_17;
                                                                                                                match__sub1._node__node0 = candidate_Methyl_node__node0_inlined__sub1_17;
                                                                                                                match__sub1._node__node1 = candidate_Methyl_node__node1_inlined__sub1_17;
                                                                                                                match__sub1._node__node2 = candidate_Methyl_node__node2_inlined__sub1_17;
                                                                                                                match__sub0._edge__edge0 = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge1 = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge2 = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge3 = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge4 = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge5 = candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge6 = candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge7 = candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16;
                                                                                                                match__sub0._edge__edge8 = candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16;
                                                                                                                match__sub1._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub1_17;
                                                                                                                match__sub1._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub1_17;
                                                                                                                match__sub1._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub1_17;
                                                                                                                match__sub1._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub1_17;
                                                                                                                match.__sub0 = match__sub0;
                                                                                                                match.__sub1 = match__sub1;
                                                                                                                matches.PositionWasFilledFixIt();
                                                                                                                // if enough matches were found, we leave
                                                                                                                if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                {
                                                                                                                    candidate_BenzolRingC1Exposed_node_c6_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16);
                                                                                                                    candidate_BenzolRingC1Exposed_node_c1_inlined__sub0_16.MoveOutHeadAfter(candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_17.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub1_17);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_17.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub1_17);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_17.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub1_17);
                                                                                                                    graph.MoveHeadAfter(candidate_Methyl_edge__edge0_inlined__sub1_17);
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16;
                                                                                                                    candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_17;
                                                                                                                    candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_17;
                                                                                                                    candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_17;
                                                                                                                    candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_17;
                                                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_17;
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_17.lgspFlags = candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_17;
                                                                                                                    candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                                                                                                                    candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
                                                                                                                    return matches;
                                                                                                                }
                                                                                                            }
                                                                                                            while( (candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge5_inlined__sub0_16 );
                                                                                                        }
                                                                                                        candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16;
                                                                                                    }
                                                                                                    while( (candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge8_inlined__sub0_16 );
                                                                                                }
                                                                                                candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16;
                                                                                            }
                                                                                            while( (candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge4_inlined__sub0_16 );
                                                                                        }
                                                                                        candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c5_inlined__sub0_16;
                                                                                        candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16;
                                                                                    }
                                                                                    while( (candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge3_inlined__sub0_16 );
                                                                                }
                                                                                candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16;
                                                                            }
                                                                            while( (candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge7_inlined__sub0_16 );
                                                                        }
                                                                        candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c4_inlined__sub0_16;
                                                                        candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16;
                                                                    }
                                                                    while( (candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge2_inlined__sub0_16 );
                                                                }
                                                                candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c3_inlined__sub0_16;
                                                                candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16;
                                                            }
                                                            while( (candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge1_inlined__sub0_16 );
                                                        }
                                                        candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16;
                                                    }
                                                    while( (candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge6_inlined__sub0_16 );
                                                }
                                                candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_node_c2_inlined__sub0_16;
                                                candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16;
                                            }
                                            while( (candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 = candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16.lgspOutNext) != head_candidate_BenzolRingC1Exposed_edge__edge0_inlined__sub0_16 );
                                        }
                                        candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_17;
                                    }
                                    while( (candidate_Methyl_edge__edge3_inlined__sub1_17 = candidate_Methyl_edge__edge3_inlined__sub1_17.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub1_17 );
                                }
                                candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_17;
                                candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_17;
                            }
                            while( (candidate_Methyl_edge__edge2_inlined__sub1_17 = candidate_Methyl_edge__edge2_inlined__sub1_17.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub1_17 );
                        }
                        candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_17;
                        candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_17;
                    }
                    while( (candidate_Methyl_edge__edge1_inlined__sub1_17 = candidate_Methyl_edge__edge1_inlined__sub1_17.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub1_17 );
                }
                candidate_Methyl_node_c_inlined__sub1_17.lgspFlags = candidate_Methyl_node_c_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_17;
                candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_17;
                candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_17;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_ToluolCore.IMatch_ToluolCore match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches)
        {
            foreach(Rule_ToluolCore.IMatch_ToluolCore match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_ToluolCore.IMatch_ToluolCore match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_ToluolCore.IMatch_ToluolCore)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_ToluolCore.IMatch_ToluolCore>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_ToluolCoreNotC6Nitro
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_ToluolCoreNotC6Nitro : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_ToluolCoreNotC6Nitro
    {
        public Action_ToluolCoreNotC6Nitro()
            : base(Rule_ToluolCoreNotC6Nitro.Instance.patternGraph)
        {
            _rulePattern = Rule_ToluolCoreNotC6Nitro.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_ToluolCoreNotC6Nitro _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "ToluolCoreNotC6Nitro"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_ToluolCoreNotC6Nitro.Match_ToluolCoreNotC6Nitro, Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_ToluolCoreNotC6Nitro Instance { get { return instance; } set { instance = value; } }
        private static Action_ToluolCoreNotC6Nitro instance = new Action_ToluolCoreNotC6Nitro();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_ToluolCoreNotC6Nitro.Match_ToluolCoreNotC6Nitro, Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup Methyl_edge__edge0_inlined__sub1_19 
            int type_id_candidate_Methyl_edge__edge0_inlined__sub1_19 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub1_19 = graph.edgesByTypeHeads[type_id_candidate_Methyl_edge__edge0_inlined__sub1_19], candidate_Methyl_edge__edge0_inlined__sub1_19 = head_candidate_Methyl_edge__edge0_inlined__sub1_19.lgspTypeNext; candidate_Methyl_edge__edge0_inlined__sub1_19 != head_candidate_Methyl_edge__edge0_inlined__sub1_19; candidate_Methyl_edge__edge0_inlined__sub1_19 = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspTypeNext)
            {
                uint prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                prev__candidate_Methyl_edge__edge0_inlined__sub1_19 = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source Methyl_node_anchor_inlined__sub1_19 from Methyl_edge__edge0_inlined__sub1_19 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub1_19 = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspSource;
                if(candidate_Methyl_node_anchor_inlined__sub1_19.lgspType.TypeID!=1) {
                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                    continue;
                }
                uint prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                prev__candidate_Methyl_node_anchor_inlined__sub1_19 = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target Methyl_node_c_inlined__sub1_19 from Methyl_edge__edge0_inlined__sub1_19 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub1_19 = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspTarget;
                if(candidate_Methyl_node_c_inlined__sub1_19.lgspType.TypeID!=1) {
                    candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                    continue;
                }
                if((candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                    continue;
                }
                uint prev__candidate_Methyl_node_c_inlined__sub1_19;
                prev__candidate_Methyl_node_c_inlined__sub1_19 = candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_Methyl_node_c_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element ToluolCoreNotC6Nitro_node_c1 assigned from other element Methyl_node_anchor_inlined__sub1_19 
                GRGEN_LGSP.LGSPNode candidate_ToluolCoreNotC6Nitro_node_c1 = candidate_Methyl_node_anchor_inlined__sub1_19;
                if(candidate_ToluolCoreNotC6Nitro_node_c1.lgspType.TypeID!=1) {
                    candidate_Methyl_node_c_inlined__sub1_19.lgspFlags = candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_19;
                    candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                    continue;
                }
                // Element BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18 assigned from other element ToluolCoreNotC6Nitro_node_c1 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18 = candidate_ToluolCoreNotC6Nitro_node_c1;
                if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18.lgspType.TypeID!=1) {
                    candidate_Methyl_node_c_inlined__sub1_19.lgspFlags = candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_19;
                    candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                    continue;
                }
                // Extend Outgoing Methyl_edge__edge1_inlined__sub1_19 from Methyl_node_c_inlined__sub1_19 
                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub1_19 = candidate_Methyl_node_c_inlined__sub1_19.lgspOuthead;
                if(head_candidate_Methyl_edge__edge1_inlined__sub1_19 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub1_19 = head_candidate_Methyl_edge__edge1_inlined__sub1_19;
                    do
                    {
                        if(candidate_Methyl_edge__edge1_inlined__sub1_19.lgspType.TypeID!=1) {
                            continue;
                        }
                        if((candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_Methyl_edge__edge1_inlined__sub1_19;
                        prev__candidate_Methyl_edge__edge1_inlined__sub1_19 = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Implicit Target Methyl_node__node0_inlined__sub1_19 from Methyl_edge__edge1_inlined__sub1_19 
                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub1_19 = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspTarget;
                        if(candidate_Methyl_node__node0_inlined__sub1_19.lgspType.TypeID!=2) {
                            candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_19;
                            continue;
                        }
                        uint prev__candidate_Methyl_node__node0_inlined__sub1_19;
                        prev__candidate_Methyl_node__node0_inlined__sub1_19 = candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing Methyl_edge__edge2_inlined__sub1_19 from Methyl_node_c_inlined__sub1_19 
                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub1_19 = candidate_Methyl_node_c_inlined__sub1_19.lgspOuthead;
                        if(head_candidate_Methyl_edge__edge2_inlined__sub1_19 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub1_19 = head_candidate_Methyl_edge__edge2_inlined__sub1_19;
                            do
                            {
                                if(candidate_Methyl_edge__edge2_inlined__sub1_19.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_Methyl_edge__edge2_inlined__sub1_19;
                                prev__candidate_Methyl_edge__edge2_inlined__sub1_19 = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target Methyl_node__node1_inlined__sub1_19 from Methyl_edge__edge2_inlined__sub1_19 
                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub1_19 = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspTarget;
                                if(candidate_Methyl_node__node1_inlined__sub1_19.lgspType.TypeID!=2) {
                                    candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_19;
                                    continue;
                                }
                                if((candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_19;
                                    continue;
                                }
                                uint prev__candidate_Methyl_node__node1_inlined__sub1_19;
                                prev__candidate_Methyl_node__node1_inlined__sub1_19 = candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing Methyl_edge__edge3_inlined__sub1_19 from Methyl_node_c_inlined__sub1_19 
                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub1_19 = candidate_Methyl_node_c_inlined__sub1_19.lgspOuthead;
                                if(head_candidate_Methyl_edge__edge3_inlined__sub1_19 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub1_19 = head_candidate_Methyl_edge__edge3_inlined__sub1_19;
                                    do
                                    {
                                        if(candidate_Methyl_edge__edge3_inlined__sub1_19.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Methyl_edge__edge3_inlined__sub1_19;
                                        prev__candidate_Methyl_edge__edge3_inlined__sub1_19 = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Methyl_node__node2_inlined__sub1_19 from Methyl_edge__edge3_inlined__sub1_19 
                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub1_19 = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspTarget;
                                        if(candidate_Methyl_node__node2_inlined__sub1_19.lgspType.TypeID!=2) {
                                            candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_19;
                                            continue;
                                        }
                                        if((candidate_Methyl_node__node2_inlined__sub1_19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_19;
                                            continue;
                                        }
                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18 
                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18.lgspOuthead;
                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                            do
                                            {
                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 
                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspTarget;
                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspType.TypeID!=1) {
                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                                    continue;
                                                }
                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                                    continue;
                                                }
                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18;
                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18.lgspOuthead;
                                                if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18;
                                                    do
                                                    {
                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18;
                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspOuthead;
                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                            do
                                                            {
                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 
                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspTarget;
                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18;
                                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspOuthead;
                                                                if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                    do
                                                                    {
                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 
                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspTarget;
                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                            continue;
                                                                        }
                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18;
                                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspOuthead;
                                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18;
                                                                            do
                                                                            {
                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18;
                                                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspOuthead;
                                                                                if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 
                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspTarget;
                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18;
                                                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspOuthead;
                                                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 
                                                                                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspTarget;
                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                    continue;
                                                                                                }
                                                                                                // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspOuthead;
                                                                                                if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                        prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18.lgspOuthead;
                                                                                                        if(head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18.lgspTarget != candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // NegativePattern 
                                                                                                                {
                                                                                                                    ++isoSpace;
                                                                                                                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18 
                                                                                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18.lgspOuthead;
                                                                                                                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 != null)
                                                                                                                    {
                                                                                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18;
                                                                                                                        do
                                                                                                                        {
                                                                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                                                continue;
                                                                                                                            }
                                                                                                                            uint prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18;
                                                                                                                            prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                            // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 
                                                                                                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspTarget;
                                                                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18.lgspType.TypeID!=4) {
                                                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18;
                                                                                                                                continue;
                                                                                                                            }
                                                                                                                            // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18 
                                                                                                                            GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18.lgspOuthead;
                                                                                                                            if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 != null)
                                                                                                                            {
                                                                                                                                GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18;
                                                                                                                                do
                                                                                                                                {
                                                                                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                                                        continue;
                                                                                                                                    }
                                                                                                                                    if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                    {
                                                                                                                                        continue;
                                                                                                                                    }
                                                                                                                                    uint prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18;
                                                                                                                                    prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                    // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 
                                                                                                                                    GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspTarget;
                                                                                                                                    if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspType.TypeID!=3) {
                                                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18;
                                                                                                                                        continue;
                                                                                                                                    }
                                                                                                                                    uint prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18;
                                                                                                                                    prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                    // Extend Outgoing BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18 
                                                                                                                                    GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node_n_inlined__sub0_18.lgspOuthead;
                                                                                                                                    if(head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 != null)
                                                                                                                                    {
                                                                                                                                        GRGEN_LGSP.LGSPEdge candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 = head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18;
                                                                                                                                        do
                                                                                                                                        {
                                                                                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18.lgspType.TypeID!=1) {
                                                                                                                                                continue;
                                                                                                                                            }
                                                                                                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                            {
                                                                                                                                                continue;
                                                                                                                                            }
                                                                                                                                            // Implicit Target BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_inlined__sub0_18 from BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 
                                                                                                                                            GRGEN_LGSP.LGSPNode candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18.lgspTarget;
                                                                                                                                            if(candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_inlined__sub0_18.lgspType.TypeID!=3) {
                                                                                                                                                continue;
                                                                                                                                            }
                                                                                                                                            if((candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node1_inlined__sub0_18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                            {
                                                                                                                                                continue;
                                                                                                                                            }
                                                                                                                                            // negative pattern found
                                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18;
                                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18;
                                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18;
                                                                                                                                            --isoSpace;
                                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                                                            goto label3;
                                                                                                                                        }
                                                                                                                                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge2_inlined__sub0_18 );
                                                                                                                                    }
                                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_node__node0_inlined__sub0_18;
                                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18;
                                                                                                                                }
                                                                                                                                while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge1_inlined__sub0_18 );
                                                                                                                            }
                                                                                                                            candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev_neg_0_inlined__sub0_18_in_ToluolCoreNotC6Nitro__candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18;
                                                                                                                        }
                                                                                                                        while( (candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_neg_0_edge__edge0_inlined__sub0_18 );
                                                                                                                    }
                                                                                                                    --isoSpace;
                                                                                                                }
                                                                                                                Rule_ToluolCoreNotC6Nitro.Match_ToluolCoreNotC6Nitro match = matches.GetNextUnfilledPosition();
                                                                                                                Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro match__sub0 = new Pattern_BenzolRingC1ExposedNotC6Nitro.Match_BenzolRingC1ExposedNotC6Nitro();
                                                                                                                match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                Pattern_Methyl.Match_Methyl match__sub1 = new Pattern_Methyl.Match_Methyl();
                                                                                                                match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                match._node_c1 = candidate_ToluolCoreNotC6Nitro_node_c1;
                                                                                                                match__sub0._node_c1 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18;
                                                                                                                match__sub0._node_c2 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18;
                                                                                                                match__sub0._node_c3 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18;
                                                                                                                match__sub0._node_c4 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18;
                                                                                                                match__sub0._node_c5 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18;
                                                                                                                match__sub0._node_c6 = candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18;
                                                                                                                match__sub1._node_anchor = candidate_Methyl_node_anchor_inlined__sub1_19;
                                                                                                                match__sub1._node_c = candidate_Methyl_node_c_inlined__sub1_19;
                                                                                                                match__sub1._node__node0 = candidate_Methyl_node__node0_inlined__sub1_19;
                                                                                                                match__sub1._node__node1 = candidate_Methyl_node__node1_inlined__sub1_19;
                                                                                                                match__sub1._node__node2 = candidate_Methyl_node__node2_inlined__sub1_19;
                                                                                                                match__sub0._edge__edge0 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge1 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge2 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge3 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge4 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge5 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge6 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge7 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18;
                                                                                                                match__sub0._edge__edge8 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                                match__sub1._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub1_19;
                                                                                                                match__sub1._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub1_19;
                                                                                                                match__sub1._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub1_19;
                                                                                                                match__sub1._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub1_19;
                                                                                                                match.__sub0 = match__sub0;
                                                                                                                match.__sub1 = match__sub1;
                                                                                                                matches.PositionWasFilledFixIt();
                                                                                                                // if enough matches were found, we leave
                                                                                                                if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                {
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c6_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c1_inlined__sub0_18.MoveOutHeadAfter(candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_19.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub1_19);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_19.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub1_19);
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_19.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub1_19);
                                                                                                                    graph.MoveHeadAfter(candidate_Methyl_edge__edge0_inlined__sub1_19);
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18;
                                                                                                                    candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_19;
                                                                                                                    candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_19;
                                                                                                                    candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_19;
                                                                                                                    candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_19;
                                                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_19;
                                                                                                                    candidate_Methyl_node_c_inlined__sub1_19.lgspFlags = candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_19;
                                                                                                                    candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                                                                                                                    candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
                                                                                                                    return matches;
                                                                                                                }
                                                                                                            }
                                                                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge5_inlined__sub0_18 );
                                                                                                        }
                                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18;
                                                                                                    }
                                                                                                    while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge8_inlined__sub0_18 );
                                                                                                }
                                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18;
label3: ;
                                                                                            }
                                                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge4_inlined__sub0_18 );
                                                                                        }
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c5_inlined__sub0_18;
                                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18;
                                                                                    }
                                                                                    while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge3_inlined__sub0_18 );
                                                                                }
                                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18;
                                                                            }
                                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge7_inlined__sub0_18 );
                                                                        }
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c4_inlined__sub0_18;
                                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18;
                                                                    }
                                                                    while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge2_inlined__sub0_18 );
                                                                }
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c3_inlined__sub0_18;
                                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18;
                                                            }
                                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge1_inlined__sub0_18 );
                                                        }
                                                        candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18;
                                                    }
                                                    while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge6_inlined__sub0_18 );
                                                }
                                                candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_node_c2_inlined__sub0_18;
                                                candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18;
                                            }
                                            while( (candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 = candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18.lgspOutNext) != head_candidate_BenzolRingC1ExposedNotC6Nitro_edge__edge0_inlined__sub0_18 );
                                        }
                                        candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_19;
                                    }
                                    while( (candidate_Methyl_edge__edge3_inlined__sub1_19 = candidate_Methyl_edge__edge3_inlined__sub1_19.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub1_19 );
                                }
                                candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_19;
                                candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_19;
                            }
                            while( (candidate_Methyl_edge__edge2_inlined__sub1_19 = candidate_Methyl_edge__edge2_inlined__sub1_19.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub1_19 );
                        }
                        candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_19;
                        candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_19;
                    }
                    while( (candidate_Methyl_edge__edge1_inlined__sub1_19 = candidate_Methyl_edge__edge1_inlined__sub1_19.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub1_19 );
                }
                candidate_Methyl_node_c_inlined__sub1_19.lgspFlags = candidate_Methyl_node_c_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_19;
                candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags = candidate_Methyl_node_anchor_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_anchor_inlined__sub1_19;
                candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_19;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches)
        {
            foreach(Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_ToluolCoreNotC6Nitro.IMatch_ToluolCoreNotC6Nitro>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_Toluol
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_Toluol.IMatch_Toluol match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_Toluol : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_Toluol
    {
        public Action_Toluol()
            : base(Rule_Toluol.Instance.patternGraph)
        {
            _rulePattern = Rule_Toluol.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_Toluol _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "Toluol"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_Toluol.Match_Toluol, Rule_Toluol.IMatch_Toluol> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_Toluol Instance { get { return instance; } set { instance = value; } }
        private static Action_Toluol instance = new Action_Toluol();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_Toluol.Match_Toluol, Rule_Toluol.IMatch_Toluol>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 
            int type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 = graph.edgesByTypeHeads[type_id_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20], candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspTypeNext; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 != head_candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20; candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspTypeNext)
            {
                uint prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source BenzolRingC123456Exposed_node_c1_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspSource;
                if(candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target BenzolRingC123456Exposed_node_c2_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20 
                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspTarget;
                if(candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                if((candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                uint prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element Toluol_node_c2 assigned from other element BenzolRingC123456Exposed_node_c2_inlined__sub0_20 
                GRGEN_LGSP.LGSPNode candidate_Toluol_node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                if(candidate_Toluol_node_c2.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                // Element Hydrogen_node_anchor_inlined__sub2_22 assigned from other element Toluol_node_c2 
                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub2_22 = candidate_Toluol_node_c2;
                if(candidate_Hydrogen_node_anchor_inlined__sub2_22.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                // Element Toluol_node_c1 assigned from other element BenzolRingC123456Exposed_node_c1_inlined__sub0_20 
                GRGEN_LGSP.LGSPNode candidate_Toluol_node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                if(candidate_Toluol_node_c1.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                // Element Methyl_node_anchor_inlined__sub1_21 assigned from other element Toluol_node_c1 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub1_21 = candidate_Toluol_node_c1;
                if(candidate_Methyl_node_anchor_inlined__sub1_21.lgspType.TypeID!=1) {
                    candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                    candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                    continue;
                }
                // Extend Outgoing BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 from BenzolRingC123456Exposed_node_c1_inlined__sub0_20 
                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspOuthead;
                if(head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20;
                    do
                    {
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspTarget != candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20) {
                            continue;
                        }
                        if((candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20;
                        prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 from BenzolRingC123456Exposed_node_c2_inlined__sub0_20 
                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspOuthead;
                        if(head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                            do
                            {
                                if(candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target BenzolRingC123456Exposed_node_c3_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 
                                GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspTarget;
                                if(candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                    continue;
                                }
                                if((candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                    continue;
                                }
                                uint prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element Toluol_node_c3 assigned from other element BenzolRingC123456Exposed_node_c3_inlined__sub0_20 
                                GRGEN_LGSP.LGSPNode candidate_Toluol_node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                if(candidate_Toluol_node_c3.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                    continue;
                                }
                                // Element Hydrogen_node_anchor_inlined__sub3_23 assigned from other element Toluol_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub3_23 = candidate_Toluol_node_c3;
                                if(candidate_Hydrogen_node_anchor_inlined__sub3_23.lgspType.TypeID!=1) {
                                    candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                    candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                    continue;
                                }
                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub2_22 from Hydrogen_node_anchor_inlined__sub2_22 
                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub2_22 = candidate_Hydrogen_node_anchor_inlined__sub2_22.lgspOuthead;
                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub2_22 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub2_22 = head_candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                    do
                                    {
                                        if(candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub2_22 = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Hydrogen_node__node0_inlined__sub2_22 from Hydrogen_edge__edge0_inlined__sub2_22 
                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub2_22 = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspTarget;
                                        if(candidate_Hydrogen_node__node0_inlined__sub2_22.lgspType.TypeID!=2) {
                                            candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                            continue;
                                        }
                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub2_22;
                                        prev__candidate_Hydrogen_node__node0_inlined__sub2_22 = candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing Methyl_edge__edge0_inlined__sub1_21 from Methyl_node_anchor_inlined__sub1_21 
                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub1_21 = candidate_Methyl_node_anchor_inlined__sub1_21.lgspOuthead;
                                        if(head_candidate_Methyl_edge__edge0_inlined__sub1_21 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0_inlined__sub1_21 = head_candidate_Methyl_edge__edge0_inlined__sub1_21;
                                            do
                                            {
                                                if(candidate_Methyl_edge__edge0_inlined__sub1_21.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_edge__edge0_inlined__sub1_21;
                                                prev__candidate_Methyl_edge__edge0_inlined__sub1_21 = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target Methyl_node_c_inlined__sub1_21 from Methyl_edge__edge0_inlined__sub1_21 
                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub1_21 = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspTarget;
                                                if(candidate_Methyl_node_c_inlined__sub1_21.lgspType.TypeID!=1) {
                                                    candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_21;
                                                    continue;
                                                }
                                                if((candidate_Methyl_node_c_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_21;
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_node_c_inlined__sub1_21;
                                                prev__candidate_Methyl_node_c_inlined__sub1_21 = candidate_Methyl_node_c_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_node_c_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 from BenzolRingC123456Exposed_node_c3_inlined__sub0_20 
                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspOuthead;
                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                    do
                                                    {
                                                        if(candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target BenzolRingC123456Exposed_node_c4_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 
                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspTarget;
                                                        if(candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                            continue;
                                                        }
                                                        if((candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                            continue;
                                                        }
                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                        prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element Toluol_node_c4 assigned from other element BenzolRingC123456Exposed_node_c4_inlined__sub0_20 
                                                        GRGEN_LGSP.LGSPNode candidate_Toluol_node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                        if(candidate_Toluol_node_c4.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                            continue;
                                                        }
                                                        // Element Hydrogen_node_anchor_inlined__sub4_24 assigned from other element Toluol_node_c4 
                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub4_24 = candidate_Toluol_node_c4;
                                                        if(candidate_Hydrogen_node_anchor_inlined__sub4_24.lgspType.TypeID!=1) {
                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                            continue;
                                                        }
                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 from BenzolRingC123456Exposed_node_c3_inlined__sub0_20 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspOuthead;
                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20;
                                                            do
                                                            {
                                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspTarget != candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20) {
                                                                    continue;
                                                                }
                                                                if((candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20;
                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub3_23 from Hydrogen_node_anchor_inlined__sub3_23 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub3_23 = candidate_Hydrogen_node_anchor_inlined__sub3_23.lgspOuthead;
                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub3_23 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub3_23 = head_candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                    do
                                                                    {
                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23 = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub3_23 from Hydrogen_edge__edge0_inlined__sub3_23 
                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub3_23 = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspTarget;
                                                                        if(candidate_Hydrogen_node__node0_inlined__sub3_23.lgspType.TypeID!=2) {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub3_23;
                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub3_23 = candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing Methyl_edge__edge1_inlined__sub1_21 from Methyl_node_c_inlined__sub1_21 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub1_21 = candidate_Methyl_node_c_inlined__sub1_21.lgspOuthead;
                                                                        if(head_candidate_Methyl_edge__edge1_inlined__sub1_21 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub1_21 = head_candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                            do
                                                                            {
                                                                                if(candidate_Methyl_edge__edge1_inlined__sub1_21.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                                prev__candidate_Methyl_edge__edge1_inlined__sub1_21 = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target Methyl_node__node0_inlined__sub1_21 from Methyl_edge__edge1_inlined__sub1_21 
                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub1_21 = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspTarget;
                                                                                if(candidate_Methyl_node__node0_inlined__sub1_21.lgspType.TypeID!=2) {
                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Methyl_node__node0_inlined__sub1_21;
                                                                                prev__candidate_Methyl_node__node0_inlined__sub1_21 = candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing Methyl_edge__edge2_inlined__sub1_21 from Methyl_node_c_inlined__sub1_21 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub1_21 = candidate_Methyl_node_c_inlined__sub1_21.lgspOuthead;
                                                                                if(head_candidate_Methyl_edge__edge2_inlined__sub1_21 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub1_21 = head_candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_Methyl_edge__edge2_inlined__sub1_21.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                        prev__candidate_Methyl_edge__edge2_inlined__sub1_21 = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target Methyl_node__node1_inlined__sub1_21 from Methyl_edge__edge2_inlined__sub1_21 
                                                                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub1_21 = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspTarget;
                                                                                        if(candidate_Methyl_node__node1_inlined__sub1_21.lgspType.TypeID!=2) {
                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Methyl_node__node1_inlined__sub1_21;
                                                                                        prev__candidate_Methyl_node__node1_inlined__sub1_21 = candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing Methyl_edge__edge3_inlined__sub1_21 from Methyl_node_c_inlined__sub1_21 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub1_21 = candidate_Methyl_node_c_inlined__sub1_21.lgspOuthead;
                                                                                        if(head_candidate_Methyl_edge__edge3_inlined__sub1_21 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub1_21 = head_candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_Methyl_edge__edge3_inlined__sub1_21.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                                prev__candidate_Methyl_edge__edge3_inlined__sub1_21 = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target Methyl_node__node2_inlined__sub1_21 from Methyl_edge__edge3_inlined__sub1_21 
                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub1_21 = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspTarget;
                                                                                                if(candidate_Methyl_node__node2_inlined__sub1_21.lgspType.TypeID!=2) {
                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_node__node2_inlined__sub1_21;
                                                                                                prev__candidate_Methyl_node__node2_inlined__sub1_21 = candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 from BenzolRingC123456Exposed_node_c4_inlined__sub0_20 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspOuthead;
                                                                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target BenzolRingC123456Exposed_node_c5_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspTarget;
                                                                                                        if(candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                        prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Element Toluol_node_c5 assigned from other element BenzolRingC123456Exposed_node_c5_inlined__sub0_20 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Toluol_node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                        if(candidate_Toluol_node_c5.lgspType.TypeID!=1) {
                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                            continue;
                                                                                                        }
                                                                                                        // Element Hydrogen_node_anchor_inlined__sub5_25 assigned from other element Toluol_node_c5 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub5_25 = candidate_Toluol_node_c5;
                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub5_25.lgspType.TypeID!=1) {
                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                            continue;
                                                                                                        }
                                                                                                        // Extend Outgoing Hydrogen_edge__edge0_inlined__sub4_24 from Hydrogen_node_anchor_inlined__sub4_24 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub4_24 = candidate_Hydrogen_node_anchor_inlined__sub4_24.lgspOuthead;
                                                                                                        if(head_candidate_Hydrogen_edge__edge0_inlined__sub4_24 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub4_24 = head_candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                                prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24 = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target Hydrogen_node__node0_inlined__sub4_24 from Hydrogen_edge__edge0_inlined__sub4_24 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub4_24 = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspTarget;
                                                                                                                if(candidate_Hydrogen_node__node0_inlined__sub4_24.lgspType.TypeID!=2) {
                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Hydrogen_node__node0_inlined__sub4_24;
                                                                                                                prev__candidate_Hydrogen_node__node0_inlined__sub4_24 = candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 from BenzolRingC123456Exposed_node_c5_inlined__sub0_20 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspOuthead;
                                                                                                                if(head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                        prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target BenzolRingC123456Exposed_node_c6_inlined__sub0_20 from BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspTarget;
                                                                                                                        if(candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                        prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Element Toluol_node_c6 assigned from other element BenzolRingC123456Exposed_node_c6_inlined__sub0_20 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Toluol_node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                        if(candidate_Toluol_node_c6.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Element Hydrogen_node_anchor_inlined__sub6_26 assigned from other element Toluol_node_c6 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub6_26 = candidate_Toluol_node_c6;
                                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub6_26.lgspType.TypeID!=1) {
                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 from BenzolRingC123456Exposed_node_c5_inlined__sub0_20 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspOuthead;
                                                                                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspTarget != candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20;
                                                                                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub5_25 from Hydrogen_node_anchor_inlined__sub5_25 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub5_25 = candidate_Hydrogen_node_anchor_inlined__sub5_25.lgspOuthead;
                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub5_25 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub5_25 = head_candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25 = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub5_25 from Hydrogen_edge__edge0_inlined__sub5_25 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub5_25 = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspTarget;
                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub5_25.lgspType.TypeID!=2) {
                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub5_25;
                                                                                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub5_25 = candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Extend Outgoing BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 from BenzolRingC123456Exposed_node_c6_inlined__sub0_20 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspOuthead;
                                                                                                                                        if(head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 = head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspTarget != candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20;
                                                                                                                                                prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub6_26 from Hydrogen_node_anchor_inlined__sub6_26 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub6_26 = candidate_Hydrogen_node_anchor_inlined__sub6_26.lgspOuthead;
                                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub6_26 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub6_26 = head_candidate_Hydrogen_edge__edge0_inlined__sub6_26;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub6_26.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub6_26.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub6_26 from Hydrogen_edge__edge0_inlined__sub6_26 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub6_26 = candidate_Hydrogen_edge__edge0_inlined__sub6_26.lgspTarget;
                                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub6_26.lgspType.TypeID!=2) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub6_26.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        Rule_Toluol.Match_Toluol match = matches.GetNextUnfilledPosition();
                                                                                                                                                        Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed match__sub0 = new Pattern_BenzolRingC123456Exposed.Match_BenzolRingC123456Exposed();
                                                                                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Methyl.Match_Methyl match__sub1 = new Pattern_Methyl.Match_Methyl();
                                                                                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub2 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                        match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub3 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                        match__sub3.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub4 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                        match__sub4.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub5 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                        match__sub5.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub6 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                        match__sub6.SetMatchOfEnclosingPattern(match);
                                                                                                                                                        match._node_c1 = candidate_Toluol_node_c1;
                                                                                                                                                        match._node_c2 = candidate_Toluol_node_c2;
                                                                                                                                                        match._node_c3 = candidate_Toluol_node_c3;
                                                                                                                                                        match._node_c4 = candidate_Toluol_node_c4;
                                                                                                                                                        match._node_c5 = candidate_Toluol_node_c5;
                                                                                                                                                        match._node_c6 = candidate_Toluol_node_c6;
                                                                                                                                                        match__sub0._node_c1 = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                                                                                                                                                        match__sub0._node_c2 = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                                                                                                                                                        match__sub0._node_c3 = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                                                                                                                                        match__sub0._node_c4 = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                                                                                                                        match__sub0._node_c5 = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                                                                        match__sub0._node_c6 = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                                                        match__sub1._node_anchor = candidate_Methyl_node_anchor_inlined__sub1_21;
                                                                                                                                                        match__sub1._node_c = candidate_Methyl_node_c_inlined__sub1_21;
                                                                                                                                                        match__sub1._node__node0 = candidate_Methyl_node__node0_inlined__sub1_21;
                                                                                                                                                        match__sub1._node__node1 = candidate_Methyl_node__node1_inlined__sub1_21;
                                                                                                                                                        match__sub1._node__node2 = candidate_Methyl_node__node2_inlined__sub1_21;
                                                                                                                                                        match__sub2._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub2_22;
                                                                                                                                                        match__sub2._node__node0 = candidate_Hydrogen_node__node0_inlined__sub2_22;
                                                                                                                                                        match__sub3._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub3_23;
                                                                                                                                                        match__sub3._node__node0 = candidate_Hydrogen_node__node0_inlined__sub3_23;
                                                                                                                                                        match__sub4._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub4_24;
                                                                                                                                                        match__sub4._node__node0 = candidate_Hydrogen_node__node0_inlined__sub4_24;
                                                                                                                                                        match__sub5._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub5_25;
                                                                                                                                                        match__sub5._node__node0 = candidate_Hydrogen_node__node0_inlined__sub5_25;
                                                                                                                                                        match__sub6._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub6_26;
                                                                                                                                                        match__sub6._node__node0 = candidate_Hydrogen_node__node0_inlined__sub6_26;
                                                                                                                                                        match__sub0._edge__edge0 = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge1 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge2 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge3 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge4 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge5 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge6 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge7 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20;
                                                                                                                                                        match__sub0._edge__edge8 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20;
                                                                                                                                                        match__sub1._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub1_21;
                                                                                                                                                        match__sub1._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                                                                                                        match__sub1._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                                                                                        match__sub1._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                                                                                        match__sub2._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                                                                                                                                        match__sub3._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                                                                                                        match__sub4._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                                                                        match__sub5._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                                        match__sub6._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub6_26;
                                                                                                                                                        match.__sub0 = match__sub0;
                                                                                                                                                        match.__sub1 = match__sub1;
                                                                                                                                                        match.__sub2 = match__sub2;
                                                                                                                                                        match.__sub3 = match__sub3;
                                                                                                                                                        match.__sub4 = match__sub4;
                                                                                                                                                        match.__sub5 = match__sub5;
                                                                                                                                                        match.__sub6 = match__sub6;
                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                        {
                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub6_26.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub6_26);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20);
                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub5_25.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub5_25);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20);
                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub4_24.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub4_24);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20);
                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_21.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub1_21);
                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_21.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub1_21);
                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_21.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub1_21);
                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub3_23.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub3_23);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20);
                                                                                                                                                            candidate_Methyl_node_anchor_inlined__sub1_21.MoveOutHeadAfter(candidate_Methyl_edge__edge0_inlined__sub1_21);
                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub2_22.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub2_22);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.MoveOutHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20);
                                                                                                                                                            graph.MoveHeadAfter(candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20);
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20;
                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub5_25;
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub4_24;
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                                                                            candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub3_23;
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                                                                                                                            candidate_Methyl_node_c_inlined__sub1_21.lgspFlags = candidate_Methyl_node_c_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_21;
                                                                                                                                                            candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_21;
                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_22;
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                                                                                                                                                            candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
                                                                                                                                                            return matches;
                                                                                                                                                        }
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub6_26 = candidate_Hydrogen_edge__edge0_inlined__sub6_26.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub6_26 );
                                                                                                                                                }
                                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20;
                                                                                                                                            }
                                                                                                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge5_inlined__sub0_20 );
                                                                                                                                        }
                                                                                                                                        candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub5_25;
                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub5_25;
                                                                                                                                    }
                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub5_25 = candidate_Hydrogen_edge__edge0_inlined__sub5_25.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub5_25 );
                                                                                                                                }
                                                                                                                                candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20;
                                                                                                                            }
                                                                                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge8_inlined__sub0_20 );
                                                                                                                        }
                                                                                                                        candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c6_inlined__sub0_20;
                                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20;
                                                                                                                    }
                                                                                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge4_inlined__sub0_20 );
                                                                                                                }
                                                                                                                candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub4_24;
                                                                                                                candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_24;
                                                                                                            }
                                                                                                            while( (candidate_Hydrogen_edge__edge0_inlined__sub4_24 = candidate_Hydrogen_edge__edge0_inlined__sub4_24.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub4_24 );
                                                                                                        }
                                                                                                        candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c5_inlined__sub0_20;
                                                                                                        candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20;
                                                                                                    }
                                                                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge3_inlined__sub0_20 );
                                                                                                }
                                                                                                candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub1_21;
                                                                                                candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub1_21;
                                                                                            }
                                                                                            while( (candidate_Methyl_edge__edge3_inlined__sub1_21 = candidate_Methyl_edge__edge3_inlined__sub1_21.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub1_21 );
                                                                                        }
                                                                                        candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub1_21;
                                                                                        candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub1_21;
                                                                                    }
                                                                                    while( (candidate_Methyl_edge__edge2_inlined__sub1_21 = candidate_Methyl_edge__edge2_inlined__sub1_21.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub1_21 );
                                                                                }
                                                                                candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags = candidate_Methyl_node__node0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub1_21;
                                                                                candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub1_21;
                                                                            }
                                                                            while( (candidate_Methyl_edge__edge1_inlined__sub1_21 = candidate_Methyl_edge__edge1_inlined__sub1_21.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub1_21 );
                                                                        }
                                                                        candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub3_23;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub3_23;
                                                                    }
                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub3_23 = candidate_Hydrogen_edge__edge0_inlined__sub3_23.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub3_23 );
                                                                }
                                                                candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20;
                                                            }
                                                            while( (candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge7_inlined__sub0_20 );
                                                        }
                                                        candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c4_inlined__sub0_20;
                                                        candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20;
                                                    }
                                                    while( (candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge2_inlined__sub0_20 );
                                                }
                                                candidate_Methyl_node_c_inlined__sub1_21.lgspFlags = candidate_Methyl_node_c_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub1_21;
                                                candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub1_21;
                                            }
                                            while( (candidate_Methyl_edge__edge0_inlined__sub1_21 = candidate_Methyl_edge__edge0_inlined__sub1_21.lgspOutNext) != head_candidate_Methyl_edge__edge0_inlined__sub1_21 );
                                        }
                                        candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_22;
                                        candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_22;
                                    }
                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub2_22 = candidate_Hydrogen_edge__edge0_inlined__sub2_22.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub2_22 );
                                }
                                candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c3_inlined__sub0_20;
                                candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20;
                            }
                            while( (candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge1_inlined__sub0_20 );
                        }
                        candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20;
                    }
                    while( (candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 = candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20.lgspOutNext) != head_candidate_BenzolRingC123456Exposed_edge__edge6_inlined__sub0_20 );
                }
                candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c2_inlined__sub0_20;
                candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_node_c1_inlined__sub0_20;
                candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags = candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_BenzolRingC123456Exposed_edge__edge0_inlined__sub0_20;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_Toluol.IMatch_Toluol match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches)
        {
            foreach(Rule_Toluol.IMatch_Toluol match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_Toluol.IMatch_Toluol match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_Toluol.IMatch_Toluol)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_Toluol.IMatch_Toluol>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNT
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNT.IMatch_TNT match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNT : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNT
    {
        public Action_TNT()
            : base(Rule_TNT.Instance.patternGraph)
        {
            _rulePattern = Rule_TNT.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNT _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNT"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNT.Match_TNT, Rule_TNT.IMatch_TNT> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNT Instance { get { return instance; } set { instance = value; } }
        private static Action_TNT instance = new Action_TNT();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNT.Match_TNT, Rule_TNT.IMatch_TNT>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup TNT_edge__edge0 
            int type_id_candidate_TNT_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_TNT_edge__edge0], candidate_TNT_edge__edge0 = head_candidate_TNT_edge__edge0.lgspTypeNext; candidate_TNT_edge__edge0 != head_candidate_TNT_edge__edge0; candidate_TNT_edge__edge0 = candidate_TNT_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_TNT_edge__edge0;
                prev__candidate_TNT_edge__edge0 = candidate_TNT_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNT_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source TNT_node_c1 from TNT_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNT_node_c1 = candidate_TNT_edge__edge0.lgspSource;
                if(candidate_TNT_node_c1.lgspType.TypeID!=1) {
                    candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNT_node_c1;
                prev__candidate_TNT_node_c1 = candidate_TNT_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNT_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target TNT_node_c2 from TNT_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNT_node_c2 = candidate_TNT_edge__edge0.lgspTarget;
                if(candidate_TNT_node_c2.lgspType.TypeID!=1) {
                    candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                    candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                    continue;
                }
                if((candidate_TNT_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                    candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNT_node_c2;
                prev__candidate_TNT_node_c2 = candidate_TNT_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNT_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element Nitro_node_anchor_inlined__sub1_28 assigned from other element TNT_node_c2 
                GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub1_28 = candidate_TNT_node_c2;
                if(candidate_Nitro_node_anchor_inlined__sub1_28.lgspType.TypeID!=1) {
                    candidate_TNT_node_c2.lgspFlags = candidate_TNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c2;
                    candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                    candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                    continue;
                }
                // Element Methyl_node_anchor_inlined__sub0_27 assigned from other element TNT_node_c1 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub0_27 = candidate_TNT_node_c1;
                if(candidate_Methyl_node_anchor_inlined__sub0_27.lgspType.TypeID!=1) {
                    candidate_TNT_node_c2.lgspFlags = candidate_TNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c2;
                    candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                    candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                    continue;
                }
                // Extend Outgoing TNT_edge__edge6 from TNT_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge6 = candidate_TNT_node_c1.lgspOuthead;
                if(head_candidate_TNT_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge6 = head_candidate_TNT_edge__edge6;
                    do
                    {
                        if(candidate_TNT_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_TNT_edge__edge6.lgspTarget != candidate_TNT_node_c2) {
                            continue;
                        }
                        if((candidate_TNT_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_TNT_edge__edge6;
                        prev__candidate_TNT_edge__edge6 = candidate_TNT_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_TNT_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing TNT_edge__edge1 from TNT_node_c2 
                        GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge1 = candidate_TNT_node_c2.lgspOuthead;
                        if(head_candidate_TNT_edge__edge1 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge1 = head_candidate_TNT_edge__edge1;
                            do
                            {
                                if(candidate_TNT_edge__edge1.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_TNT_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_TNT_edge__edge1;
                                prev__candidate_TNT_edge__edge1 = candidate_TNT_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNT_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target TNT_node_c3 from TNT_edge__edge1 
                                GRGEN_LGSP.LGSPNode candidate_TNT_node_c3 = candidate_TNT_edge__edge1.lgspTarget;
                                if(candidate_TNT_node_c3.lgspType.TypeID!=1) {
                                    candidate_TNT_edge__edge1.lgspFlags = candidate_TNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge1;
                                    continue;
                                }
                                if((candidate_TNT_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_TNT_edge__edge1.lgspFlags = candidate_TNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge1;
                                    continue;
                                }
                                uint prev__candidate_TNT_node_c3;
                                prev__candidate_TNT_node_c3 = candidate_TNT_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNT_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element Hydrogen_node_anchor_inlined__sub2_29 assigned from other element TNT_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub2_29 = candidate_TNT_node_c3;
                                if(candidate_Hydrogen_node_anchor_inlined__sub2_29.lgspType.TypeID!=1) {
                                    candidate_TNT_node_c3.lgspFlags = candidate_TNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c3;
                                    candidate_TNT_edge__edge1.lgspFlags = candidate_TNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge1;
                                    continue;
                                }
                                // Extend Outgoing Nitro_edge__edge0_inlined__sub1_28 from Nitro_node_anchor_inlined__sub1_28 
                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub1_28 = candidate_Nitro_node_anchor_inlined__sub1_28.lgspOuthead;
                                if(head_candidate_Nitro_edge__edge0_inlined__sub1_28 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub1_28 = head_candidate_Nitro_edge__edge0_inlined__sub1_28;
                                    do
                                    {
                                        if(candidate_Nitro_edge__edge0_inlined__sub1_28.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub1_28;
                                        prev__candidate_Nitro_edge__edge0_inlined__sub1_28 = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Nitro_node_n_inlined__sub1_28 from Nitro_edge__edge0_inlined__sub1_28 
                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub1_28 = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspTarget;
                                        if(candidate_Nitro_node_n_inlined__sub1_28.lgspType.TypeID!=4) {
                                            candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_28;
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_node_n_inlined__sub1_28;
                                        prev__candidate_Nitro_node_n_inlined__sub1_28 = candidate_Nitro_node_n_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_node_n_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing Methyl_edge__edge0_inlined__sub0_27 from Methyl_node_anchor_inlined__sub0_27 
                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub0_27 = candidate_Methyl_node_anchor_inlined__sub0_27.lgspOuthead;
                                        if(head_candidate_Methyl_edge__edge0_inlined__sub0_27 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0_inlined__sub0_27 = head_candidate_Methyl_edge__edge0_inlined__sub0_27;
                                            do
                                            {
                                                if(candidate_Methyl_edge__edge0_inlined__sub0_27.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_edge__edge0_inlined__sub0_27;
                                                prev__candidate_Methyl_edge__edge0_inlined__sub0_27 = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target Methyl_node_c_inlined__sub0_27 from Methyl_edge__edge0_inlined__sub0_27 
                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub0_27 = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspTarget;
                                                if(candidate_Methyl_node_c_inlined__sub0_27.lgspType.TypeID!=1) {
                                                    candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_27;
                                                    continue;
                                                }
                                                if((candidate_Methyl_node_c_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_27;
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_node_c_inlined__sub0_27;
                                                prev__candidate_Methyl_node_c_inlined__sub0_27 = candidate_Methyl_node_c_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_node_c_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing TNT_edge__edge2 from TNT_node_c3 
                                                GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge2 = candidate_TNT_node_c3.lgspOuthead;
                                                if(head_candidate_TNT_edge__edge2 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge2 = head_candidate_TNT_edge__edge2;
                                                    do
                                                    {
                                                        if(candidate_TNT_edge__edge2.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_TNT_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNT_edge__edge2;
                                                        prev__candidate_TNT_edge__edge2 = candidate_TNT_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNT_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target TNT_node_c4 from TNT_edge__edge2 
                                                        GRGEN_LGSP.LGSPNode candidate_TNT_node_c4 = candidate_TNT_edge__edge2.lgspTarget;
                                                        if(candidate_TNT_node_c4.lgspType.TypeID!=1) {
                                                            candidate_TNT_edge__edge2.lgspFlags = candidate_TNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge2;
                                                            continue;
                                                        }
                                                        if((candidate_TNT_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_TNT_edge__edge2.lgspFlags = candidate_TNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge2;
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNT_node_c4;
                                                        prev__candidate_TNT_node_c4 = candidate_TNT_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNT_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element Nitro_node_anchor_inlined__sub3_30 assigned from other element TNT_node_c4 
                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub3_30 = candidate_TNT_node_c4;
                                                        if(candidate_Nitro_node_anchor_inlined__sub3_30.lgspType.TypeID!=1) {
                                                            candidate_TNT_node_c4.lgspFlags = candidate_TNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c4;
                                                            candidate_TNT_edge__edge2.lgspFlags = candidate_TNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge2;
                                                            continue;
                                                        }
                                                        // Extend Outgoing TNT_edge__edge7 from TNT_node_c3 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge7 = candidate_TNT_node_c3.lgspOuthead;
                                                        if(head_candidate_TNT_edge__edge7 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge7 = head_candidate_TNT_edge__edge7;
                                                            do
                                                            {
                                                                if(candidate_TNT_edge__edge7.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_TNT_edge__edge7.lgspTarget != candidate_TNT_node_c4) {
                                                                    continue;
                                                                }
                                                                if((candidate_TNT_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_TNT_edge__edge7;
                                                                prev__candidate_TNT_edge__edge7 = candidate_TNT_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_TNT_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub2_29 from Hydrogen_node_anchor_inlined__sub2_29 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub2_29 = candidate_Hydrogen_node_anchor_inlined__sub2_29.lgspOuthead;
                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub2_29 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub2_29 = head_candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                    do
                                                                    {
                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub2_29 = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub2_29 from Hydrogen_edge__edge0_inlined__sub2_29 
                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub2_29 = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspTarget;
                                                                        if(candidate_Hydrogen_node__node0_inlined__sub2_29.lgspType.TypeID!=2) {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub2_29;
                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub2_29 = candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub1_28 from Nitro_node_n_inlined__sub1_28 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub1_28 = candidate_Nitro_node_n_inlined__sub1_28.lgspOuthead;
                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub1_28 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub1_28 = head_candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                            do
                                                                            {
                                                                                if(candidate_Nitro_edge__edge1_inlined__sub1_28.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub1_28 = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target Nitro_node__node0_inlined__sub1_28 from Nitro_edge__edge1_inlined__sub1_28 
                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub1_28 = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspTarget;
                                                                                if(candidate_Nitro_node__node0_inlined__sub1_28.lgspType.TypeID!=3) {
                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub1_28;
                                                                                prev__candidate_Nitro_node__node0_inlined__sub1_28 = candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub1_28 from Nitro_node_n_inlined__sub1_28 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub1_28 = candidate_Nitro_node_n_inlined__sub1_28.lgspOuthead;
                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub1_28 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub1_28 = head_candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub1_28.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub1_28 = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target Nitro_node__node1_inlined__sub1_28 from Nitro_edge__edge2_inlined__sub1_28 
                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub1_28 = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspTarget;
                                                                                        if(candidate_Nitro_node__node1_inlined__sub1_28.lgspType.TypeID!=3) {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub1_28;
                                                                                        prev__candidate_Nitro_node__node1_inlined__sub1_28 = candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing Methyl_edge__edge1_inlined__sub0_27 from Methyl_node_c_inlined__sub0_27 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub0_27 = candidate_Methyl_node_c_inlined__sub0_27.lgspOuthead;
                                                                                        if(head_candidate_Methyl_edge__edge1_inlined__sub0_27 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub0_27 = head_candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_Methyl_edge__edge1_inlined__sub0_27.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                                prev__candidate_Methyl_edge__edge1_inlined__sub0_27 = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target Methyl_node__node0_inlined__sub0_27 from Methyl_edge__edge1_inlined__sub0_27 
                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub0_27 = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspTarget;
                                                                                                if(candidate_Methyl_node__node0_inlined__sub0_27.lgspType.TypeID!=2) {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_node__node0_inlined__sub0_27;
                                                                                                prev__candidate_Methyl_node__node0_inlined__sub0_27 = candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing Methyl_edge__edge2_inlined__sub0_27 from Methyl_node_c_inlined__sub0_27 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub0_27 = candidate_Methyl_node_c_inlined__sub0_27.lgspOuthead;
                                                                                                if(head_candidate_Methyl_edge__edge2_inlined__sub0_27 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub0_27 = head_candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_Methyl_edge__edge2_inlined__sub0_27.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                        prev__candidate_Methyl_edge__edge2_inlined__sub0_27 = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target Methyl_node__node1_inlined__sub0_27 from Methyl_edge__edge2_inlined__sub0_27 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub0_27 = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspTarget;
                                                                                                        if(candidate_Methyl_node__node1_inlined__sub0_27.lgspType.TypeID!=2) {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_node__node1_inlined__sub0_27;
                                                                                                        prev__candidate_Methyl_node__node1_inlined__sub0_27 = candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing Methyl_edge__edge3_inlined__sub0_27 from Methyl_node_c_inlined__sub0_27 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub0_27 = candidate_Methyl_node_c_inlined__sub0_27.lgspOuthead;
                                                                                                        if(head_candidate_Methyl_edge__edge3_inlined__sub0_27 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub0_27 = head_candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_Methyl_edge__edge3_inlined__sub0_27.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                                prev__candidate_Methyl_edge__edge3_inlined__sub0_27 = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target Methyl_node__node2_inlined__sub0_27 from Methyl_edge__edge3_inlined__sub0_27 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub0_27 = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspTarget;
                                                                                                                if(candidate_Methyl_node__node2_inlined__sub0_27.lgspType.TypeID!=2) {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_node__node2_inlined__sub0_27;
                                                                                                                prev__candidate_Methyl_node__node2_inlined__sub0_27 = candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing TNT_edge__edge3 from TNT_node_c4 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge3 = candidate_TNT_node_c4.lgspOuthead;
                                                                                                                if(head_candidate_TNT_edge__edge3 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge3 = head_candidate_TNT_edge__edge3;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_TNT_edge__edge3.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNT_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNT_edge__edge3;
                                                                                                                        prev__candidate_TNT_edge__edge3 = candidate_TNT_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNT_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target TNT_node_c5 from TNT_edge__edge3 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNT_node_c5 = candidate_TNT_edge__edge3.lgspTarget;
                                                                                                                        if(candidate_TNT_node_c5.lgspType.TypeID!=1) {
                                                                                                                            candidate_TNT_edge__edge3.lgspFlags = candidate_TNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNT_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_TNT_edge__edge3.lgspFlags = candidate_TNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNT_node_c5;
                                                                                                                        prev__candidate_TNT_node_c5 = candidate_TNT_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNT_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Element Hydrogen_node_anchor_inlined__sub4_31 assigned from other element TNT_node_c5 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub4_31 = candidate_TNT_node_c5;
                                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub4_31.lgspType.TypeID!=1) {
                                                                                                                            candidate_TNT_node_c5.lgspFlags = candidate_TNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c5;
                                                                                                                            candidate_TNT_edge__edge3.lgspFlags = candidate_TNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Extend Outgoing Nitro_edge__edge0_inlined__sub3_30 from Nitro_node_anchor_inlined__sub3_30 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub3_30 = candidate_Nitro_node_anchor_inlined__sub3_30.lgspOuthead;
                                                                                                                        if(head_candidate_Nitro_edge__edge0_inlined__sub3_30 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub3_30 = head_candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_Nitro_edge__edge0_inlined__sub3_30.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                                prev__candidate_Nitro_edge__edge0_inlined__sub3_30 = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target Nitro_node_n_inlined__sub3_30 from Nitro_edge__edge0_inlined__sub3_30 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub3_30 = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspTarget;
                                                                                                                                if(candidate_Nitro_node_n_inlined__sub3_30.lgspType.TypeID!=4) {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_node_n_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Nitro_node_n_inlined__sub3_30;
                                                                                                                                prev__candidate_Nitro_node_n_inlined__sub3_30 = candidate_Nitro_node_n_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Nitro_node_n_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Extend Outgoing TNT_edge__edge4 from TNT_node_c5 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge4 = candidate_TNT_node_c5.lgspOuthead;
                                                                                                                                if(head_candidate_TNT_edge__edge4 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge4 = head_candidate_TNT_edge__edge4;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_TNT_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNT_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_TNT_edge__edge4;
                                                                                                                                        prev__candidate_TNT_edge__edge4 = candidate_TNT_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_TNT_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target TNT_node_c6 from TNT_edge__edge4 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNT_node_c6 = candidate_TNT_edge__edge4.lgspTarget;
                                                                                                                                        if(candidate_TNT_node_c6.lgspType.TypeID!=1) {
                                                                                                                                            candidate_TNT_edge__edge4.lgspFlags = candidate_TNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNT_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_TNT_edge__edge4.lgspFlags = candidate_TNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Element Nitro_node_anchor_inlined__sub5_32 assigned from other element TNT_node_c6 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub5_32 = candidate_TNT_node_c6;
                                                                                                                                        if(candidate_Nitro_node_anchor_inlined__sub5_32.lgspType.TypeID!=1) {
                                                                                                                                            candidate_TNT_edge__edge4.lgspFlags = candidate_TNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Extend Outgoing TNT_edge__edge8 from TNT_node_c5 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge8 = candidate_TNT_node_c5.lgspOuthead;
                                                                                                                                        if(head_candidate_TNT_edge__edge8 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge8 = head_candidate_TNT_edge__edge8;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_TNT_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_TNT_edge__edge8.lgspTarget != candidate_TNT_node_c6) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_TNT_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_TNT_edge__edge8;
                                                                                                                                                prev__candidate_TNT_edge__edge8 = candidate_TNT_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_TNT_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub4_31 from Hydrogen_node_anchor_inlined__sub4_31 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub4_31 = candidate_Hydrogen_node_anchor_inlined__sub4_31.lgspOuthead;
                                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub4_31 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub4_31 = head_candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31 = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub4_31 from Hydrogen_edge__edge0_inlined__sub4_31 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub4_31 = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspTarget;
                                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub4_31.lgspType.TypeID!=2) {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub4_31.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub3_30 from Nitro_node_n_inlined__sub3_30 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub3_30 = candidate_Nitro_node_n_inlined__sub3_30.lgspOuthead;
                                                                                                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub3_30 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub3_30 = head_candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_Nitro_edge__edge1_inlined__sub3_30.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub3_30 = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target Nitro_node__node0_inlined__sub3_30 from Nitro_edge__edge1_inlined__sub3_30 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub3_30 = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspTarget;
                                                                                                                                                                if(candidate_Nitro_node__node0_inlined__sub3_30.lgspType.TypeID!=3) {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub3_30;
                                                                                                                                                                prev__candidate_Nitro_node__node0_inlined__sub3_30 = candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub3_30 from Nitro_node_n_inlined__sub3_30 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub3_30 = candidate_Nitro_node_n_inlined__sub3_30.lgspOuthead;
                                                                                                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub3_30 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub3_30 = head_candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub3_30.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub3_30 = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target Nitro_node__node1_inlined__sub3_30 from Nitro_edge__edge2_inlined__sub3_30 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub3_30 = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspTarget;
                                                                                                                                                                        if(candidate_Nitro_node__node1_inlined__sub3_30.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub3_30;
                                                                                                                                                                        prev__candidate_Nitro_node__node1_inlined__sub3_30 = candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Extend Outgoing TNT_edge__edge5 from TNT_node_c6 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNT_edge__edge5 = candidate_TNT_node_c6.lgspOuthead;
                                                                                                                                                                        if(head_candidate_TNT_edge__edge5 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNT_edge__edge5 = head_candidate_TNT_edge__edge5;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_TNT_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if(candidate_TNT_edge__edge5.lgspTarget != candidate_TNT_node_c1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_TNT_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                uint prev__candidate_TNT_edge__edge5;
                                                                                                                                                                                prev__candidate_TNT_edge__edge5 = candidate_TNT_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                candidate_TNT_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                // Extend Outgoing Nitro_edge__edge0_inlined__sub5_32 from Nitro_node_anchor_inlined__sub5_32 
                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub5_32 = candidate_Nitro_node_anchor_inlined__sub5_32.lgspOuthead;
                                                                                                                                                                                if(head_candidate_Nitro_edge__edge0_inlined__sub5_32 != null)
                                                                                                                                                                                {
                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub5_32 = head_candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                    do
                                                                                                                                                                                    {
                                                                                                                                                                                        if(candidate_Nitro_edge__edge0_inlined__sub5_32.lgspType.TypeID!=1) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                        prev__candidate_Nitro_edge__edge0_inlined__sub5_32 = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        // Implicit Target Nitro_node_n_inlined__sub5_32 from Nitro_edge__edge0_inlined__sub5_32 
                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub5_32 = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspTarget;
                                                                                                                                                                                        if(candidate_Nitro_node_n_inlined__sub5_32.lgspType.TypeID!=4) {
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Nitro_node_n_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub5_32 from Nitro_node_n_inlined__sub5_32 
                                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub5_32 = candidate_Nitro_node_n_inlined__sub5_32.lgspOuthead;
                                                                                                                                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub5_32 != null)
                                                                                                                                                                                        {
                                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub5_32 = head_candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                            do
                                                                                                                                                                                            {
                                                                                                                                                                                                if(candidate_Nitro_edge__edge1_inlined__sub5_32.lgspType.TypeID!=1) {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub5_32 = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Implicit Target Nitro_node__node0_inlined__sub5_32 from Nitro_edge__edge1_inlined__sub5_32 
                                                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub5_32 = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspTarget;
                                                                                                                                                                                                if(candidate_Nitro_node__node0_inlined__sub5_32.lgspType.TypeID!=3) {
                                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub5_32;
                                                                                                                                                                                                prev__candidate_Nitro_node__node0_inlined__sub5_32 = candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub5_32 from Nitro_node_n_inlined__sub5_32 
                                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub5_32 = candidate_Nitro_node_n_inlined__sub5_32.lgspOuthead;
                                                                                                                                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub5_32 != null)
                                                                                                                                                                                                {
                                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub5_32 = head_candidate_Nitro_edge__edge2_inlined__sub5_32;
                                                                                                                                                                                                    do
                                                                                                                                                                                                    {
                                                                                                                                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub5_32.lgspType.TypeID!=1) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        // Implicit Target Nitro_node__node1_inlined__sub5_32 from Nitro_edge__edge2_inlined__sub5_32 
                                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub5_32 = candidate_Nitro_edge__edge2_inlined__sub5_32.lgspTarget;
                                                                                                                                                                                                        if(candidate_Nitro_node__node1_inlined__sub5_32.lgspType.TypeID!=3) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_Nitro_node__node1_inlined__sub5_32.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        Rule_TNT.Match_TNT match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                                        Pattern_Methyl.Match_Methyl match__sub0 = new Pattern_Methyl.Match_Methyl();
                                                                                                                                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub1 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub2 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                                        match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub3 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub3.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub4 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                                        match__sub4.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub5 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                                        match__sub5.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                                        match._node_c1 = candidate_TNT_node_c1;
                                                                                                                                                                                                        match._node_c2 = candidate_TNT_node_c2;
                                                                                                                                                                                                        match._node_c3 = candidate_TNT_node_c3;
                                                                                                                                                                                                        match._node_c4 = candidate_TNT_node_c4;
                                                                                                                                                                                                        match._node_c5 = candidate_TNT_node_c5;
                                                                                                                                                                                                        match._node_c6 = candidate_TNT_node_c6;
                                                                                                                                                                                                        match__sub0._node_anchor = candidate_Methyl_node_anchor_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._node_c = candidate_Methyl_node_c_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._node__node0 = candidate_Methyl_node__node0_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._node__node1 = candidate_Methyl_node__node1_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._node__node2 = candidate_Methyl_node__node2_inlined__sub0_27;
                                                                                                                                                                                                        match__sub1._node_anchor = candidate_Nitro_node_anchor_inlined__sub1_28;
                                                                                                                                                                                                        match__sub1._node_n = candidate_Nitro_node_n_inlined__sub1_28;
                                                                                                                                                                                                        match__sub1._node__node0 = candidate_Nitro_node__node0_inlined__sub1_28;
                                                                                                                                                                                                        match__sub1._node__node1 = candidate_Nitro_node__node1_inlined__sub1_28;
                                                                                                                                                                                                        match__sub2._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub2_29;
                                                                                                                                                                                                        match__sub2._node__node0 = candidate_Hydrogen_node__node0_inlined__sub2_29;
                                                                                                                                                                                                        match__sub3._node_anchor = candidate_Nitro_node_anchor_inlined__sub3_30;
                                                                                                                                                                                                        match__sub3._node_n = candidate_Nitro_node_n_inlined__sub3_30;
                                                                                                                                                                                                        match__sub3._node__node0 = candidate_Nitro_node__node0_inlined__sub3_30;
                                                                                                                                                                                                        match__sub3._node__node1 = candidate_Nitro_node__node1_inlined__sub3_30;
                                                                                                                                                                                                        match__sub4._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub4_31;
                                                                                                                                                                                                        match__sub4._node__node0 = candidate_Hydrogen_node__node0_inlined__sub4_31;
                                                                                                                                                                                                        match__sub5._node_anchor = candidate_Nitro_node_anchor_inlined__sub5_32;
                                                                                                                                                                                                        match__sub5._node_n = candidate_Nitro_node_n_inlined__sub5_32;
                                                                                                                                                                                                        match__sub5._node__node0 = candidate_Nitro_node__node0_inlined__sub5_32;
                                                                                                                                                                                                        match__sub5._node__node1 = candidate_Nitro_node__node1_inlined__sub5_32;
                                                                                                                                                                                                        match._edge__edge0 = candidate_TNT_edge__edge0;
                                                                                                                                                                                                        match._edge__edge1 = candidate_TNT_edge__edge1;
                                                                                                                                                                                                        match._edge__edge2 = candidate_TNT_edge__edge2;
                                                                                                                                                                                                        match._edge__edge3 = candidate_TNT_edge__edge3;
                                                                                                                                                                                                        match._edge__edge4 = candidate_TNT_edge__edge4;
                                                                                                                                                                                                        match._edge__edge5 = candidate_TNT_edge__edge5;
                                                                                                                                                                                                        match._edge__edge6 = candidate_TNT_edge__edge6;
                                                                                                                                                                                                        match._edge__edge7 = candidate_TNT_edge__edge7;
                                                                                                                                                                                                        match._edge__edge8 = candidate_TNT_edge__edge8;
                                                                                                                                                                                                        match__sub0._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                                                                                                                        match__sub0._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                                                                                                                        match__sub1._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub1_28;
                                                                                                                                                                                                        match__sub1._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                                                                                                                                                        match__sub1._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                                                                                                                                        match__sub2._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                                                                                                                                                        match__sub3._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                                                                                                        match__sub3._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                                                                        match__sub3._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                                                        match__sub4._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                                                                        match__sub5._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                                        match__sub5._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                                        match__sub5._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub5_32;
                                                                                                                                                                                                        match.__sub0 = match__sub0;
                                                                                                                                                                                                        match.__sub1 = match__sub1;
                                                                                                                                                                                                        match.__sub2 = match__sub2;
                                                                                                                                                                                                        match.__sub3 = match__sub3;
                                                                                                                                                                                                        match.__sub4 = match__sub4;
                                                                                                                                                                                                        match.__sub5 = match__sub5;
                                                                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub5_32.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub5_32);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub5_32.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub5_32);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub5_32.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub5_32);
                                                                                                                                                                                                            candidate_TNT_node_c6.MoveOutHeadAfter(candidate_TNT_edge__edge5);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub3_30.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub3_30);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub3_30.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub3_30);
                                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub4_31.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub4_31);
                                                                                                                                                                                                            candidate_TNT_node_c5.MoveOutHeadAfter(candidate_TNT_edge__edge8);
                                                                                                                                                                                                            candidate_TNT_node_c5.MoveOutHeadAfter(candidate_TNT_edge__edge4);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub3_30.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub3_30);
                                                                                                                                                                                                            candidate_TNT_node_c4.MoveOutHeadAfter(candidate_TNT_edge__edge3);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_27.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub0_27);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_27.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub0_27);
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_27.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub0_27);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_28.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub1_28);
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_28.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub1_28);
                                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub2_29.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub2_29);
                                                                                                                                                                                                            candidate_TNT_node_c3.MoveOutHeadAfter(candidate_TNT_edge__edge7);
                                                                                                                                                                                                            candidate_TNT_node_c3.MoveOutHeadAfter(candidate_TNT_edge__edge2);
                                                                                                                                                                                                            candidate_Methyl_node_anchor_inlined__sub0_27.MoveOutHeadAfter(candidate_Methyl_edge__edge0_inlined__sub0_27);
                                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub1_28.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub1_28);
                                                                                                                                                                                                            candidate_TNT_node_c2.MoveOutHeadAfter(candidate_TNT_edge__edge1);
                                                                                                                                                                                                            candidate_TNT_node_c1.MoveOutHeadAfter(candidate_TNT_edge__edge6);
                                                                                                                                                                                                            graph.MoveHeadAfter(candidate_TNT_edge__edge0);
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags = candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub5_32;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                                            candidate_TNT_edge__edge5.lgspFlags = candidate_TNT_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge5;
                                                                                                                                                                                                            candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags = candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub3_30;
                                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_30;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                                                                            candidate_TNT_edge__edge8.lgspFlags = candidate_TNT_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge8;
                                                                                                                                                                                                            candidate_TNT_edge__edge4.lgspFlags = candidate_TNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge4;
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub3_30.lgspFlags = candidate_Nitro_node_n_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub3_30;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                                                                                                            candidate_TNT_node_c5.lgspFlags = candidate_TNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c5;
                                                                                                                                                                                                            candidate_TNT_edge__edge3.lgspFlags = candidate_TNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge3;
                                                                                                                                                                                                            candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_28;
                                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_28;
                                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_29;
                                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                                                                                                                                                            candidate_TNT_edge__edge7.lgspFlags = candidate_TNT_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge7;
                                                                                                                                                                                                            candidate_TNT_node_c4.lgspFlags = candidate_TNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c4;
                                                                                                                                                                                                            candidate_TNT_edge__edge2.lgspFlags = candidate_TNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge2;
                                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_27.lgspFlags = candidate_Methyl_node_c_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_27;
                                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_28.lgspFlags = candidate_Nitro_node_n_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_28;
                                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_28;
                                                                                                                                                                                                            candidate_TNT_node_c3.lgspFlags = candidate_TNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c3;
                                                                                                                                                                                                            candidate_TNT_edge__edge1.lgspFlags = candidate_TNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge1;
                                                                                                                                                                                                            candidate_TNT_edge__edge6.lgspFlags = candidate_TNT_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge6;
                                                                                                                                                                                                            candidate_TNT_node_c2.lgspFlags = candidate_TNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c2;
                                                                                                                                                                                                            candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                                                                                                                                                                                                            candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
                                                                                                                                                                                                            return matches;
                                                                                                                                                                                                        }
                                                                                                                                                                                                    }
                                                                                                                                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub5_32 = candidate_Nitro_edge__edge2_inlined__sub5_32.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub5_32 );
                                                                                                                                                                                                }
                                                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags = candidate_Nitro_node__node0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub5_32;
                                                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_32;
                                                                                                                                                                                            }
                                                                                                                                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub5_32 = candidate_Nitro_edge__edge1_inlined__sub5_32.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub5_32 );
                                                                                                                                                                                        }
                                                                                                                                                                                        candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_32;
                                                                                                                                                                                    }
                                                                                                                                                                                    while( (candidate_Nitro_edge__edge0_inlined__sub5_32 = candidate_Nitro_edge__edge0_inlined__sub5_32.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub5_32 );
                                                                                                                                                                                }
                                                                                                                                                                                candidate_TNT_edge__edge5.lgspFlags = candidate_TNT_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge5;
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_TNT_edge__edge5 = candidate_TNT_edge__edge5.lgspOutNext) != head_candidate_TNT_edge__edge5 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags = candidate_Nitro_node__node1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub3_30;
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_30;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub3_30 = candidate_Nitro_edge__edge2_inlined__sub3_30.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub3_30 );
                                                                                                                                                                }
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_30;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_30;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub3_30 = candidate_Nitro_edge__edge1_inlined__sub3_30.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub3_30 );
                                                                                                                                                        }
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_31;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub4_31 = candidate_Hydrogen_edge__edge0_inlined__sub4_31.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub4_31 );
                                                                                                                                                }
                                                                                                                                                candidate_TNT_edge__edge8.lgspFlags = candidate_TNT_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge8;
                                                                                                                                            }
                                                                                                                                            while( (candidate_TNT_edge__edge8 = candidate_TNT_edge__edge8.lgspOutNext) != head_candidate_TNT_edge__edge8 );
                                                                                                                                        }
                                                                                                                                        candidate_TNT_edge__edge4.lgspFlags = candidate_TNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge4;
                                                                                                                                    }
                                                                                                                                    while( (candidate_TNT_edge__edge4 = candidate_TNT_edge__edge4.lgspOutNext) != head_candidate_TNT_edge__edge4 );
                                                                                                                                }
                                                                                                                                candidate_Nitro_node_n_inlined__sub3_30.lgspFlags = candidate_Nitro_node_n_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub3_30;
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_30;
                                                                                                                            }
                                                                                                                            while( (candidate_Nitro_edge__edge0_inlined__sub3_30 = candidate_Nitro_edge__edge0_inlined__sub3_30.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub3_30 );
                                                                                                                        }
                                                                                                                        candidate_TNT_node_c5.lgspFlags = candidate_TNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c5;
                                                                                                                        candidate_TNT_edge__edge3.lgspFlags = candidate_TNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge3;
                                                                                                                    }
                                                                                                                    while( (candidate_TNT_edge__edge3 = candidate_TNT_edge__edge3.lgspOutNext) != head_candidate_TNT_edge__edge3 );
                                                                                                                }
                                                                                                                candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub0_27;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_27;
                                                                                                            }
                                                                                                            while( (candidate_Methyl_edge__edge3_inlined__sub0_27 = candidate_Methyl_edge__edge3_inlined__sub0_27.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub0_27 );
                                                                                                        }
                                                                                                        candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_27;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_27;
                                                                                                    }
                                                                                                    while( (candidate_Methyl_edge__edge2_inlined__sub0_27 = candidate_Methyl_edge__edge2_inlined__sub0_27.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub0_27 );
                                                                                                }
                                                                                                candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_27;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_27;
                                                                                            }
                                                                                            while( (candidate_Methyl_edge__edge1_inlined__sub0_27 = candidate_Methyl_edge__edge1_inlined__sub0_27.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub0_27 );
                                                                                        }
                                                                                        candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_28;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_28;
                                                                                    }
                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub1_28 = candidate_Nitro_edge__edge2_inlined__sub1_28.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub1_28 );
                                                                                }
                                                                                candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_28;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_28;
                                                                            }
                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub1_28 = candidate_Nitro_edge__edge1_inlined__sub1_28.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub1_28 );
                                                                        }
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_29.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_29;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_29;
                                                                    }
                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub2_29 = candidate_Hydrogen_edge__edge0_inlined__sub2_29.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub2_29 );
                                                                }
                                                                candidate_TNT_edge__edge7.lgspFlags = candidate_TNT_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge7;
                                                            }
                                                            while( (candidate_TNT_edge__edge7 = candidate_TNT_edge__edge7.lgspOutNext) != head_candidate_TNT_edge__edge7 );
                                                        }
                                                        candidate_TNT_node_c4.lgspFlags = candidate_TNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c4;
                                                        candidate_TNT_edge__edge2.lgspFlags = candidate_TNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge2;
                                                    }
                                                    while( (candidate_TNT_edge__edge2 = candidate_TNT_edge__edge2.lgspOutNext) != head_candidate_TNT_edge__edge2 );
                                                }
                                                candidate_Methyl_node_c_inlined__sub0_27.lgspFlags = candidate_Methyl_node_c_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub0_27;
                                                candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_27;
                                            }
                                            while( (candidate_Methyl_edge__edge0_inlined__sub0_27 = candidate_Methyl_edge__edge0_inlined__sub0_27.lgspOutNext) != head_candidate_Methyl_edge__edge0_inlined__sub0_27 );
                                        }
                                        candidate_Nitro_node_n_inlined__sub1_28.lgspFlags = candidate_Nitro_node_n_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_28;
                                        candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_28;
                                    }
                                    while( (candidate_Nitro_edge__edge0_inlined__sub1_28 = candidate_Nitro_edge__edge0_inlined__sub1_28.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub1_28 );
                                }
                                candidate_TNT_node_c3.lgspFlags = candidate_TNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c3;
                                candidate_TNT_edge__edge1.lgspFlags = candidate_TNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge1;
                            }
                            while( (candidate_TNT_edge__edge1 = candidate_TNT_edge__edge1.lgspOutNext) != head_candidate_TNT_edge__edge1 );
                        }
                        candidate_TNT_edge__edge6.lgspFlags = candidate_TNT_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge6;
                    }
                    while( (candidate_TNT_edge__edge6 = candidate_TNT_edge__edge6.lgspOutNext) != head_candidate_TNT_edge__edge6 );
                }
                candidate_TNT_node_c2.lgspFlags = candidate_TNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c2;
                candidate_TNT_node_c1.lgspFlags = candidate_TNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_node_c1;
                candidate_TNT_edge__edge0.lgspFlags = candidate_TNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNT_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNT.IMatch_TNT match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches)
        {
            foreach(Rule_TNT.IMatch_TNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNT.IMatch_TNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNT.IMatch_TNT)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNT.IMatch_TNT>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNTUnfolded
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTUnfolded.IMatch_TNTUnfolded match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNTUnfolded : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNTUnfolded
    {
        public Action_TNTUnfolded()
            : base(Rule_TNTUnfolded.Instance.patternGraph)
        {
            _rulePattern = Rule_TNTUnfolded.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNTUnfolded _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNTUnfolded"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNTUnfolded.Match_TNTUnfolded, Rule_TNTUnfolded.IMatch_TNTUnfolded> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNTUnfolded Instance { get { return instance; } set { instance = value; } }
        private static Action_TNTUnfolded instance = new Action_TNTUnfolded();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNTUnfolded.Match_TNTUnfolded, Rule_TNTUnfolded.IMatch_TNTUnfolded>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            // Lookup TNTUnfolded_edge__edge0 
            int type_id_candidate_TNTUnfolded_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_TNTUnfolded_edge__edge0], candidate_TNTUnfolded_edge__edge0 = head_candidate_TNTUnfolded_edge__edge0.lgspTypeNext; candidate_TNTUnfolded_edge__edge0 != head_candidate_TNTUnfolded_edge__edge0; candidate_TNTUnfolded_edge__edge0 = candidate_TNTUnfolded_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_TNTUnfolded_edge__edge0;
                prev__candidate_TNTUnfolded_edge__edge0 = candidate_TNTUnfolded_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNTUnfolded_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source TNTUnfolded_node_c1 from TNTUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c1 = candidate_TNTUnfolded_edge__edge0.lgspSource;
                if(candidate_TNTUnfolded_node_c1.lgspType.TypeID!=1) {
                    candidate_TNTUnfolded_edge__edge0.lgspFlags = candidate_TNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNTUnfolded_node_c1;
                prev__candidate_TNTUnfolded_node_c1 = candidate_TNTUnfolded_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNTUnfolded_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target TNTUnfolded_node_c2 from TNTUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c2 = candidate_TNTUnfolded_edge__edge0.lgspTarget;
                if(candidate_TNTUnfolded_node_c2.lgspType.TypeID!=1) {
                    candidate_TNTUnfolded_node_c1.lgspFlags = candidate_TNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c1;
                    candidate_TNTUnfolded_edge__edge0.lgspFlags = candidate_TNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge0;
                    continue;
                }
                if((candidate_TNTUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_TNTUnfolded_node_c1.lgspFlags = candidate_TNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c1;
                    candidate_TNTUnfolded_edge__edge0.lgspFlags = candidate_TNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNTUnfolded_node_c2;
                prev__candidate_TNTUnfolded_node_c2 = candidate_TNTUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNTUnfolded_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Extend Outgoing TNTUnfolded_edge__edge6 from TNTUnfolded_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge6 = candidate_TNTUnfolded_node_c1.lgspOuthead;
                if(head_candidate_TNTUnfolded_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge6 = head_candidate_TNTUnfolded_edge__edge6;
                    do
                    {
                        if(candidate_TNTUnfolded_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_TNTUnfolded_edge__edge6.lgspTarget != candidate_TNTUnfolded_node_c2) {
                            continue;
                        }
                        if((candidate_TNTUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_TNTUnfolded_edge__edge6;
                        prev__candidate_TNTUnfolded_edge__edge6 = candidate_TNTUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_TNTUnfolded_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing TNTUnfolded_edge__edge9 from TNTUnfolded_node_c1 
                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge9 = candidate_TNTUnfolded_node_c1.lgspOuthead;
                        if(head_candidate_TNTUnfolded_edge__edge9 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge9 = head_candidate_TNTUnfolded_edge__edge9;
                            do
                            {
                                if(candidate_TNTUnfolded_edge__edge9.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_TNTUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_TNTUnfolded_edge__edge9;
                                prev__candidate_TNTUnfolded_edge__edge9 = candidate_TNTUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNTUnfolded_edge__edge9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target TNTUnfolded_node_c from TNTUnfolded_edge__edge9 
                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c = candidate_TNTUnfolded_edge__edge9.lgspTarget;
                                if(candidate_TNTUnfolded_node_c.lgspType.TypeID!=1) {
                                    candidate_TNTUnfolded_edge__edge9.lgspFlags = candidate_TNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge9;
                                    continue;
                                }
                                if((candidate_TNTUnfolded_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_TNTUnfolded_edge__edge9.lgspFlags = candidate_TNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge9;
                                    continue;
                                }
                                uint prev__candidate_TNTUnfolded_node_c;
                                prev__candidate_TNTUnfolded_node_c = candidate_TNTUnfolded_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNTUnfolded_node_c.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing TNTUnfolded_edge__edge1 from TNTUnfolded_node_c2 
                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge1 = candidate_TNTUnfolded_node_c2.lgspOuthead;
                                if(head_candidate_TNTUnfolded_edge__edge1 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge1 = head_candidate_TNTUnfolded_edge__edge1;
                                    do
                                    {
                                        if(candidate_TNTUnfolded_edge__edge1.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_TNTUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_TNTUnfolded_edge__edge1;
                                        prev__candidate_TNTUnfolded_edge__edge1 = candidate_TNTUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_TNTUnfolded_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target TNTUnfolded_node_c3 from TNTUnfolded_edge__edge1 
                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c3 = candidate_TNTUnfolded_edge__edge1.lgspTarget;
                                        if(candidate_TNTUnfolded_node_c3.lgspType.TypeID!=1) {
                                            candidate_TNTUnfolded_edge__edge1.lgspFlags = candidate_TNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge1;
                                            continue;
                                        }
                                        if((candidate_TNTUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_TNTUnfolded_edge__edge1.lgspFlags = candidate_TNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge1;
                                            continue;
                                        }
                                        uint prev__candidate_TNTUnfolded_node_c3;
                                        prev__candidate_TNTUnfolded_node_c3 = candidate_TNTUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_TNTUnfolded_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing TNTUnfolded_edge__edge13 from TNTUnfolded_node_c2 
                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge13 = candidate_TNTUnfolded_node_c2.lgspOuthead;
                                        if(head_candidate_TNTUnfolded_edge__edge13 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge13 = head_candidate_TNTUnfolded_edge__edge13;
                                            do
                                            {
                                                if(candidate_TNTUnfolded_edge__edge13.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_TNTUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_TNTUnfolded_edge__edge13;
                                                prev__candidate_TNTUnfolded_edge__edge13 = candidate_TNTUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_TNTUnfolded_edge__edge13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target TNTUnfolded_node_n2 from TNTUnfolded_edge__edge13 
                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_n2 = candidate_TNTUnfolded_edge__edge13.lgspTarget;
                                                if(candidate_TNTUnfolded_node_n2.lgspType.TypeID!=4) {
                                                    candidate_TNTUnfolded_edge__edge13.lgspFlags = candidate_TNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge13;
                                                    continue;
                                                }
                                                uint prev__candidate_TNTUnfolded_node_n2;
                                                prev__candidate_TNTUnfolded_node_n2 = candidate_TNTUnfolded_node_n2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_TNTUnfolded_node_n2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing TNTUnfolded_edge__edge10 from TNTUnfolded_node_c 
                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge10 = candidate_TNTUnfolded_node_c.lgspOuthead;
                                                if(head_candidate_TNTUnfolded_edge__edge10 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge10 = head_candidate_TNTUnfolded_edge__edge10;
                                                    do
                                                    {
                                                        if(candidate_TNTUnfolded_edge__edge10.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_TNTUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNTUnfolded_edge__edge10;
                                                        prev__candidate_TNTUnfolded_edge__edge10 = candidate_TNTUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNTUnfolded_edge__edge10.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target TNTUnfolded_node__node0 from TNTUnfolded_edge__edge10 
                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node0 = candidate_TNTUnfolded_edge__edge10.lgspTarget;
                                                        if(candidate_TNTUnfolded_node__node0.lgspType.TypeID!=2) {
                                                            candidate_TNTUnfolded_edge__edge10.lgspFlags = candidate_TNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge10;
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNTUnfolded_node__node0;
                                                        prev__candidate_TNTUnfolded_node__node0 = candidate_TNTUnfolded_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNTUnfolded_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing TNTUnfolded_edge__edge11 from TNTUnfolded_node_c 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge11 = candidate_TNTUnfolded_node_c.lgspOuthead;
                                                        if(head_candidate_TNTUnfolded_edge__edge11 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge11 = head_candidate_TNTUnfolded_edge__edge11;
                                                            do
                                                            {
                                                                if(candidate_TNTUnfolded_edge__edge11.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_TNTUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_TNTUnfolded_edge__edge11;
                                                                prev__candidate_TNTUnfolded_edge__edge11 = candidate_TNTUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_TNTUnfolded_edge__edge11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target TNTUnfolded_node__node1 from TNTUnfolded_edge__edge11 
                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node1 = candidate_TNTUnfolded_edge__edge11.lgspTarget;
                                                                if(candidate_TNTUnfolded_node__node1.lgspType.TypeID!=2) {
                                                                    candidate_TNTUnfolded_edge__edge11.lgspFlags = candidate_TNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge11;
                                                                    continue;
                                                                }
                                                                if((candidate_TNTUnfolded_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_TNTUnfolded_edge__edge11.lgspFlags = candidate_TNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge11;
                                                                    continue;
                                                                }
                                                                uint prev__candidate_TNTUnfolded_node__node1;
                                                                prev__candidate_TNTUnfolded_node__node1 = candidate_TNTUnfolded_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_TNTUnfolded_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing TNTUnfolded_edge__edge12 from TNTUnfolded_node_c 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge12 = candidate_TNTUnfolded_node_c.lgspOuthead;
                                                                if(head_candidate_TNTUnfolded_edge__edge12 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge12 = head_candidate_TNTUnfolded_edge__edge12;
                                                                    do
                                                                    {
                                                                        if(candidate_TNTUnfolded_edge__edge12.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_TNTUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_TNTUnfolded_edge__edge12;
                                                                        prev__candidate_TNTUnfolded_edge__edge12 = candidate_TNTUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_TNTUnfolded_edge__edge12.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target TNTUnfolded_node__node2 from TNTUnfolded_edge__edge12 
                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node2 = candidate_TNTUnfolded_edge__edge12.lgspTarget;
                                                                        if(candidate_TNTUnfolded_node__node2.lgspType.TypeID!=2) {
                                                                            candidate_TNTUnfolded_edge__edge12.lgspFlags = candidate_TNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge12;
                                                                            continue;
                                                                        }
                                                                        if((candidate_TNTUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_TNTUnfolded_edge__edge12.lgspFlags = candidate_TNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge12;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_TNTUnfolded_node__node2;
                                                                        prev__candidate_TNTUnfolded_node__node2 = candidate_TNTUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_TNTUnfolded_node__node2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing TNTUnfolded_edge__edge2 from TNTUnfolded_node_c3 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge2 = candidate_TNTUnfolded_node_c3.lgspOuthead;
                                                                        if(head_candidate_TNTUnfolded_edge__edge2 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge2 = head_candidate_TNTUnfolded_edge__edge2;
                                                                            do
                                                                            {
                                                                                if(candidate_TNTUnfolded_edge__edge2.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_TNTUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_TNTUnfolded_edge__edge2;
                                                                                prev__candidate_TNTUnfolded_edge__edge2 = candidate_TNTUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_TNTUnfolded_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target TNTUnfolded_node_c4 from TNTUnfolded_edge__edge2 
                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c4 = candidate_TNTUnfolded_edge__edge2.lgspTarget;
                                                                                if(candidate_TNTUnfolded_node_c4.lgspType.TypeID!=1) {
                                                                                    candidate_TNTUnfolded_edge__edge2.lgspFlags = candidate_TNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge2;
                                                                                    continue;
                                                                                }
                                                                                if((candidate_TNTUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    candidate_TNTUnfolded_edge__edge2.lgspFlags = candidate_TNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge2;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_TNTUnfolded_node_c4;
                                                                                prev__candidate_TNTUnfolded_node_c4 = candidate_TNTUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_TNTUnfolded_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing TNTUnfolded_edge__edge7 from TNTUnfolded_node_c3 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge7 = candidate_TNTUnfolded_node_c3.lgspOuthead;
                                                                                if(head_candidate_TNTUnfolded_edge__edge7 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge7 = head_candidate_TNTUnfolded_edge__edge7;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_TNTUnfolded_edge__edge7.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if(candidate_TNTUnfolded_edge__edge7.lgspTarget != candidate_TNTUnfolded_node_c4) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_TNTUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_TNTUnfolded_edge__edge7;
                                                                                        prev__candidate_TNTUnfolded_edge__edge7 = candidate_TNTUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_TNTUnfolded_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing TNTUnfolded_edge__edge16 from TNTUnfolded_node_c3 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge16 = candidate_TNTUnfolded_node_c3.lgspOuthead;
                                                                                        if(head_candidate_TNTUnfolded_edge__edge16 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge16 = head_candidate_TNTUnfolded_edge__edge16;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_TNTUnfolded_edge__edge16.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNTUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNTUnfolded_edge__edge16;
                                                                                                prev__candidate_TNTUnfolded_edge__edge16 = candidate_TNTUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNTUnfolded_edge__edge16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target TNTUnfolded_node__node5 from TNTUnfolded_edge__edge16 
                                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node5 = candidate_TNTUnfolded_edge__edge16.lgspTarget;
                                                                                                if(candidate_TNTUnfolded_node__node5.lgspType.TypeID!=2) {
                                                                                                    candidate_TNTUnfolded_edge__edge16.lgspFlags = candidate_TNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge16;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNTUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_TNTUnfolded_edge__edge16.lgspFlags = candidate_TNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge16;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNTUnfolded_node__node5;
                                                                                                prev__candidate_TNTUnfolded_node__node5 = candidate_TNTUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNTUnfolded_node__node5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing TNTUnfolded_edge__edge14 from TNTUnfolded_node_n2 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge14 = candidate_TNTUnfolded_node_n2.lgspOuthead;
                                                                                                if(head_candidate_TNTUnfolded_edge__edge14 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge14 = head_candidate_TNTUnfolded_edge__edge14;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_TNTUnfolded_edge__edge14.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_TNTUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge14;
                                                                                                        prev__candidate_TNTUnfolded_edge__edge14 = candidate_TNTUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_TNTUnfolded_edge__edge14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target TNTUnfolded_node__node3 from TNTUnfolded_edge__edge14 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node3 = candidate_TNTUnfolded_edge__edge14.lgspTarget;
                                                                                                        if(candidate_TNTUnfolded_node__node3.lgspType.TypeID!=3) {
                                                                                                            candidate_TNTUnfolded_edge__edge14.lgspFlags = candidate_TNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge14;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_TNTUnfolded_node__node3;
                                                                                                        prev__candidate_TNTUnfolded_node__node3 = candidate_TNTUnfolded_node__node3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_TNTUnfolded_node__node3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge15 from TNTUnfolded_node_n2 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge15 = candidate_TNTUnfolded_node_n2.lgspOuthead;
                                                                                                        if(head_candidate_TNTUnfolded_edge__edge15 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge15 = head_candidate_TNTUnfolded_edge__edge15;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_TNTUnfolded_edge__edge15.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNTUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge15;
                                                                                                                prev__candidate_TNTUnfolded_edge__edge15 = candidate_TNTUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_TNTUnfolded_edge__edge15.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target TNTUnfolded_node__node4 from TNTUnfolded_edge__edge15 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node4 = candidate_TNTUnfolded_edge__edge15.lgspTarget;
                                                                                                                if(candidate_TNTUnfolded_node__node4.lgspType.TypeID!=3) {
                                                                                                                    candidate_TNTUnfolded_edge__edge15.lgspFlags = candidate_TNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge15;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNTUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_TNTUnfolded_edge__edge15.lgspFlags = candidate_TNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge15;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_TNTUnfolded_node__node4;
                                                                                                                prev__candidate_TNTUnfolded_node__node4 = candidate_TNTUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_TNTUnfolded_node__node4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge3 from TNTUnfolded_node_c4 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge3 = candidate_TNTUnfolded_node_c4.lgspOuthead;
                                                                                                                if(head_candidate_TNTUnfolded_edge__edge3 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge3 = head_candidate_TNTUnfolded_edge__edge3;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_TNTUnfolded_edge__edge3.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNTUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge3;
                                                                                                                        prev__candidate_TNTUnfolded_edge__edge3 = candidate_TNTUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNTUnfolded_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target TNTUnfolded_node_c5 from TNTUnfolded_edge__edge3 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c5 = candidate_TNTUnfolded_edge__edge3.lgspTarget;
                                                                                                                        if(candidate_TNTUnfolded_node_c5.lgspType.TypeID!=1) {
                                                                                                                            candidate_TNTUnfolded_edge__edge3.lgspFlags = candidate_TNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNTUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_TNTUnfolded_edge__edge3.lgspFlags = candidate_TNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNTUnfolded_node_c5;
                                                                                                                        prev__candidate_TNTUnfolded_node_c5 = candidate_TNTUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNTUnfolded_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge17 from TNTUnfolded_node_c4 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge17 = candidate_TNTUnfolded_node_c4.lgspOuthead;
                                                                                                                        if(head_candidate_TNTUnfolded_edge__edge17 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge17 = head_candidate_TNTUnfolded_edge__edge17;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_TNTUnfolded_edge__edge17.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_TNTUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge17;
                                                                                                                                prev__candidate_TNTUnfolded_edge__edge17 = candidate_TNTUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_TNTUnfolded_edge__edge17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target TNTUnfolded_node_n4 from TNTUnfolded_edge__edge17 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_n4 = candidate_TNTUnfolded_edge__edge17.lgspTarget;
                                                                                                                                if(candidate_TNTUnfolded_node_n4.lgspType.TypeID!=4) {
                                                                                                                                    candidate_TNTUnfolded_edge__edge17.lgspFlags = candidate_TNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_TNTUnfolded_node_n4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_TNTUnfolded_edge__edge17.lgspFlags = candidate_TNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_TNTUnfolded_node_n4;
                                                                                                                                prev__candidate_TNTUnfolded_node_n4 = candidate_TNTUnfolded_node_n4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_TNTUnfolded_node_n4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge4 from TNTUnfolded_node_c5 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge4 = candidate_TNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                if(head_candidate_TNTUnfolded_edge__edge4 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge4 = head_candidate_TNTUnfolded_edge__edge4;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_TNTUnfolded_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNTUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge4;
                                                                                                                                        prev__candidate_TNTUnfolded_edge__edge4 = candidate_TNTUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_TNTUnfolded_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target TNTUnfolded_node_c6 from TNTUnfolded_edge__edge4 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_c6 = candidate_TNTUnfolded_edge__edge4.lgspTarget;
                                                                                                                                        if(candidate_TNTUnfolded_node_c6.lgspType.TypeID!=1) {
                                                                                                                                            candidate_TNTUnfolded_edge__edge4.lgspFlags = candidate_TNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNTUnfolded_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_TNTUnfolded_edge__edge4.lgspFlags = candidate_TNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge8 from TNTUnfolded_node_c5 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge8 = candidate_TNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                        if(head_candidate_TNTUnfolded_edge__edge8 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge8 = head_candidate_TNTUnfolded_edge__edge8;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_TNTUnfolded_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_TNTUnfolded_edge__edge8.lgspTarget != candidate_TNTUnfolded_node_c6) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_TNTUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge8;
                                                                                                                                                prev__candidate_TNTUnfolded_edge__edge8 = candidate_TNTUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_TNTUnfolded_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge20 from TNTUnfolded_node_c5 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge20 = candidate_TNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                                if(head_candidate_TNTUnfolded_edge__edge20 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge20 = head_candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_TNTUnfolded_edge__edge20.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_TNTUnfolded_edge__edge20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                        prev__candidate_TNTUnfolded_edge__edge20 = candidate_TNTUnfolded_edge__edge20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_TNTUnfolded_edge__edge20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Implicit Target TNTUnfolded_node__node8 from TNTUnfolded_edge__edge20 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node8 = candidate_TNTUnfolded_edge__edge20.lgspTarget;
                                                                                                                                                        if(candidate_TNTUnfolded_node__node8.lgspType.TypeID!=2) {
                                                                                                                                                            candidate_TNTUnfolded_edge__edge20.lgspFlags = candidate_TNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_TNTUnfolded_node__node8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            candidate_TNTUnfolded_edge__edge20.lgspFlags = candidate_TNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge18 from TNTUnfolded_node_n4 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge18 = candidate_TNTUnfolded_node_n4.lgspOuthead;
                                                                                                                                                        if(head_candidate_TNTUnfolded_edge__edge18 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge18 = head_candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_TNTUnfolded_edge__edge18.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_TNTUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                                prev__candidate_TNTUnfolded_edge__edge18 = candidate_TNTUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_TNTUnfolded_edge__edge18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target TNTUnfolded_node__node6 from TNTUnfolded_edge__edge18 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node6 = candidate_TNTUnfolded_edge__edge18.lgspTarget;
                                                                                                                                                                if(candidate_TNTUnfolded_node__node6.lgspType.TypeID!=3) {
                                                                                                                                                                    candidate_TNTUnfolded_edge__edge18.lgspFlags = candidate_TNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_TNTUnfolded_node__node6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_TNTUnfolded_edge__edge18.lgspFlags = candidate_TNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_TNTUnfolded_node__node6;
                                                                                                                                                                prev__candidate_TNTUnfolded_node__node6 = candidate_TNTUnfolded_node__node6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_TNTUnfolded_node__node6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge19 from TNTUnfolded_node_n4 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge19 = candidate_TNTUnfolded_node_n4.lgspOuthead;
                                                                                                                                                                if(head_candidate_TNTUnfolded_edge__edge19 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge19 = head_candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_TNTUnfolded_edge__edge19.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_TNTUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                        prev__candidate_TNTUnfolded_edge__edge19 = candidate_TNTUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_TNTUnfolded_edge__edge19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target TNTUnfolded_node__node7 from TNTUnfolded_edge__edge19 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node7 = candidate_TNTUnfolded_edge__edge19.lgspTarget;
                                                                                                                                                                        if(candidate_TNTUnfolded_node__node7.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_TNTUnfolded_edge__edge19.lgspFlags = candidate_TNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_TNTUnfolded_node__node7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_TNTUnfolded_edge__edge19.lgspFlags = candidate_TNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_TNTUnfolded_node__node7;
                                                                                                                                                                        prev__candidate_TNTUnfolded_node__node7 = candidate_TNTUnfolded_node__node7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_TNTUnfolded_node__node7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge5 from TNTUnfolded_node_c6 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge5 = candidate_TNTUnfolded_node_c6.lgspOuthead;
                                                                                                                                                                        if(head_candidate_TNTUnfolded_edge__edge5 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge5 = head_candidate_TNTUnfolded_edge__edge5;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_TNTUnfolded_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if(candidate_TNTUnfolded_edge__edge5.lgspTarget != candidate_TNTUnfolded_node_c1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_TNTUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge5;
                                                                                                                                                                                prev__candidate_TNTUnfolded_edge__edge5 = candidate_TNTUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                candidate_TNTUnfolded_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge21 from TNTUnfolded_node_c6 
                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge21 = candidate_TNTUnfolded_node_c6.lgspOuthead;
                                                                                                                                                                                if(head_candidate_TNTUnfolded_edge__edge21 != null)
                                                                                                                                                                                {
                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge21 = head_candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                    do
                                                                                                                                                                                    {
                                                                                                                                                                                        if(candidate_TNTUnfolded_edge__edge21.lgspType.TypeID!=1) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_TNTUnfolded_edge__edge21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        uint prev__candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                        prev__candidate_TNTUnfolded_edge__edge21 = candidate_TNTUnfolded_edge__edge21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        candidate_TNTUnfolded_edge__edge21.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                        // Implicit Target TNTUnfolded_node_n6 from TNTUnfolded_edge__edge21 
                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node_n6 = candidate_TNTUnfolded_edge__edge21.lgspTarget;
                                                                                                                                                                                        if(candidate_TNTUnfolded_node_n6.lgspType.TypeID!=4) {
                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge21.lgspFlags = candidate_TNTUnfolded_edge__edge21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_TNTUnfolded_node_n6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge21.lgspFlags = candidate_TNTUnfolded_edge__edge21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        // Extend Outgoing TNTUnfolded_edge__edge22 from TNTUnfolded_node_n6 
                                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge22 = candidate_TNTUnfolded_node_n6.lgspOuthead;
                                                                                                                                                                                        if(head_candidate_TNTUnfolded_edge__edge22 != null)
                                                                                                                                                                                        {
                                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge22 = head_candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                            do
                                                                                                                                                                                            {
                                                                                                                                                                                                if(candidate_TNTUnfolded_edge__edge22.lgspType.TypeID!=1) {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_TNTUnfolded_edge__edge22.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                                prev__candidate_TNTUnfolded_edge__edge22 = candidate_TNTUnfolded_edge__edge22.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_TNTUnfolded_edge__edge22.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Implicit Target TNTUnfolded_node__node9 from TNTUnfolded_edge__edge22 
                                                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node9 = candidate_TNTUnfolded_edge__edge22.lgspTarget;
                                                                                                                                                                                                if(candidate_TNTUnfolded_node__node9.lgspType.TypeID!=3) {
                                                                                                                                                                                                    candidate_TNTUnfolded_edge__edge22.lgspFlags = candidate_TNTUnfolded_edge__edge22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                if((candidate_TNTUnfolded_node__node9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                {
                                                                                                                                                                                                    candidate_TNTUnfolded_edge__edge22.lgspFlags = candidate_TNTUnfolded_edge__edge22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                                    continue;
                                                                                                                                                                                                }
                                                                                                                                                                                                uint prev__candidate_TNTUnfolded_node__node9;
                                                                                                                                                                                                prev__candidate_TNTUnfolded_node__node9 = candidate_TNTUnfolded_node__node9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                candidate_TNTUnfolded_node__node9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                                // Extend Outgoing TNTUnfolded_edge__edge23 from TNTUnfolded_node_n6 
                                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNTUnfolded_edge__edge23 = candidate_TNTUnfolded_node_n6.lgspOuthead;
                                                                                                                                                                                                if(head_candidate_TNTUnfolded_edge__edge23 != null)
                                                                                                                                                                                                {
                                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNTUnfolded_edge__edge23 = head_candidate_TNTUnfolded_edge__edge23;
                                                                                                                                                                                                    do
                                                                                                                                                                                                    {
                                                                                                                                                                                                        if(candidate_TNTUnfolded_edge__edge23.lgspType.TypeID!=1) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_TNTUnfolded_edge__edge23.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        // Implicit Target TNTUnfolded_node__node10 from TNTUnfolded_edge__edge23 
                                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNTUnfolded_node__node10 = candidate_TNTUnfolded_edge__edge23.lgspTarget;
                                                                                                                                                                                                        if(candidate_TNTUnfolded_node__node10.lgspType.TypeID!=3) {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        if((candidate_TNTUnfolded_node__node10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            continue;
                                                                                                                                                                                                        }
                                                                                                                                                                                                        Rule_TNTUnfolded.Match_TNTUnfolded match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                                        match._node_c1 = candidate_TNTUnfolded_node_c1;
                                                                                                                                                                                                        match._node_c2 = candidate_TNTUnfolded_node_c2;
                                                                                                                                                                                                        match._node_c3 = candidate_TNTUnfolded_node_c3;
                                                                                                                                                                                                        match._node_c4 = candidate_TNTUnfolded_node_c4;
                                                                                                                                                                                                        match._node_c5 = candidate_TNTUnfolded_node_c5;
                                                                                                                                                                                                        match._node_c6 = candidate_TNTUnfolded_node_c6;
                                                                                                                                                                                                        match._node_c = candidate_TNTUnfolded_node_c;
                                                                                                                                                                                                        match._node__node0 = candidate_TNTUnfolded_node__node0;
                                                                                                                                                                                                        match._node__node1 = candidate_TNTUnfolded_node__node1;
                                                                                                                                                                                                        match._node__node2 = candidate_TNTUnfolded_node__node2;
                                                                                                                                                                                                        match._node_n2 = candidate_TNTUnfolded_node_n2;
                                                                                                                                                                                                        match._node__node3 = candidate_TNTUnfolded_node__node3;
                                                                                                                                                                                                        match._node__node4 = candidate_TNTUnfolded_node__node4;
                                                                                                                                                                                                        match._node__node5 = candidate_TNTUnfolded_node__node5;
                                                                                                                                                                                                        match._node_n4 = candidate_TNTUnfolded_node_n4;
                                                                                                                                                                                                        match._node__node6 = candidate_TNTUnfolded_node__node6;
                                                                                                                                                                                                        match._node__node7 = candidate_TNTUnfolded_node__node7;
                                                                                                                                                                                                        match._node__node8 = candidate_TNTUnfolded_node__node8;
                                                                                                                                                                                                        match._node_n6 = candidate_TNTUnfolded_node_n6;
                                                                                                                                                                                                        match._node__node9 = candidate_TNTUnfolded_node__node9;
                                                                                                                                                                                                        match._node__node10 = candidate_TNTUnfolded_node__node10;
                                                                                                                                                                                                        match._edge__edge0 = candidate_TNTUnfolded_edge__edge0;
                                                                                                                                                                                                        match._edge__edge1 = candidate_TNTUnfolded_edge__edge1;
                                                                                                                                                                                                        match._edge__edge2 = candidate_TNTUnfolded_edge__edge2;
                                                                                                                                                                                                        match._edge__edge3 = candidate_TNTUnfolded_edge__edge3;
                                                                                                                                                                                                        match._edge__edge4 = candidate_TNTUnfolded_edge__edge4;
                                                                                                                                                                                                        match._edge__edge5 = candidate_TNTUnfolded_edge__edge5;
                                                                                                                                                                                                        match._edge__edge6 = candidate_TNTUnfolded_edge__edge6;
                                                                                                                                                                                                        match._edge__edge7 = candidate_TNTUnfolded_edge__edge7;
                                                                                                                                                                                                        match._edge__edge8 = candidate_TNTUnfolded_edge__edge8;
                                                                                                                                                                                                        match._edge__edge9 = candidate_TNTUnfolded_edge__edge9;
                                                                                                                                                                                                        match._edge__edge10 = candidate_TNTUnfolded_edge__edge10;
                                                                                                                                                                                                        match._edge__edge11 = candidate_TNTUnfolded_edge__edge11;
                                                                                                                                                                                                        match._edge__edge12 = candidate_TNTUnfolded_edge__edge12;
                                                                                                                                                                                                        match._edge__edge13 = candidate_TNTUnfolded_edge__edge13;
                                                                                                                                                                                                        match._edge__edge14 = candidate_TNTUnfolded_edge__edge14;
                                                                                                                                                                                                        match._edge__edge15 = candidate_TNTUnfolded_edge__edge15;
                                                                                                                                                                                                        match._edge__edge16 = candidate_TNTUnfolded_edge__edge16;
                                                                                                                                                                                                        match._edge__edge17 = candidate_TNTUnfolded_edge__edge17;
                                                                                                                                                                                                        match._edge__edge18 = candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                                                                        match._edge__edge19 = candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                                                        match._edge__edge20 = candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                                                                        match._edge__edge21 = candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                                        match._edge__edge22 = candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                                        match._edge__edge23 = candidate_TNTUnfolded_edge__edge23;
                                                                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                                        {
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n6.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge23);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n6.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge22);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c6.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge21);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c6.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge5);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n4.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge19);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n4.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge18);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c5.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge20);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c5.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge8);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c5.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge4);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c4.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge17);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c4.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge3);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n2.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge15);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n2.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge14);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c3.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge16);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c3.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge7);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c3.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge2);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge12);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge11);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge10);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c2.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge13);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c2.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge1);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c1.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge9);
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c1.MoveOutHeadAfter(candidate_TNTUnfolded_edge__edge6);
                                                                                                                                                                                                            graph.MoveHeadAfter(candidate_TNTUnfolded_edge__edge0);
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node9.lgspFlags = candidate_TNTUnfolded_node__node9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node9;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge22.lgspFlags = candidate_TNTUnfolded_edge__edge22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge21.lgspFlags = candidate_TNTUnfolded_edge__edge21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge5.lgspFlags = candidate_TNTUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge5;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node7.lgspFlags = candidate_TNTUnfolded_node__node7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node7;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge19.lgspFlags = candidate_TNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node6.lgspFlags = candidate_TNTUnfolded_node__node6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node6;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge18.lgspFlags = candidate_TNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge20.lgspFlags = candidate_TNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge8.lgspFlags = candidate_TNTUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge8;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge4.lgspFlags = candidate_TNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge4;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n4.lgspFlags = candidate_TNTUnfolded_node_n4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_n4;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge17.lgspFlags = candidate_TNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge17;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c5.lgspFlags = candidate_TNTUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c5;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge3.lgspFlags = candidate_TNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge3;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node4.lgspFlags = candidate_TNTUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node4;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge15.lgspFlags = candidate_TNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge15;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node3.lgspFlags = candidate_TNTUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node3;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge14.lgspFlags = candidate_TNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge14;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node5.lgspFlags = candidate_TNTUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node5;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge16.lgspFlags = candidate_TNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge16;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge7.lgspFlags = candidate_TNTUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge7;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c4.lgspFlags = candidate_TNTUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c4;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge2.lgspFlags = candidate_TNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge2;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node2.lgspFlags = candidate_TNTUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node2;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge12.lgspFlags = candidate_TNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge12;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node1.lgspFlags = candidate_TNTUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node1;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge11.lgspFlags = candidate_TNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge11;
                                                                                                                                                                                                            candidate_TNTUnfolded_node__node0.lgspFlags = candidate_TNTUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node0;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge10.lgspFlags = candidate_TNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge10;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_n2.lgspFlags = candidate_TNTUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_n2;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge13.lgspFlags = candidate_TNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge13;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c3.lgspFlags = candidate_TNTUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c3;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge1.lgspFlags = candidate_TNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge1;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c.lgspFlags = candidate_TNTUnfolded_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge9.lgspFlags = candidate_TNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge9;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge6.lgspFlags = candidate_TNTUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge6;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c2.lgspFlags = candidate_TNTUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c2;
                                                                                                                                                                                                            candidate_TNTUnfolded_node_c1.lgspFlags = candidate_TNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c1;
                                                                                                                                                                                                            candidate_TNTUnfolded_edge__edge0.lgspFlags = candidate_TNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge0;
                                                                                                                                                                                                            return matches;
                                                                                                                                                                                                        }
                                                                                                                                                                                                    }
                                                                                                                                                                                                    while( (candidate_TNTUnfolded_edge__edge23 = candidate_TNTUnfolded_edge__edge23.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge23 );
                                                                                                                                                                                                }
                                                                                                                                                                                                candidate_TNTUnfolded_node__node9.lgspFlags = candidate_TNTUnfolded_node__node9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node9;
                                                                                                                                                                                                candidate_TNTUnfolded_edge__edge22.lgspFlags = candidate_TNTUnfolded_edge__edge22.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge22;
                                                                                                                                                                                            }
                                                                                                                                                                                            while( (candidate_TNTUnfolded_edge__edge22 = candidate_TNTUnfolded_edge__edge22.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge22 );
                                                                                                                                                                                        }
                                                                                                                                                                                        candidate_TNTUnfolded_edge__edge21.lgspFlags = candidate_TNTUnfolded_edge__edge21.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge21;
                                                                                                                                                                                    }
                                                                                                                                                                                    while( (candidate_TNTUnfolded_edge__edge21 = candidate_TNTUnfolded_edge__edge21.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge21 );
                                                                                                                                                                                }
                                                                                                                                                                                candidate_TNTUnfolded_edge__edge5.lgspFlags = candidate_TNTUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge5;
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_TNTUnfolded_edge__edge5 = candidate_TNTUnfolded_edge__edge5.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge5 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_TNTUnfolded_node__node7.lgspFlags = candidate_TNTUnfolded_node__node7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node7;
                                                                                                                                                                        candidate_TNTUnfolded_edge__edge19.lgspFlags = candidate_TNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge19;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_TNTUnfolded_edge__edge19 = candidate_TNTUnfolded_edge__edge19.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge19 );
                                                                                                                                                                }
                                                                                                                                                                candidate_TNTUnfolded_node__node6.lgspFlags = candidate_TNTUnfolded_node__node6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node6;
                                                                                                                                                                candidate_TNTUnfolded_edge__edge18.lgspFlags = candidate_TNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge18;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_TNTUnfolded_edge__edge18 = candidate_TNTUnfolded_edge__edge18.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge18 );
                                                                                                                                                        }
                                                                                                                                                        candidate_TNTUnfolded_edge__edge20.lgspFlags = candidate_TNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge20;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_TNTUnfolded_edge__edge20 = candidate_TNTUnfolded_edge__edge20.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge20 );
                                                                                                                                                }
                                                                                                                                                candidate_TNTUnfolded_edge__edge8.lgspFlags = candidate_TNTUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge8;
                                                                                                                                            }
                                                                                                                                            while( (candidate_TNTUnfolded_edge__edge8 = candidate_TNTUnfolded_edge__edge8.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge8 );
                                                                                                                                        }
                                                                                                                                        candidate_TNTUnfolded_edge__edge4.lgspFlags = candidate_TNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge4;
                                                                                                                                    }
                                                                                                                                    while( (candidate_TNTUnfolded_edge__edge4 = candidate_TNTUnfolded_edge__edge4.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge4 );
                                                                                                                                }
                                                                                                                                candidate_TNTUnfolded_node_n4.lgspFlags = candidate_TNTUnfolded_node_n4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_n4;
                                                                                                                                candidate_TNTUnfolded_edge__edge17.lgspFlags = candidate_TNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge17;
                                                                                                                            }
                                                                                                                            while( (candidate_TNTUnfolded_edge__edge17 = candidate_TNTUnfolded_edge__edge17.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge17 );
                                                                                                                        }
                                                                                                                        candidate_TNTUnfolded_node_c5.lgspFlags = candidate_TNTUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c5;
                                                                                                                        candidate_TNTUnfolded_edge__edge3.lgspFlags = candidate_TNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge3;
                                                                                                                    }
                                                                                                                    while( (candidate_TNTUnfolded_edge__edge3 = candidate_TNTUnfolded_edge__edge3.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge3 );
                                                                                                                }
                                                                                                                candidate_TNTUnfolded_node__node4.lgspFlags = candidate_TNTUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node4;
                                                                                                                candidate_TNTUnfolded_edge__edge15.lgspFlags = candidate_TNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge15;
                                                                                                            }
                                                                                                            while( (candidate_TNTUnfolded_edge__edge15 = candidate_TNTUnfolded_edge__edge15.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge15 );
                                                                                                        }
                                                                                                        candidate_TNTUnfolded_node__node3.lgspFlags = candidate_TNTUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node3;
                                                                                                        candidate_TNTUnfolded_edge__edge14.lgspFlags = candidate_TNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge14;
                                                                                                    }
                                                                                                    while( (candidate_TNTUnfolded_edge__edge14 = candidate_TNTUnfolded_edge__edge14.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge14 );
                                                                                                }
                                                                                                candidate_TNTUnfolded_node__node5.lgspFlags = candidate_TNTUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node5;
                                                                                                candidate_TNTUnfolded_edge__edge16.lgspFlags = candidate_TNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge16;
                                                                                            }
                                                                                            while( (candidate_TNTUnfolded_edge__edge16 = candidate_TNTUnfolded_edge__edge16.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge16 );
                                                                                        }
                                                                                        candidate_TNTUnfolded_edge__edge7.lgspFlags = candidate_TNTUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge7;
                                                                                    }
                                                                                    while( (candidate_TNTUnfolded_edge__edge7 = candidate_TNTUnfolded_edge__edge7.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge7 );
                                                                                }
                                                                                candidate_TNTUnfolded_node_c4.lgspFlags = candidate_TNTUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c4;
                                                                                candidate_TNTUnfolded_edge__edge2.lgspFlags = candidate_TNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge2;
                                                                            }
                                                                            while( (candidate_TNTUnfolded_edge__edge2 = candidate_TNTUnfolded_edge__edge2.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge2 );
                                                                        }
                                                                        candidate_TNTUnfolded_node__node2.lgspFlags = candidate_TNTUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node2;
                                                                        candidate_TNTUnfolded_edge__edge12.lgspFlags = candidate_TNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge12;
                                                                    }
                                                                    while( (candidate_TNTUnfolded_edge__edge12 = candidate_TNTUnfolded_edge__edge12.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge12 );
                                                                }
                                                                candidate_TNTUnfolded_node__node1.lgspFlags = candidate_TNTUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node1;
                                                                candidate_TNTUnfolded_edge__edge11.lgspFlags = candidate_TNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge11;
                                                            }
                                                            while( (candidate_TNTUnfolded_edge__edge11 = candidate_TNTUnfolded_edge__edge11.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge11 );
                                                        }
                                                        candidate_TNTUnfolded_node__node0.lgspFlags = candidate_TNTUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node__node0;
                                                        candidate_TNTUnfolded_edge__edge10.lgspFlags = candidate_TNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge10;
                                                    }
                                                    while( (candidate_TNTUnfolded_edge__edge10 = candidate_TNTUnfolded_edge__edge10.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge10 );
                                                }
                                                candidate_TNTUnfolded_node_n2.lgspFlags = candidate_TNTUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_n2;
                                                candidate_TNTUnfolded_edge__edge13.lgspFlags = candidate_TNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge13;
                                            }
                                            while( (candidate_TNTUnfolded_edge__edge13 = candidate_TNTUnfolded_edge__edge13.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge13 );
                                        }
                                        candidate_TNTUnfolded_node_c3.lgspFlags = candidate_TNTUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c3;
                                        candidate_TNTUnfolded_edge__edge1.lgspFlags = candidate_TNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge1;
                                    }
                                    while( (candidate_TNTUnfolded_edge__edge1 = candidate_TNTUnfolded_edge__edge1.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge1 );
                                }
                                candidate_TNTUnfolded_node_c.lgspFlags = candidate_TNTUnfolded_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c;
                                candidate_TNTUnfolded_edge__edge9.lgspFlags = candidate_TNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge9;
                            }
                            while( (candidate_TNTUnfolded_edge__edge9 = candidate_TNTUnfolded_edge__edge9.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge9 );
                        }
                        candidate_TNTUnfolded_edge__edge6.lgspFlags = candidate_TNTUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge6;
                    }
                    while( (candidate_TNTUnfolded_edge__edge6 = candidate_TNTUnfolded_edge__edge6.lgspOutNext) != head_candidate_TNTUnfolded_edge__edge6 );
                }
                candidate_TNTUnfolded_node_c2.lgspFlags = candidate_TNTUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c2;
                candidate_TNTUnfolded_node_c1.lgspFlags = candidate_TNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_node_c1;
                candidate_TNTUnfolded_edge__edge0.lgspFlags = candidate_TNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNTUnfolded_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNTUnfolded.IMatch_TNTUnfolded match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches)
        {
            foreach(Rule_TNTUnfolded.IMatch_TNTUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNTUnfolded.IMatch_TNTUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNTUnfolded.IMatch_TNTUnfolded)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNTUnfolded.IMatch_TNTUnfolded>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_createTNT
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createTNT.IMatch_createTNT match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_createTNT : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_createTNT
    {
        public Action_createTNT()
            : base(Rule_createTNT.Instance.patternGraph)
        {
            _rulePattern = Rule_createTNT.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_createTNT _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "createTNT"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_createTNT.Match_createTNT, Rule_createTNT.IMatch_createTNT> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_createTNT Instance { get { return instance; } set { instance = value; } }
        private static Action_createTNT instance = new Action_createTNT();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_createTNT.Match_createTNT, Rule_createTNT.IMatch_createTNT>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Rule_createTNT.Match_createTNT match = matches.GetNextUnfilledPosition();
            matches.PositionWasFilledFixIt();
            // if enough matches were found, we leave
            if(maxMatches > 0 && matches.Count >= maxMatches)
            {
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createTNT.IMatch_createTNT match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches)
        {
            foreach(Rule_createTNT.IMatch_createTNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_createTNT.IMatch_createTNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_createTNT.IMatch_createTNT)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_createTNT.IMatch_createTNT>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_DNT
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_DNT.IMatch_DNT match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_DNT : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_DNT
    {
        public Action_DNT()
            : base(Rule_DNT.Instance.patternGraph)
        {
            _rulePattern = Rule_DNT.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_DNT _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "DNT"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_DNT.Match_DNT, Rule_DNT.IMatch_DNT> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_DNT Instance { get { return instance; } set { instance = value; } }
        private static Action_DNT instance = new Action_DNT();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_DNT.Match_DNT, Rule_DNT.IMatch_DNT>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup DNT_edge__edge0 
            int type_id_candidate_DNT_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_DNT_edge__edge0], candidate_DNT_edge__edge0 = head_candidate_DNT_edge__edge0.lgspTypeNext; candidate_DNT_edge__edge0 != head_candidate_DNT_edge__edge0; candidate_DNT_edge__edge0 = candidate_DNT_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_DNT_edge__edge0;
                prev__candidate_DNT_edge__edge0 = candidate_DNT_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNT_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source DNT_node_c1 from DNT_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_DNT_node_c1 = candidate_DNT_edge__edge0.lgspSource;
                if(candidate_DNT_node_c1.lgspType.TypeID!=1) {
                    candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                    continue;
                }
                uint prev__candidate_DNT_node_c1;
                prev__candidate_DNT_node_c1 = candidate_DNT_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNT_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target DNT_node_c2 from DNT_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_DNT_node_c2 = candidate_DNT_edge__edge0.lgspTarget;
                if(candidate_DNT_node_c2.lgspType.TypeID!=1) {
                    candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                    candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                    continue;
                }
                if((candidate_DNT_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                    candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                    continue;
                }
                uint prev__candidate_DNT_node_c2;
                prev__candidate_DNT_node_c2 = candidate_DNT_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNT_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element Nitro_node_anchor_inlined__sub1_34 assigned from other element DNT_node_c2 
                GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub1_34 = candidate_DNT_node_c2;
                if(candidate_Nitro_node_anchor_inlined__sub1_34.lgspType.TypeID!=1) {
                    candidate_DNT_node_c2.lgspFlags = candidate_DNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c2;
                    candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                    candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                    continue;
                }
                // Element Methyl_node_anchor_inlined__sub0_33 assigned from other element DNT_node_c1 
                GRGEN_LGSP.LGSPNode candidate_Methyl_node_anchor_inlined__sub0_33 = candidate_DNT_node_c1;
                if(candidate_Methyl_node_anchor_inlined__sub0_33.lgspType.TypeID!=1) {
                    candidate_DNT_node_c2.lgspFlags = candidate_DNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c2;
                    candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                    candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                    continue;
                }
                // Extend Outgoing DNT_edge__edge6 from DNT_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge6 = candidate_DNT_node_c1.lgspOuthead;
                if(head_candidate_DNT_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge6 = head_candidate_DNT_edge__edge6;
                    do
                    {
                        if(candidate_DNT_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_DNT_edge__edge6.lgspTarget != candidate_DNT_node_c2) {
                            continue;
                        }
                        if((candidate_DNT_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_DNT_edge__edge6;
                        prev__candidate_DNT_edge__edge6 = candidate_DNT_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_DNT_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing DNT_edge__edge1 from DNT_node_c2 
                        GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge1 = candidate_DNT_node_c2.lgspOuthead;
                        if(head_candidate_DNT_edge__edge1 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge1 = head_candidate_DNT_edge__edge1;
                            do
                            {
                                if(candidate_DNT_edge__edge1.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_DNT_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_DNT_edge__edge1;
                                prev__candidate_DNT_edge__edge1 = candidate_DNT_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_DNT_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target DNT_node_c3 from DNT_edge__edge1 
                                GRGEN_LGSP.LGSPNode candidate_DNT_node_c3 = candidate_DNT_edge__edge1.lgspTarget;
                                if(candidate_DNT_node_c3.lgspType.TypeID!=1) {
                                    candidate_DNT_edge__edge1.lgspFlags = candidate_DNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge1;
                                    continue;
                                }
                                if((candidate_DNT_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_DNT_edge__edge1.lgspFlags = candidate_DNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge1;
                                    continue;
                                }
                                uint prev__candidate_DNT_node_c3;
                                prev__candidate_DNT_node_c3 = candidate_DNT_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_DNT_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element Hydrogen_node_anchor_inlined__sub2_35 assigned from other element DNT_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub2_35 = candidate_DNT_node_c3;
                                if(candidate_Hydrogen_node_anchor_inlined__sub2_35.lgspType.TypeID!=1) {
                                    candidate_DNT_node_c3.lgspFlags = candidate_DNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c3;
                                    candidate_DNT_edge__edge1.lgspFlags = candidate_DNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge1;
                                    continue;
                                }
                                // Extend Outgoing Nitro_edge__edge0_inlined__sub1_34 from Nitro_node_anchor_inlined__sub1_34 
                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub1_34 = candidate_Nitro_node_anchor_inlined__sub1_34.lgspOuthead;
                                if(head_candidate_Nitro_edge__edge0_inlined__sub1_34 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub1_34 = head_candidate_Nitro_edge__edge0_inlined__sub1_34;
                                    do
                                    {
                                        if(candidate_Nitro_edge__edge0_inlined__sub1_34.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub1_34;
                                        prev__candidate_Nitro_edge__edge0_inlined__sub1_34 = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Nitro_node_n_inlined__sub1_34 from Nitro_edge__edge0_inlined__sub1_34 
                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub1_34 = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspTarget;
                                        if(candidate_Nitro_node_n_inlined__sub1_34.lgspType.TypeID!=4) {
                                            candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_34;
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_node_n_inlined__sub1_34;
                                        prev__candidate_Nitro_node_n_inlined__sub1_34 = candidate_Nitro_node_n_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_node_n_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing Methyl_edge__edge0_inlined__sub0_33 from Methyl_node_anchor_inlined__sub0_33 
                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge0_inlined__sub0_33 = candidate_Methyl_node_anchor_inlined__sub0_33.lgspOuthead;
                                        if(head_candidate_Methyl_edge__edge0_inlined__sub0_33 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge0_inlined__sub0_33 = head_candidate_Methyl_edge__edge0_inlined__sub0_33;
                                            do
                                            {
                                                if(candidate_Methyl_edge__edge0_inlined__sub0_33.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_edge__edge0_inlined__sub0_33;
                                                prev__candidate_Methyl_edge__edge0_inlined__sub0_33 = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target Methyl_node_c_inlined__sub0_33 from Methyl_edge__edge0_inlined__sub0_33 
                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node_c_inlined__sub0_33 = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspTarget;
                                                if(candidate_Methyl_node_c_inlined__sub0_33.lgspType.TypeID!=1) {
                                                    candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_33;
                                                    continue;
                                                }
                                                if((candidate_Methyl_node_c_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_33;
                                                    continue;
                                                }
                                                uint prev__candidate_Methyl_node_c_inlined__sub0_33;
                                                prev__candidate_Methyl_node_c_inlined__sub0_33 = candidate_Methyl_node_c_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Methyl_node_c_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing DNT_edge__edge2 from DNT_node_c3 
                                                GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge2 = candidate_DNT_node_c3.lgspOuthead;
                                                if(head_candidate_DNT_edge__edge2 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge2 = head_candidate_DNT_edge__edge2;
                                                    do
                                                    {
                                                        if(candidate_DNT_edge__edge2.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_DNT_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_DNT_edge__edge2;
                                                        prev__candidate_DNT_edge__edge2 = candidate_DNT_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_DNT_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target DNT_node_c4 from DNT_edge__edge2 
                                                        GRGEN_LGSP.LGSPNode candidate_DNT_node_c4 = candidate_DNT_edge__edge2.lgspTarget;
                                                        if(candidate_DNT_node_c4.lgspType.TypeID!=1) {
                                                            candidate_DNT_edge__edge2.lgspFlags = candidate_DNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge2;
                                                            continue;
                                                        }
                                                        if((candidate_DNT_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_DNT_edge__edge2.lgspFlags = candidate_DNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge2;
                                                            continue;
                                                        }
                                                        uint prev__candidate_DNT_node_c4;
                                                        prev__candidate_DNT_node_c4 = candidate_DNT_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_DNT_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element Nitro_node_anchor_inlined__sub3_36 assigned from other element DNT_node_c4 
                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub3_36 = candidate_DNT_node_c4;
                                                        if(candidate_Nitro_node_anchor_inlined__sub3_36.lgspType.TypeID!=1) {
                                                            candidate_DNT_node_c4.lgspFlags = candidate_DNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c4;
                                                            candidate_DNT_edge__edge2.lgspFlags = candidate_DNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge2;
                                                            continue;
                                                        }
                                                        // Extend Outgoing DNT_edge__edge7 from DNT_node_c3 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge7 = candidate_DNT_node_c3.lgspOuthead;
                                                        if(head_candidate_DNT_edge__edge7 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge7 = head_candidate_DNT_edge__edge7;
                                                            do
                                                            {
                                                                if(candidate_DNT_edge__edge7.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_DNT_edge__edge7.lgspTarget != candidate_DNT_node_c4) {
                                                                    continue;
                                                                }
                                                                if((candidate_DNT_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_DNT_edge__edge7;
                                                                prev__candidate_DNT_edge__edge7 = candidate_DNT_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_DNT_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub2_35 from Hydrogen_node_anchor_inlined__sub2_35 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub2_35 = candidate_Hydrogen_node_anchor_inlined__sub2_35.lgspOuthead;
                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub2_35 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub2_35 = head_candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                    do
                                                                    {
                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub2_35 = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub2_35 from Hydrogen_edge__edge0_inlined__sub2_35 
                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub2_35 = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspTarget;
                                                                        if(candidate_Hydrogen_node__node0_inlined__sub2_35.lgspType.TypeID!=2) {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub2_35;
                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub2_35 = candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub1_34 from Nitro_node_n_inlined__sub1_34 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub1_34 = candidate_Nitro_node_n_inlined__sub1_34.lgspOuthead;
                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub1_34 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub1_34 = head_candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                            do
                                                                            {
                                                                                if(candidate_Nitro_edge__edge1_inlined__sub1_34.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub1_34 = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target Nitro_node__node0_inlined__sub1_34 from Nitro_edge__edge1_inlined__sub1_34 
                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub1_34 = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspTarget;
                                                                                if(candidate_Nitro_node__node0_inlined__sub1_34.lgspType.TypeID!=3) {
                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub1_34;
                                                                                prev__candidate_Nitro_node__node0_inlined__sub1_34 = candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub1_34 from Nitro_node_n_inlined__sub1_34 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub1_34 = candidate_Nitro_node_n_inlined__sub1_34.lgspOuthead;
                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub1_34 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub1_34 = head_candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub1_34.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub1_34 = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target Nitro_node__node1_inlined__sub1_34 from Nitro_edge__edge2_inlined__sub1_34 
                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub1_34 = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspTarget;
                                                                                        if(candidate_Nitro_node__node1_inlined__sub1_34.lgspType.TypeID!=3) {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub1_34;
                                                                                        prev__candidate_Nitro_node__node1_inlined__sub1_34 = candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing Methyl_edge__edge1_inlined__sub0_33 from Methyl_node_c_inlined__sub0_33 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge1_inlined__sub0_33 = candidate_Methyl_node_c_inlined__sub0_33.lgspOuthead;
                                                                                        if(head_candidate_Methyl_edge__edge1_inlined__sub0_33 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge1_inlined__sub0_33 = head_candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_Methyl_edge__edge1_inlined__sub0_33.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                                prev__candidate_Methyl_edge__edge1_inlined__sub0_33 = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target Methyl_node__node0_inlined__sub0_33 from Methyl_edge__edge1_inlined__sub0_33 
                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node0_inlined__sub0_33 = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspTarget;
                                                                                                if(candidate_Methyl_node__node0_inlined__sub0_33.lgspType.TypeID!=2) {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_Methyl_node__node0_inlined__sub0_33;
                                                                                                prev__candidate_Methyl_node__node0_inlined__sub0_33 = candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing Methyl_edge__edge2_inlined__sub0_33 from Methyl_node_c_inlined__sub0_33 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge2_inlined__sub0_33 = candidate_Methyl_node_c_inlined__sub0_33.lgspOuthead;
                                                                                                if(head_candidate_Methyl_edge__edge2_inlined__sub0_33 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge2_inlined__sub0_33 = head_candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_Methyl_edge__edge2_inlined__sub0_33.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                        prev__candidate_Methyl_edge__edge2_inlined__sub0_33 = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target Methyl_node__node1_inlined__sub0_33 from Methyl_edge__edge2_inlined__sub0_33 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Methyl_node__node1_inlined__sub0_33 = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspTarget;
                                                                                                        if(candidate_Methyl_node__node1_inlined__sub0_33.lgspType.TypeID!=2) {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Methyl_node__node1_inlined__sub0_33;
                                                                                                        prev__candidate_Methyl_node__node1_inlined__sub0_33 = candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing Methyl_edge__edge3_inlined__sub0_33 from Methyl_node_c_inlined__sub0_33 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Methyl_edge__edge3_inlined__sub0_33 = candidate_Methyl_node_c_inlined__sub0_33.lgspOuthead;
                                                                                                        if(head_candidate_Methyl_edge__edge3_inlined__sub0_33 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Methyl_edge__edge3_inlined__sub0_33 = head_candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_Methyl_edge__edge3_inlined__sub0_33.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                                prev__candidate_Methyl_edge__edge3_inlined__sub0_33 = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target Methyl_node__node2_inlined__sub0_33 from Methyl_edge__edge3_inlined__sub0_33 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_Methyl_node__node2_inlined__sub0_33 = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspTarget;
                                                                                                                if(candidate_Methyl_node__node2_inlined__sub0_33.lgspType.TypeID!=2) {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_Methyl_node__node2_inlined__sub0_33;
                                                                                                                prev__candidate_Methyl_node__node2_inlined__sub0_33 = candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing DNT_edge__edge3 from DNT_node_c4 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge3 = candidate_DNT_node_c4.lgspOuthead;
                                                                                                                if(head_candidate_DNT_edge__edge3 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge3 = head_candidate_DNT_edge__edge3;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_DNT_edge__edge3.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_DNT_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_DNT_edge__edge3;
                                                                                                                        prev__candidate_DNT_edge__edge3 = candidate_DNT_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_DNT_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target DNT_node_c5 from DNT_edge__edge3 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNT_node_c5 = candidate_DNT_edge__edge3.lgspTarget;
                                                                                                                        if(candidate_DNT_node_c5.lgspType.TypeID!=1) {
                                                                                                                            candidate_DNT_edge__edge3.lgspFlags = candidate_DNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_DNT_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_DNT_edge__edge3.lgspFlags = candidate_DNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_DNT_node_c5;
                                                                                                                        prev__candidate_DNT_node_c5 = candidate_DNT_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_DNT_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Element Hydrogen_node_anchor_inlined__sub4_37 assigned from other element DNT_node_c5 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub4_37 = candidate_DNT_node_c5;
                                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub4_37.lgspType.TypeID!=1) {
                                                                                                                            candidate_DNT_node_c5.lgspFlags = candidate_DNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c5;
                                                                                                                            candidate_DNT_edge__edge3.lgspFlags = candidate_DNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        // Extend Outgoing Nitro_edge__edge0_inlined__sub3_36 from Nitro_node_anchor_inlined__sub3_36 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub3_36 = candidate_Nitro_node_anchor_inlined__sub3_36.lgspOuthead;
                                                                                                                        if(head_candidate_Nitro_edge__edge0_inlined__sub3_36 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub3_36 = head_candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_Nitro_edge__edge0_inlined__sub3_36.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                                prev__candidate_Nitro_edge__edge0_inlined__sub3_36 = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target Nitro_node_n_inlined__sub3_36 from Nitro_edge__edge0_inlined__sub3_36 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub3_36 = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspTarget;
                                                                                                                                if(candidate_Nitro_node_n_inlined__sub3_36.lgspType.TypeID!=4) {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Nitro_node_n_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                // Extend Outgoing DNT_edge__edge4 from DNT_node_c5 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge4 = candidate_DNT_node_c5.lgspOuthead;
                                                                                                                                if(head_candidate_DNT_edge__edge4 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge4 = head_candidate_DNT_edge__edge4;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_DNT_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_DNT_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_DNT_edge__edge4;
                                                                                                                                        prev__candidate_DNT_edge__edge4 = candidate_DNT_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_DNT_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target DNT_node_c6 from DNT_edge__edge4 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNT_node_c6 = candidate_DNT_edge__edge4.lgspTarget;
                                                                                                                                        if(candidate_DNT_node_c6.lgspType.TypeID!=1) {
                                                                                                                                            candidate_DNT_edge__edge4.lgspFlags = candidate_DNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_DNT_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_DNT_edge__edge4.lgspFlags = candidate_DNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Element Hydrogen_node_anchor_inlined__sub5_38 assigned from other element DNT_node_c6 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub5_38 = candidate_DNT_node_c6;
                                                                                                                                        if(candidate_Hydrogen_node_anchor_inlined__sub5_38.lgspType.TypeID!=1) {
                                                                                                                                            candidate_DNT_edge__edge4.lgspFlags = candidate_DNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Extend Outgoing DNT_edge__edge8 from DNT_node_c5 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge8 = candidate_DNT_node_c5.lgspOuthead;
                                                                                                                                        if(head_candidate_DNT_edge__edge8 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge8 = head_candidate_DNT_edge__edge8;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_DNT_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_DNT_edge__edge8.lgspTarget != candidate_DNT_node_c6) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_DNT_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_DNT_edge__edge8;
                                                                                                                                                prev__candidate_DNT_edge__edge8 = candidate_DNT_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_DNT_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub4_37 from Hydrogen_node_anchor_inlined__sub4_37 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub4_37 = candidate_Hydrogen_node_anchor_inlined__sub4_37.lgspOuthead;
                                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub4_37 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub4_37 = head_candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37 = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub4_37 from Hydrogen_edge__edge0_inlined__sub4_37 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub4_37 = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspTarget;
                                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub4_37.lgspType.TypeID!=2) {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub4_37;
                                                                                                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub4_37 = candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub3_36 from Nitro_node_n_inlined__sub3_36 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub3_36 = candidate_Nitro_node_n_inlined__sub3_36.lgspOuthead;
                                                                                                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub3_36 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub3_36 = head_candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_Nitro_edge__edge1_inlined__sub3_36.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub3_36 = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target Nitro_node__node0_inlined__sub3_36 from Nitro_edge__edge1_inlined__sub3_36 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub3_36 = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspTarget;
                                                                                                                                                                if(candidate_Nitro_node__node0_inlined__sub3_36.lgspType.TypeID!=3) {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub3_36;
                                                                                                                                                                prev__candidate_Nitro_node__node0_inlined__sub3_36 = candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub3_36 from Nitro_node_n_inlined__sub3_36 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub3_36 = candidate_Nitro_node_n_inlined__sub3_36.lgspOuthead;
                                                                                                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub3_36 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub3_36 = head_candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub3_36.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub3_36 = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target Nitro_node__node1_inlined__sub3_36 from Nitro_edge__edge2_inlined__sub3_36 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub3_36 = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspTarget;
                                                                                                                                                                        if(candidate_Nitro_node__node1_inlined__sub3_36.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_node__node1_inlined__sub3_36.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        // Extend Outgoing DNT_edge__edge5 from DNT_node_c6 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNT_edge__edge5 = candidate_DNT_node_c6.lgspOuthead;
                                                                                                                                                                        if(head_candidate_DNT_edge__edge5 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNT_edge__edge5 = head_candidate_DNT_edge__edge5;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_DNT_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if(candidate_DNT_edge__edge5.lgspTarget != candidate_DNT_node_c1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_DNT_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                uint prev__candidate_DNT_edge__edge5;
                                                                                                                                                                                prev__candidate_DNT_edge__edge5 = candidate_DNT_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                candidate_DNT_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub5_38 from Hydrogen_node_anchor_inlined__sub5_38 
                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub5_38 = candidate_Hydrogen_node_anchor_inlined__sub5_38.lgspOuthead;
                                                                                                                                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub5_38 != null)
                                                                                                                                                                                {
                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub5_38 = head_candidate_Hydrogen_edge__edge0_inlined__sub5_38;
                                                                                                                                                                                    do
                                                                                                                                                                                    {
                                                                                                                                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub5_38.lgspType.TypeID!=1) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub5_38.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub5_38 from Hydrogen_edge__edge0_inlined__sub5_38 
                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub5_38 = candidate_Hydrogen_edge__edge0_inlined__sub5_38.lgspTarget;
                                                                                                                                                                                        if(candidate_Hydrogen_node__node0_inlined__sub5_38.lgspType.TypeID!=2) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_Hydrogen_node__node0_inlined__sub5_38.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        Rule_DNT.Match_DNT match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                        Pattern_Methyl.Match_Methyl match__sub0 = new Pattern_Methyl.Match_Methyl();
                                                                                                                                                                                        match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub1 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                        match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub2 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                        match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        Pattern_Nitro.Match_Nitro match__sub3 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                        match__sub3.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub4 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                        match__sub4.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        Pattern_Hydrogen.Match_Hydrogen match__sub5 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                        match__sub5.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                        match._node_c1 = candidate_DNT_node_c1;
                                                                                                                                                                                        match._node_c2 = candidate_DNT_node_c2;
                                                                                                                                                                                        match._node_c3 = candidate_DNT_node_c3;
                                                                                                                                                                                        match._node_c4 = candidate_DNT_node_c4;
                                                                                                                                                                                        match._node_c5 = candidate_DNT_node_c5;
                                                                                                                                                                                        match._node_c6 = candidate_DNT_node_c6;
                                                                                                                                                                                        match__sub0._node_anchor = candidate_Methyl_node_anchor_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._node_c = candidate_Methyl_node_c_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._node__node0 = candidate_Methyl_node__node0_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._node__node1 = candidate_Methyl_node__node1_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._node__node2 = candidate_Methyl_node__node2_inlined__sub0_33;
                                                                                                                                                                                        match__sub1._node_anchor = candidate_Nitro_node_anchor_inlined__sub1_34;
                                                                                                                                                                                        match__sub1._node_n = candidate_Nitro_node_n_inlined__sub1_34;
                                                                                                                                                                                        match__sub1._node__node0 = candidate_Nitro_node__node0_inlined__sub1_34;
                                                                                                                                                                                        match__sub1._node__node1 = candidate_Nitro_node__node1_inlined__sub1_34;
                                                                                                                                                                                        match__sub2._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub2_35;
                                                                                                                                                                                        match__sub2._node__node0 = candidate_Hydrogen_node__node0_inlined__sub2_35;
                                                                                                                                                                                        match__sub3._node_anchor = candidate_Nitro_node_anchor_inlined__sub3_36;
                                                                                                                                                                                        match__sub3._node_n = candidate_Nitro_node_n_inlined__sub3_36;
                                                                                                                                                                                        match__sub3._node__node0 = candidate_Nitro_node__node0_inlined__sub3_36;
                                                                                                                                                                                        match__sub3._node__node1 = candidate_Nitro_node__node1_inlined__sub3_36;
                                                                                                                                                                                        match__sub4._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub4_37;
                                                                                                                                                                                        match__sub4._node__node0 = candidate_Hydrogen_node__node0_inlined__sub4_37;
                                                                                                                                                                                        match__sub5._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub5_38;
                                                                                                                                                                                        match__sub5._node__node0 = candidate_Hydrogen_node__node0_inlined__sub5_38;
                                                                                                                                                                                        match._edge__edge0 = candidate_DNT_edge__edge0;
                                                                                                                                                                                        match._edge__edge1 = candidate_DNT_edge__edge1;
                                                                                                                                                                                        match._edge__edge2 = candidate_DNT_edge__edge2;
                                                                                                                                                                                        match._edge__edge3 = candidate_DNT_edge__edge3;
                                                                                                                                                                                        match._edge__edge4 = candidate_DNT_edge__edge4;
                                                                                                                                                                                        match._edge__edge5 = candidate_DNT_edge__edge5;
                                                                                                                                                                                        match._edge__edge6 = candidate_DNT_edge__edge6;
                                                                                                                                                                                        match._edge__edge7 = candidate_DNT_edge__edge7;
                                                                                                                                                                                        match._edge__edge8 = candidate_DNT_edge__edge8;
                                                                                                                                                                                        match__sub0._edge__edge0 = candidate_Methyl_edge__edge0_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._edge__edge1 = candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._edge__edge2 = candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                                                                                                        match__sub0._edge__edge3 = candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                                                                                                        match__sub1._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub1_34;
                                                                                                                                                                                        match__sub1._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                                                                                                                                        match__sub1._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                                                                                                                        match__sub2._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                                                                                                                                        match__sub3._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                                                                                        match__sub3._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                                                        match__sub3._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                                        match__sub4._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                                                        match__sub5._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub5_38;
                                                                                                                                                                                        match.__sub0 = match__sub0;
                                                                                                                                                                                        match.__sub1 = match__sub1;
                                                                                                                                                                                        match.__sub2 = match__sub2;
                                                                                                                                                                                        match.__sub3 = match__sub3;
                                                                                                                                                                                        match.__sub4 = match__sub4;
                                                                                                                                                                                        match.__sub5 = match__sub5;
                                                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                        {
                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub5_38.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub5_38);
                                                                                                                                                                                            candidate_DNT_node_c6.MoveOutHeadAfter(candidate_DNT_edge__edge5);
                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub3_36.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub3_36);
                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub3_36.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub3_36);
                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub4_37.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub4_37);
                                                                                                                                                                                            candidate_DNT_node_c5.MoveOutHeadAfter(candidate_DNT_edge__edge8);
                                                                                                                                                                                            candidate_DNT_node_c5.MoveOutHeadAfter(candidate_DNT_edge__edge4);
                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub3_36.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub3_36);
                                                                                                                                                                                            candidate_DNT_node_c4.MoveOutHeadAfter(candidate_DNT_edge__edge3);
                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_33.MoveOutHeadAfter(candidate_Methyl_edge__edge3_inlined__sub0_33);
                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_33.MoveOutHeadAfter(candidate_Methyl_edge__edge2_inlined__sub0_33);
                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_33.MoveOutHeadAfter(candidate_Methyl_edge__edge1_inlined__sub0_33);
                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_34.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub1_34);
                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_34.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub1_34);
                                                                                                                                                                                            candidate_Hydrogen_node_anchor_inlined__sub2_35.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub2_35);
                                                                                                                                                                                            candidate_DNT_node_c3.MoveOutHeadAfter(candidate_DNT_edge__edge7);
                                                                                                                                                                                            candidate_DNT_node_c3.MoveOutHeadAfter(candidate_DNT_edge__edge2);
                                                                                                                                                                                            candidate_Methyl_node_anchor_inlined__sub0_33.MoveOutHeadAfter(candidate_Methyl_edge__edge0_inlined__sub0_33);
                                                                                                                                                                                            candidate_Nitro_node_anchor_inlined__sub1_34.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub1_34);
                                                                                                                                                                                            candidate_DNT_node_c2.MoveOutHeadAfter(candidate_DNT_edge__edge1);
                                                                                                                                                                                            candidate_DNT_node_c1.MoveOutHeadAfter(candidate_DNT_edge__edge6);
                                                                                                                                                                                            graph.MoveHeadAfter(candidate_DNT_edge__edge0);
                                                                                                                                                                                            candidate_DNT_edge__edge5.lgspFlags = candidate_DNT_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge5;
                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_36;
                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub4_37;
                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                                                            candidate_DNT_edge__edge8.lgspFlags = candidate_DNT_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge8;
                                                                                                                                                                                            candidate_DNT_edge__edge4.lgspFlags = candidate_DNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge4;
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                                                                                            candidate_DNT_node_c5.lgspFlags = candidate_DNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c5;
                                                                                                                                                                                            candidate_DNT_edge__edge3.lgspFlags = candidate_DNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge3;
                                                                                                                                                                                            candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                                                                                                                            candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_34;
                                                                                                                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                                                                                                                            candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_34;
                                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                                                                                                                                            candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_35;
                                                                                                                                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                                                                                                                                            candidate_DNT_edge__edge7.lgspFlags = candidate_DNT_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge7;
                                                                                                                                                                                            candidate_DNT_node_c4.lgspFlags = candidate_DNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c4;
                                                                                                                                                                                            candidate_DNT_edge__edge2.lgspFlags = candidate_DNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge2;
                                                                                                                                                                                            candidate_Methyl_node_c_inlined__sub0_33.lgspFlags = candidate_Methyl_node_c_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub0_33;
                                                                                                                                                                                            candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_33;
                                                                                                                                                                                            candidate_Nitro_node_n_inlined__sub1_34.lgspFlags = candidate_Nitro_node_n_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_34;
                                                                                                                                                                                            candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_34;
                                                                                                                                                                                            candidate_DNT_node_c3.lgspFlags = candidate_DNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c3;
                                                                                                                                                                                            candidate_DNT_edge__edge1.lgspFlags = candidate_DNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge1;
                                                                                                                                                                                            candidate_DNT_edge__edge6.lgspFlags = candidate_DNT_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge6;
                                                                                                                                                                                            candidate_DNT_node_c2.lgspFlags = candidate_DNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c2;
                                                                                                                                                                                            candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                                                                                                                                                                                            candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
                                                                                                                                                                                            return matches;
                                                                                                                                                                                        }
                                                                                                                                                                                    }
                                                                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub5_38 = candidate_Hydrogen_edge__edge0_inlined__sub5_38.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub5_38 );
                                                                                                                                                                                }
                                                                                                                                                                                candidate_DNT_edge__edge5.lgspFlags = candidate_DNT_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge5;
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_DNT_edge__edge5 = candidate_DNT_edge__edge5.lgspOutNext) != head_candidate_DNT_edge__edge5 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_36;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub3_36 = candidate_Nitro_edge__edge2_inlined__sub3_36.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub3_36 );
                                                                                                                                                                }
                                                                                                                                                                candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_36;
                                                                                                                                                                candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_36;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub3_36 = candidate_Nitro_edge__edge1_inlined__sub3_36.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub3_36 );
                                                                                                                                                        }
                                                                                                                                                        candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub4_37;
                                                                                                                                                        candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_37;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub4_37 = candidate_Hydrogen_edge__edge0_inlined__sub4_37.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub4_37 );
                                                                                                                                                }
                                                                                                                                                candidate_DNT_edge__edge8.lgspFlags = candidate_DNT_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge8;
                                                                                                                                            }
                                                                                                                                            while( (candidate_DNT_edge__edge8 = candidate_DNT_edge__edge8.lgspOutNext) != head_candidate_DNT_edge__edge8 );
                                                                                                                                        }
                                                                                                                                        candidate_DNT_edge__edge4.lgspFlags = candidate_DNT_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge4;
                                                                                                                                    }
                                                                                                                                    while( (candidate_DNT_edge__edge4 = candidate_DNT_edge__edge4.lgspOutNext) != head_candidate_DNT_edge__edge4 );
                                                                                                                                }
                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_36;
                                                                                                                            }
                                                                                                                            while( (candidate_Nitro_edge__edge0_inlined__sub3_36 = candidate_Nitro_edge__edge0_inlined__sub3_36.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub3_36 );
                                                                                                                        }
                                                                                                                        candidate_DNT_node_c5.lgspFlags = candidate_DNT_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c5;
                                                                                                                        candidate_DNT_edge__edge3.lgspFlags = candidate_DNT_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge3;
                                                                                                                    }
                                                                                                                    while( (candidate_DNT_edge__edge3 = candidate_DNT_edge__edge3.lgspOutNext) != head_candidate_DNT_edge__edge3 );
                                                                                                                }
                                                                                                                candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node2_inlined__sub0_33;
                                                                                                                candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge3_inlined__sub0_33;
                                                                                                            }
                                                                                                            while( (candidate_Methyl_edge__edge3_inlined__sub0_33 = candidate_Methyl_edge__edge3_inlined__sub0_33.lgspOutNext) != head_candidate_Methyl_edge__edge3_inlined__sub0_33 );
                                                                                                        }
                                                                                                        candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node1_inlined__sub0_33;
                                                                                                        candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge2_inlined__sub0_33;
                                                                                                    }
                                                                                                    while( (candidate_Methyl_edge__edge2_inlined__sub0_33 = candidate_Methyl_edge__edge2_inlined__sub0_33.lgspOutNext) != head_candidate_Methyl_edge__edge2_inlined__sub0_33 );
                                                                                                }
                                                                                                candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags = candidate_Methyl_node__node0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node__node0_inlined__sub0_33;
                                                                                                candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge1_inlined__sub0_33;
                                                                                            }
                                                                                            while( (candidate_Methyl_edge__edge1_inlined__sub0_33 = candidate_Methyl_edge__edge1_inlined__sub0_33.lgspOutNext) != head_candidate_Methyl_edge__edge1_inlined__sub0_33 );
                                                                                        }
                                                                                        candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_34;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_34;
                                                                                    }
                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub1_34 = candidate_Nitro_edge__edge2_inlined__sub1_34.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub1_34 );
                                                                                }
                                                                                candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_34;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_34;
                                                                            }
                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub1_34 = candidate_Nitro_edge__edge1_inlined__sub1_34.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub1_34 );
                                                                        }
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_35.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_35;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_35;
                                                                    }
                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub2_35 = candidate_Hydrogen_edge__edge0_inlined__sub2_35.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub2_35 );
                                                                }
                                                                candidate_DNT_edge__edge7.lgspFlags = candidate_DNT_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge7;
                                                            }
                                                            while( (candidate_DNT_edge__edge7 = candidate_DNT_edge__edge7.lgspOutNext) != head_candidate_DNT_edge__edge7 );
                                                        }
                                                        candidate_DNT_node_c4.lgspFlags = candidate_DNT_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c4;
                                                        candidate_DNT_edge__edge2.lgspFlags = candidate_DNT_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge2;
                                                    }
                                                    while( (candidate_DNT_edge__edge2 = candidate_DNT_edge__edge2.lgspOutNext) != head_candidate_DNT_edge__edge2 );
                                                }
                                                candidate_Methyl_node_c_inlined__sub0_33.lgspFlags = candidate_Methyl_node_c_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_node_c_inlined__sub0_33;
                                                candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Methyl_edge__edge0_inlined__sub0_33;
                                            }
                                            while( (candidate_Methyl_edge__edge0_inlined__sub0_33 = candidate_Methyl_edge__edge0_inlined__sub0_33.lgspOutNext) != head_candidate_Methyl_edge__edge0_inlined__sub0_33 );
                                        }
                                        candidate_Nitro_node_n_inlined__sub1_34.lgspFlags = candidate_Nitro_node_n_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_34;
                                        candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_34;
                                    }
                                    while( (candidate_Nitro_edge__edge0_inlined__sub1_34 = candidate_Nitro_edge__edge0_inlined__sub1_34.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub1_34 );
                                }
                                candidate_DNT_node_c3.lgspFlags = candidate_DNT_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c3;
                                candidate_DNT_edge__edge1.lgspFlags = candidate_DNT_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge1;
                            }
                            while( (candidate_DNT_edge__edge1 = candidate_DNT_edge__edge1.lgspOutNext) != head_candidate_DNT_edge__edge1 );
                        }
                        candidate_DNT_edge__edge6.lgspFlags = candidate_DNT_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge6;
                    }
                    while( (candidate_DNT_edge__edge6 = candidate_DNT_edge__edge6.lgspOutNext) != head_candidate_DNT_edge__edge6 );
                }
                candidate_DNT_node_c2.lgspFlags = candidate_DNT_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c2;
                candidate_DNT_node_c1.lgspFlags = candidate_DNT_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_node_c1;
                candidate_DNT_edge__edge0.lgspFlags = candidate_DNT_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNT_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_DNT.IMatch_DNT match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches)
        {
            foreach(Rule_DNT.IMatch_DNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_DNT.IMatch_DNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_DNT.IMatch_DNT)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_DNT.IMatch_DNT>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_DNTUnfolded
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_DNTUnfolded.IMatch_DNTUnfolded match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_DNTUnfolded : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_DNTUnfolded
    {
        public Action_DNTUnfolded()
            : base(Rule_DNTUnfolded.Instance.patternGraph)
        {
            _rulePattern = Rule_DNTUnfolded.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_DNTUnfolded _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "DNTUnfolded"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_DNTUnfolded.Match_DNTUnfolded, Rule_DNTUnfolded.IMatch_DNTUnfolded> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_DNTUnfolded Instance { get { return instance; } set { instance = value; } }
        private static Action_DNTUnfolded instance = new Action_DNTUnfolded();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_DNTUnfolded.Match_DNTUnfolded, Rule_DNTUnfolded.IMatch_DNTUnfolded>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            // Lookup DNTUnfolded_edge__edge0 
            int type_id_candidate_DNTUnfolded_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_DNTUnfolded_edge__edge0], candidate_DNTUnfolded_edge__edge0 = head_candidate_DNTUnfolded_edge__edge0.lgspTypeNext; candidate_DNTUnfolded_edge__edge0 != head_candidate_DNTUnfolded_edge__edge0; candidate_DNTUnfolded_edge__edge0 = candidate_DNTUnfolded_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_DNTUnfolded_edge__edge0;
                prev__candidate_DNTUnfolded_edge__edge0 = candidate_DNTUnfolded_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNTUnfolded_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source DNTUnfolded_node_c1 from DNTUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c1 = candidate_DNTUnfolded_edge__edge0.lgspSource;
                if(candidate_DNTUnfolded_node_c1.lgspType.TypeID!=1) {
                    candidate_DNTUnfolded_edge__edge0.lgspFlags = candidate_DNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_DNTUnfolded_node_c1;
                prev__candidate_DNTUnfolded_node_c1 = candidate_DNTUnfolded_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNTUnfolded_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target DNTUnfolded_node_c2 from DNTUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c2 = candidate_DNTUnfolded_edge__edge0.lgspTarget;
                if(candidate_DNTUnfolded_node_c2.lgspType.TypeID!=1) {
                    candidate_DNTUnfolded_node_c1.lgspFlags = candidate_DNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c1;
                    candidate_DNTUnfolded_edge__edge0.lgspFlags = candidate_DNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge0;
                    continue;
                }
                if((candidate_DNTUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_DNTUnfolded_node_c1.lgspFlags = candidate_DNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c1;
                    candidate_DNTUnfolded_edge__edge0.lgspFlags = candidate_DNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_DNTUnfolded_node_c2;
                prev__candidate_DNTUnfolded_node_c2 = candidate_DNTUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_DNTUnfolded_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Extend Outgoing DNTUnfolded_edge__edge6 from DNTUnfolded_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge6 = candidate_DNTUnfolded_node_c1.lgspOuthead;
                if(head_candidate_DNTUnfolded_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge6 = head_candidate_DNTUnfolded_edge__edge6;
                    do
                    {
                        if(candidate_DNTUnfolded_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_DNTUnfolded_edge__edge6.lgspTarget != candidate_DNTUnfolded_node_c2) {
                            continue;
                        }
                        if((candidate_DNTUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_DNTUnfolded_edge__edge6;
                        prev__candidate_DNTUnfolded_edge__edge6 = candidate_DNTUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_DNTUnfolded_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing DNTUnfolded_edge__edge9 from DNTUnfolded_node_c1 
                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge9 = candidate_DNTUnfolded_node_c1.lgspOuthead;
                        if(head_candidate_DNTUnfolded_edge__edge9 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge9 = head_candidate_DNTUnfolded_edge__edge9;
                            do
                            {
                                if(candidate_DNTUnfolded_edge__edge9.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_DNTUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_DNTUnfolded_edge__edge9;
                                prev__candidate_DNTUnfolded_edge__edge9 = candidate_DNTUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_DNTUnfolded_edge__edge9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target DNTUnfolded_node_c from DNTUnfolded_edge__edge9 
                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c = candidate_DNTUnfolded_edge__edge9.lgspTarget;
                                if(candidate_DNTUnfolded_node_c.lgspType.TypeID!=1) {
                                    candidate_DNTUnfolded_edge__edge9.lgspFlags = candidate_DNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge9;
                                    continue;
                                }
                                if((candidate_DNTUnfolded_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_DNTUnfolded_edge__edge9.lgspFlags = candidate_DNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge9;
                                    continue;
                                }
                                uint prev__candidate_DNTUnfolded_node_c;
                                prev__candidate_DNTUnfolded_node_c = candidate_DNTUnfolded_node_c.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_DNTUnfolded_node_c.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing DNTUnfolded_edge__edge1 from DNTUnfolded_node_c2 
                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge1 = candidate_DNTUnfolded_node_c2.lgspOuthead;
                                if(head_candidate_DNTUnfolded_edge__edge1 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge1 = head_candidate_DNTUnfolded_edge__edge1;
                                    do
                                    {
                                        if(candidate_DNTUnfolded_edge__edge1.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_DNTUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_DNTUnfolded_edge__edge1;
                                        prev__candidate_DNTUnfolded_edge__edge1 = candidate_DNTUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_DNTUnfolded_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target DNTUnfolded_node_c3 from DNTUnfolded_edge__edge1 
                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c3 = candidate_DNTUnfolded_edge__edge1.lgspTarget;
                                        if(candidate_DNTUnfolded_node_c3.lgspType.TypeID!=1) {
                                            candidate_DNTUnfolded_edge__edge1.lgspFlags = candidate_DNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge1;
                                            continue;
                                        }
                                        if((candidate_DNTUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_DNTUnfolded_edge__edge1.lgspFlags = candidate_DNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge1;
                                            continue;
                                        }
                                        uint prev__candidate_DNTUnfolded_node_c3;
                                        prev__candidate_DNTUnfolded_node_c3 = candidate_DNTUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_DNTUnfolded_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing DNTUnfolded_edge__edge13 from DNTUnfolded_node_c2 
                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge13 = candidate_DNTUnfolded_node_c2.lgspOuthead;
                                        if(head_candidate_DNTUnfolded_edge__edge13 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge13 = head_candidate_DNTUnfolded_edge__edge13;
                                            do
                                            {
                                                if(candidate_DNTUnfolded_edge__edge13.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_DNTUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_DNTUnfolded_edge__edge13;
                                                prev__candidate_DNTUnfolded_edge__edge13 = candidate_DNTUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_DNTUnfolded_edge__edge13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target DNTUnfolded_node_n2 from DNTUnfolded_edge__edge13 
                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_n2 = candidate_DNTUnfolded_edge__edge13.lgspTarget;
                                                if(candidate_DNTUnfolded_node_n2.lgspType.TypeID!=4) {
                                                    candidate_DNTUnfolded_edge__edge13.lgspFlags = candidate_DNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge13;
                                                    continue;
                                                }
                                                uint prev__candidate_DNTUnfolded_node_n2;
                                                prev__candidate_DNTUnfolded_node_n2 = candidate_DNTUnfolded_node_n2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_DNTUnfolded_node_n2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing DNTUnfolded_edge__edge10 from DNTUnfolded_node_c 
                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge10 = candidate_DNTUnfolded_node_c.lgspOuthead;
                                                if(head_candidate_DNTUnfolded_edge__edge10 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge10 = head_candidate_DNTUnfolded_edge__edge10;
                                                    do
                                                    {
                                                        if(candidate_DNTUnfolded_edge__edge10.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_DNTUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_DNTUnfolded_edge__edge10;
                                                        prev__candidate_DNTUnfolded_edge__edge10 = candidate_DNTUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_DNTUnfolded_edge__edge10.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target DNTUnfolded_node__node0 from DNTUnfolded_edge__edge10 
                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node0 = candidate_DNTUnfolded_edge__edge10.lgspTarget;
                                                        if(candidate_DNTUnfolded_node__node0.lgspType.TypeID!=2) {
                                                            candidate_DNTUnfolded_edge__edge10.lgspFlags = candidate_DNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge10;
                                                            continue;
                                                        }
                                                        uint prev__candidate_DNTUnfolded_node__node0;
                                                        prev__candidate_DNTUnfolded_node__node0 = candidate_DNTUnfolded_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_DNTUnfolded_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing DNTUnfolded_edge__edge11 from DNTUnfolded_node_c 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge11 = candidate_DNTUnfolded_node_c.lgspOuthead;
                                                        if(head_candidate_DNTUnfolded_edge__edge11 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge11 = head_candidate_DNTUnfolded_edge__edge11;
                                                            do
                                                            {
                                                                if(candidate_DNTUnfolded_edge__edge11.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if((candidate_DNTUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_DNTUnfolded_edge__edge11;
                                                                prev__candidate_DNTUnfolded_edge__edge11 = candidate_DNTUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_DNTUnfolded_edge__edge11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Implicit Target DNTUnfolded_node__node1 from DNTUnfolded_edge__edge11 
                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node1 = candidate_DNTUnfolded_edge__edge11.lgspTarget;
                                                                if(candidate_DNTUnfolded_node__node1.lgspType.TypeID!=2) {
                                                                    candidate_DNTUnfolded_edge__edge11.lgspFlags = candidate_DNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge11;
                                                                    continue;
                                                                }
                                                                if((candidate_DNTUnfolded_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    candidate_DNTUnfolded_edge__edge11.lgspFlags = candidate_DNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge11;
                                                                    continue;
                                                                }
                                                                uint prev__candidate_DNTUnfolded_node__node1;
                                                                prev__candidate_DNTUnfolded_node__node1 = candidate_DNTUnfolded_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_DNTUnfolded_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing DNTUnfolded_edge__edge12 from DNTUnfolded_node_c 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge12 = candidate_DNTUnfolded_node_c.lgspOuthead;
                                                                if(head_candidate_DNTUnfolded_edge__edge12 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge12 = head_candidate_DNTUnfolded_edge__edge12;
                                                                    do
                                                                    {
                                                                        if(candidate_DNTUnfolded_edge__edge12.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_DNTUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_DNTUnfolded_edge__edge12;
                                                                        prev__candidate_DNTUnfolded_edge__edge12 = candidate_DNTUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_DNTUnfolded_edge__edge12.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target DNTUnfolded_node__node2 from DNTUnfolded_edge__edge12 
                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node2 = candidate_DNTUnfolded_edge__edge12.lgspTarget;
                                                                        if(candidate_DNTUnfolded_node__node2.lgspType.TypeID!=2) {
                                                                            candidate_DNTUnfolded_edge__edge12.lgspFlags = candidate_DNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge12;
                                                                            continue;
                                                                        }
                                                                        if((candidate_DNTUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_DNTUnfolded_edge__edge12.lgspFlags = candidate_DNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge12;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_DNTUnfolded_node__node2;
                                                                        prev__candidate_DNTUnfolded_node__node2 = candidate_DNTUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_DNTUnfolded_node__node2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing DNTUnfolded_edge__edge2 from DNTUnfolded_node_c3 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge2 = candidate_DNTUnfolded_node_c3.lgspOuthead;
                                                                        if(head_candidate_DNTUnfolded_edge__edge2 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge2 = head_candidate_DNTUnfolded_edge__edge2;
                                                                            do
                                                                            {
                                                                                if(candidate_DNTUnfolded_edge__edge2.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_DNTUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_DNTUnfolded_edge__edge2;
                                                                                prev__candidate_DNTUnfolded_edge__edge2 = candidate_DNTUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_DNTUnfolded_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target DNTUnfolded_node_c4 from DNTUnfolded_edge__edge2 
                                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c4 = candidate_DNTUnfolded_edge__edge2.lgspTarget;
                                                                                if(candidate_DNTUnfolded_node_c4.lgspType.TypeID!=1) {
                                                                                    candidate_DNTUnfolded_edge__edge2.lgspFlags = candidate_DNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge2;
                                                                                    continue;
                                                                                }
                                                                                if((candidate_DNTUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    candidate_DNTUnfolded_edge__edge2.lgspFlags = candidate_DNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge2;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_DNTUnfolded_node_c4;
                                                                                prev__candidate_DNTUnfolded_node_c4 = candidate_DNTUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_DNTUnfolded_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing DNTUnfolded_edge__edge7 from DNTUnfolded_node_c3 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge7 = candidate_DNTUnfolded_node_c3.lgspOuthead;
                                                                                if(head_candidate_DNTUnfolded_edge__edge7 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge7 = head_candidate_DNTUnfolded_edge__edge7;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_DNTUnfolded_edge__edge7.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if(candidate_DNTUnfolded_edge__edge7.lgspTarget != candidate_DNTUnfolded_node_c4) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_DNTUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_DNTUnfolded_edge__edge7;
                                                                                        prev__candidate_DNTUnfolded_edge__edge7 = candidate_DNTUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_DNTUnfolded_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing DNTUnfolded_edge__edge16 from DNTUnfolded_node_c3 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge16 = candidate_DNTUnfolded_node_c3.lgspOuthead;
                                                                                        if(head_candidate_DNTUnfolded_edge__edge16 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge16 = head_candidate_DNTUnfolded_edge__edge16;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_DNTUnfolded_edge__edge16.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_DNTUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_DNTUnfolded_edge__edge16;
                                                                                                prev__candidate_DNTUnfolded_edge__edge16 = candidate_DNTUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_DNTUnfolded_edge__edge16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target DNTUnfolded_node__node5 from DNTUnfolded_edge__edge16 
                                                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node5 = candidate_DNTUnfolded_edge__edge16.lgspTarget;
                                                                                                if(candidate_DNTUnfolded_node__node5.lgspType.TypeID!=2) {
                                                                                                    candidate_DNTUnfolded_edge__edge16.lgspFlags = candidate_DNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge16;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_DNTUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_DNTUnfolded_edge__edge16.lgspFlags = candidate_DNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge16;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_DNTUnfolded_node__node5;
                                                                                                prev__candidate_DNTUnfolded_node__node5 = candidate_DNTUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_DNTUnfolded_node__node5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing DNTUnfolded_edge__edge14 from DNTUnfolded_node_n2 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge14 = candidate_DNTUnfolded_node_n2.lgspOuthead;
                                                                                                if(head_candidate_DNTUnfolded_edge__edge14 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge14 = head_candidate_DNTUnfolded_edge__edge14;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_DNTUnfolded_edge__edge14.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_DNTUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_DNTUnfolded_edge__edge14;
                                                                                                        prev__candidate_DNTUnfolded_edge__edge14 = candidate_DNTUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_DNTUnfolded_edge__edge14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target DNTUnfolded_node__node3 from DNTUnfolded_edge__edge14 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node3 = candidate_DNTUnfolded_edge__edge14.lgspTarget;
                                                                                                        if(candidate_DNTUnfolded_node__node3.lgspType.TypeID!=3) {
                                                                                                            candidate_DNTUnfolded_edge__edge14.lgspFlags = candidate_DNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge14;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_DNTUnfolded_node__node3;
                                                                                                        prev__candidate_DNTUnfolded_node__node3 = candidate_DNTUnfolded_node__node3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_DNTUnfolded_node__node3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing DNTUnfolded_edge__edge15 from DNTUnfolded_node_n2 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge15 = candidate_DNTUnfolded_node_n2.lgspOuthead;
                                                                                                        if(head_candidate_DNTUnfolded_edge__edge15 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge15 = head_candidate_DNTUnfolded_edge__edge15;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_DNTUnfolded_edge__edge15.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_DNTUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_DNTUnfolded_edge__edge15;
                                                                                                                prev__candidate_DNTUnfolded_edge__edge15 = candidate_DNTUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_DNTUnfolded_edge__edge15.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target DNTUnfolded_node__node4 from DNTUnfolded_edge__edge15 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node4 = candidate_DNTUnfolded_edge__edge15.lgspTarget;
                                                                                                                if(candidate_DNTUnfolded_node__node4.lgspType.TypeID!=3) {
                                                                                                                    candidate_DNTUnfolded_edge__edge15.lgspFlags = candidate_DNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge15;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_DNTUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_DNTUnfolded_edge__edge15.lgspFlags = candidate_DNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge15;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_DNTUnfolded_node__node4;
                                                                                                                prev__candidate_DNTUnfolded_node__node4 = candidate_DNTUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_DNTUnfolded_node__node4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Extend Outgoing DNTUnfolded_edge__edge3 from DNTUnfolded_node_c4 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge3 = candidate_DNTUnfolded_node_c4.lgspOuthead;
                                                                                                                if(head_candidate_DNTUnfolded_edge__edge3 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge3 = head_candidate_DNTUnfolded_edge__edge3;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_DNTUnfolded_edge__edge3.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_DNTUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_DNTUnfolded_edge__edge3;
                                                                                                                        prev__candidate_DNTUnfolded_edge__edge3 = candidate_DNTUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_DNTUnfolded_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Implicit Target DNTUnfolded_node_c5 from DNTUnfolded_edge__edge3 
                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c5 = candidate_DNTUnfolded_edge__edge3.lgspTarget;
                                                                                                                        if(candidate_DNTUnfolded_node_c5.lgspType.TypeID!=1) {
                                                                                                                            candidate_DNTUnfolded_edge__edge3.lgspFlags = candidate_DNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_DNTUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            candidate_DNTUnfolded_edge__edge3.lgspFlags = candidate_DNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge3;
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_DNTUnfolded_node_c5;
                                                                                                                        prev__candidate_DNTUnfolded_node_c5 = candidate_DNTUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_DNTUnfolded_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Extend Outgoing DNTUnfolded_edge__edge17 from DNTUnfolded_node_c4 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge17 = candidate_DNTUnfolded_node_c4.lgspOuthead;
                                                                                                                        if(head_candidate_DNTUnfolded_edge__edge17 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge17 = head_candidate_DNTUnfolded_edge__edge17;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_DNTUnfolded_edge__edge17.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_DNTUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_DNTUnfolded_edge__edge17;
                                                                                                                                prev__candidate_DNTUnfolded_edge__edge17 = candidate_DNTUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_DNTUnfolded_edge__edge17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target DNTUnfolded_node_n4 from DNTUnfolded_edge__edge17 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_n4 = candidate_DNTUnfolded_edge__edge17.lgspTarget;
                                                                                                                                if(candidate_DNTUnfolded_node_n4.lgspType.TypeID!=4) {
                                                                                                                                    candidate_DNTUnfolded_edge__edge17.lgspFlags = candidate_DNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_DNTUnfolded_node_n4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_DNTUnfolded_edge__edge17.lgspFlags = candidate_DNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                // Extend Outgoing DNTUnfolded_edge__edge4 from DNTUnfolded_node_c5 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge4 = candidate_DNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                if(head_candidate_DNTUnfolded_edge__edge4 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge4 = head_candidate_DNTUnfolded_edge__edge4;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_DNTUnfolded_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_DNTUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_DNTUnfolded_edge__edge4;
                                                                                                                                        prev__candidate_DNTUnfolded_edge__edge4 = candidate_DNTUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_DNTUnfolded_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target DNTUnfolded_node_c6 from DNTUnfolded_edge__edge4 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node_c6 = candidate_DNTUnfolded_edge__edge4.lgspTarget;
                                                                                                                                        if(candidate_DNTUnfolded_node_c6.lgspType.TypeID!=1) {
                                                                                                                                            candidate_DNTUnfolded_edge__edge4.lgspFlags = candidate_DNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_DNTUnfolded_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_DNTUnfolded_edge__edge4.lgspFlags = candidate_DNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge4;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        // Extend Outgoing DNTUnfolded_edge__edge8 from DNTUnfolded_node_c5 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge8 = candidate_DNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                        if(head_candidate_DNTUnfolded_edge__edge8 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge8 = head_candidate_DNTUnfolded_edge__edge8;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_DNTUnfolded_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if(candidate_DNTUnfolded_edge__edge8.lgspTarget != candidate_DNTUnfolded_node_c6) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_DNTUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_DNTUnfolded_edge__edge8;
                                                                                                                                                prev__candidate_DNTUnfolded_edge__edge8 = candidate_DNTUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_DNTUnfolded_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing DNTUnfolded_edge__edge20 from DNTUnfolded_node_c5 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge20 = candidate_DNTUnfolded_node_c5.lgspOuthead;
                                                                                                                                                if(head_candidate_DNTUnfolded_edge__edge20 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge20 = head_candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_DNTUnfolded_edge__edge20.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_DNTUnfolded_edge__edge20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                        prev__candidate_DNTUnfolded_edge__edge20 = candidate_DNTUnfolded_edge__edge20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_DNTUnfolded_edge__edge20.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Implicit Target DNTUnfolded_node__node8 from DNTUnfolded_edge__edge20 
                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node8 = candidate_DNTUnfolded_edge__edge20.lgspTarget;
                                                                                                                                                        if(candidate_DNTUnfolded_node__node8.lgspType.TypeID!=2) {
                                                                                                                                                            candidate_DNTUnfolded_edge__edge20.lgspFlags = candidate_DNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_DNTUnfolded_node__node8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            candidate_DNTUnfolded_edge__edge20.lgspFlags = candidate_DNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_DNTUnfolded_node__node8;
                                                                                                                                                        prev__candidate_DNTUnfolded_node__node8 = candidate_DNTUnfolded_node__node8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_DNTUnfolded_node__node8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Extend Outgoing DNTUnfolded_edge__edge18 from DNTUnfolded_node_n4 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge18 = candidate_DNTUnfolded_node_n4.lgspOuthead;
                                                                                                                                                        if(head_candidate_DNTUnfolded_edge__edge18 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge18 = head_candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_DNTUnfolded_edge__edge18.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_DNTUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                                prev__candidate_DNTUnfolded_edge__edge18 = candidate_DNTUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_DNTUnfolded_edge__edge18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target DNTUnfolded_node__node6 from DNTUnfolded_edge__edge18 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node6 = candidate_DNTUnfolded_edge__edge18.lgspTarget;
                                                                                                                                                                if(candidate_DNTUnfolded_node__node6.lgspType.TypeID!=3) {
                                                                                                                                                                    candidate_DNTUnfolded_edge__edge18.lgspFlags = candidate_DNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_DNTUnfolded_node__node6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_DNTUnfolded_edge__edge18.lgspFlags = candidate_DNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_DNTUnfolded_node__node6;
                                                                                                                                                                prev__candidate_DNTUnfolded_node__node6 = candidate_DNTUnfolded_node__node6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_DNTUnfolded_node__node6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Extend Outgoing DNTUnfolded_edge__edge19 from DNTUnfolded_node_n4 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge19 = candidate_DNTUnfolded_node_n4.lgspOuthead;
                                                                                                                                                                if(head_candidate_DNTUnfolded_edge__edge19 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge19 = head_candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_DNTUnfolded_edge__edge19.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_DNTUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                        prev__candidate_DNTUnfolded_edge__edge19 = candidate_DNTUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_DNTUnfolded_edge__edge19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target DNTUnfolded_node__node7 from DNTUnfolded_edge__edge19 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node7 = candidate_DNTUnfolded_edge__edge19.lgspTarget;
                                                                                                                                                                        if(candidate_DNTUnfolded_node__node7.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_DNTUnfolded_edge__edge19.lgspFlags = candidate_DNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_DNTUnfolded_node__node7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_DNTUnfolded_edge__edge19.lgspFlags = candidate_DNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        // Extend Outgoing DNTUnfolded_edge__edge5 from DNTUnfolded_node_c6 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge5 = candidate_DNTUnfolded_node_c6.lgspOuthead;
                                                                                                                                                                        if(head_candidate_DNTUnfolded_edge__edge5 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge5 = head_candidate_DNTUnfolded_edge__edge5;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_DNTUnfolded_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if(candidate_DNTUnfolded_edge__edge5.lgspTarget != candidate_DNTUnfolded_node_c1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_DNTUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                uint prev__candidate_DNTUnfolded_edge__edge5;
                                                                                                                                                                                prev__candidate_DNTUnfolded_edge__edge5 = candidate_DNTUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                candidate_DNTUnfolded_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                                // Extend Outgoing DNTUnfolded_edge__edge21 from DNTUnfolded_node_c6 
                                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_DNTUnfolded_edge__edge21 = candidate_DNTUnfolded_node_c6.lgspOuthead;
                                                                                                                                                                                if(head_candidate_DNTUnfolded_edge__edge21 != null)
                                                                                                                                                                                {
                                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_DNTUnfolded_edge__edge21 = head_candidate_DNTUnfolded_edge__edge21;
                                                                                                                                                                                    do
                                                                                                                                                                                    {
                                                                                                                                                                                        if(candidate_DNTUnfolded_edge__edge21.lgspType.TypeID!=1) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_DNTUnfolded_edge__edge21.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        // Implicit Target DNTUnfolded_node__node9 from DNTUnfolded_edge__edge21 
                                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_DNTUnfolded_node__node9 = candidate_DNTUnfolded_edge__edge21.lgspTarget;
                                                                                                                                                                                        if(candidate_DNTUnfolded_node__node9.lgspType.TypeID!=2) {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        if((candidate_DNTUnfolded_node__node9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                        {
                                                                                                                                                                                            continue;
                                                                                                                                                                                        }
                                                                                                                                                                                        Rule_DNTUnfolded.Match_DNTUnfolded match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                        match._node_c1 = candidate_DNTUnfolded_node_c1;
                                                                                                                                                                                        match._node_c2 = candidate_DNTUnfolded_node_c2;
                                                                                                                                                                                        match._node_c3 = candidate_DNTUnfolded_node_c3;
                                                                                                                                                                                        match._node_c4 = candidate_DNTUnfolded_node_c4;
                                                                                                                                                                                        match._node_c5 = candidate_DNTUnfolded_node_c5;
                                                                                                                                                                                        match._node_c6 = candidate_DNTUnfolded_node_c6;
                                                                                                                                                                                        match._node_c = candidate_DNTUnfolded_node_c;
                                                                                                                                                                                        match._node__node0 = candidate_DNTUnfolded_node__node0;
                                                                                                                                                                                        match._node__node1 = candidate_DNTUnfolded_node__node1;
                                                                                                                                                                                        match._node__node2 = candidate_DNTUnfolded_node__node2;
                                                                                                                                                                                        match._node_n2 = candidate_DNTUnfolded_node_n2;
                                                                                                                                                                                        match._node__node3 = candidate_DNTUnfolded_node__node3;
                                                                                                                                                                                        match._node__node4 = candidate_DNTUnfolded_node__node4;
                                                                                                                                                                                        match._node__node5 = candidate_DNTUnfolded_node__node5;
                                                                                                                                                                                        match._node_n4 = candidate_DNTUnfolded_node_n4;
                                                                                                                                                                                        match._node__node6 = candidate_DNTUnfolded_node__node6;
                                                                                                                                                                                        match._node__node7 = candidate_DNTUnfolded_node__node7;
                                                                                                                                                                                        match._node__node8 = candidate_DNTUnfolded_node__node8;
                                                                                                                                                                                        match._node__node9 = candidate_DNTUnfolded_node__node9;
                                                                                                                                                                                        match._edge__edge0 = candidate_DNTUnfolded_edge__edge0;
                                                                                                                                                                                        match._edge__edge1 = candidate_DNTUnfolded_edge__edge1;
                                                                                                                                                                                        match._edge__edge2 = candidate_DNTUnfolded_edge__edge2;
                                                                                                                                                                                        match._edge__edge3 = candidate_DNTUnfolded_edge__edge3;
                                                                                                                                                                                        match._edge__edge4 = candidate_DNTUnfolded_edge__edge4;
                                                                                                                                                                                        match._edge__edge5 = candidate_DNTUnfolded_edge__edge5;
                                                                                                                                                                                        match._edge__edge6 = candidate_DNTUnfolded_edge__edge6;
                                                                                                                                                                                        match._edge__edge7 = candidate_DNTUnfolded_edge__edge7;
                                                                                                                                                                                        match._edge__edge8 = candidate_DNTUnfolded_edge__edge8;
                                                                                                                                                                                        match._edge__edge9 = candidate_DNTUnfolded_edge__edge9;
                                                                                                                                                                                        match._edge__edge10 = candidate_DNTUnfolded_edge__edge10;
                                                                                                                                                                                        match._edge__edge11 = candidate_DNTUnfolded_edge__edge11;
                                                                                                                                                                                        match._edge__edge12 = candidate_DNTUnfolded_edge__edge12;
                                                                                                                                                                                        match._edge__edge13 = candidate_DNTUnfolded_edge__edge13;
                                                                                                                                                                                        match._edge__edge14 = candidate_DNTUnfolded_edge__edge14;
                                                                                                                                                                                        match._edge__edge15 = candidate_DNTUnfolded_edge__edge15;
                                                                                                                                                                                        match._edge__edge16 = candidate_DNTUnfolded_edge__edge16;
                                                                                                                                                                                        match._edge__edge17 = candidate_DNTUnfolded_edge__edge17;
                                                                                                                                                                                        match._edge__edge18 = candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                                                        match._edge__edge19 = candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                                        match._edge__edge20 = candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                                                        match._edge__edge21 = candidate_DNTUnfolded_edge__edge21;
                                                                                                                                                                                        matches.PositionWasFilledFixIt();
                                                                                                                                                                                        // if enough matches were found, we leave
                                                                                                                                                                                        if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                        {
                                                                                                                                                                                            candidate_DNTUnfolded_node_c6.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge21);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c6.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge5);
                                                                                                                                                                                            candidate_DNTUnfolded_node_n4.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge19);
                                                                                                                                                                                            candidate_DNTUnfolded_node_n4.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge18);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c5.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge20);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c5.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge8);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c5.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge4);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c4.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge17);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c4.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge3);
                                                                                                                                                                                            candidate_DNTUnfolded_node_n2.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge15);
                                                                                                                                                                                            candidate_DNTUnfolded_node_n2.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge14);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c3.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge16);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c3.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge7);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c3.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge2);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge12);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge11);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge10);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c2.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge13);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c2.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge1);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c1.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge9);
                                                                                                                                                                                            candidate_DNTUnfolded_node_c1.MoveOutHeadAfter(candidate_DNTUnfolded_edge__edge6);
                                                                                                                                                                                            graph.MoveHeadAfter(candidate_DNTUnfolded_edge__edge0);
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge5.lgspFlags = candidate_DNTUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge5;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge19.lgspFlags = candidate_DNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node6.lgspFlags = candidate_DNTUnfolded_node__node6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node6;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge18.lgspFlags = candidate_DNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node8.lgspFlags = candidate_DNTUnfolded_node__node8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node8;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge20.lgspFlags = candidate_DNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge8.lgspFlags = candidate_DNTUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge8;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge4.lgspFlags = candidate_DNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge4;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge17.lgspFlags = candidate_DNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge17;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c5.lgspFlags = candidate_DNTUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c5;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge3.lgspFlags = candidate_DNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge3;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node4.lgspFlags = candidate_DNTUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node4;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge15.lgspFlags = candidate_DNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge15;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node3.lgspFlags = candidate_DNTUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node3;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge14.lgspFlags = candidate_DNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge14;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node5.lgspFlags = candidate_DNTUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node5;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge16.lgspFlags = candidate_DNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge16;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge7.lgspFlags = candidate_DNTUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge7;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c4.lgspFlags = candidate_DNTUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c4;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge2.lgspFlags = candidate_DNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge2;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node2.lgspFlags = candidate_DNTUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node2;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge12.lgspFlags = candidate_DNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge12;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node1.lgspFlags = candidate_DNTUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node1;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge11.lgspFlags = candidate_DNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge11;
                                                                                                                                                                                            candidate_DNTUnfolded_node__node0.lgspFlags = candidate_DNTUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node0;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge10.lgspFlags = candidate_DNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge10;
                                                                                                                                                                                            candidate_DNTUnfolded_node_n2.lgspFlags = candidate_DNTUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_n2;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge13.lgspFlags = candidate_DNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge13;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c3.lgspFlags = candidate_DNTUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c3;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge1.lgspFlags = candidate_DNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge1;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c.lgspFlags = candidate_DNTUnfolded_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge9.lgspFlags = candidate_DNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge9;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge6.lgspFlags = candidate_DNTUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge6;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c2.lgspFlags = candidate_DNTUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c2;
                                                                                                                                                                                            candidate_DNTUnfolded_node_c1.lgspFlags = candidate_DNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c1;
                                                                                                                                                                                            candidate_DNTUnfolded_edge__edge0.lgspFlags = candidate_DNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge0;
                                                                                                                                                                                            return matches;
                                                                                                                                                                                        }
                                                                                                                                                                                    }
                                                                                                                                                                                    while( (candidate_DNTUnfolded_edge__edge21 = candidate_DNTUnfolded_edge__edge21.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge21 );
                                                                                                                                                                                }
                                                                                                                                                                                candidate_DNTUnfolded_edge__edge5.lgspFlags = candidate_DNTUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge5;
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_DNTUnfolded_edge__edge5 = candidate_DNTUnfolded_edge__edge5.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge5 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_DNTUnfolded_edge__edge19.lgspFlags = candidate_DNTUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge19;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_DNTUnfolded_edge__edge19 = candidate_DNTUnfolded_edge__edge19.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge19 );
                                                                                                                                                                }
                                                                                                                                                                candidate_DNTUnfolded_node__node6.lgspFlags = candidate_DNTUnfolded_node__node6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node6;
                                                                                                                                                                candidate_DNTUnfolded_edge__edge18.lgspFlags = candidate_DNTUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge18;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_DNTUnfolded_edge__edge18 = candidate_DNTUnfolded_edge__edge18.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge18 );
                                                                                                                                                        }
                                                                                                                                                        candidate_DNTUnfolded_node__node8.lgspFlags = candidate_DNTUnfolded_node__node8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node8;
                                                                                                                                                        candidate_DNTUnfolded_edge__edge20.lgspFlags = candidate_DNTUnfolded_edge__edge20.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge20;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_DNTUnfolded_edge__edge20 = candidate_DNTUnfolded_edge__edge20.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge20 );
                                                                                                                                                }
                                                                                                                                                candidate_DNTUnfolded_edge__edge8.lgspFlags = candidate_DNTUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge8;
                                                                                                                                            }
                                                                                                                                            while( (candidate_DNTUnfolded_edge__edge8 = candidate_DNTUnfolded_edge__edge8.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge8 );
                                                                                                                                        }
                                                                                                                                        candidate_DNTUnfolded_edge__edge4.lgspFlags = candidate_DNTUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge4;
                                                                                                                                    }
                                                                                                                                    while( (candidate_DNTUnfolded_edge__edge4 = candidate_DNTUnfolded_edge__edge4.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge4 );
                                                                                                                                }
                                                                                                                                candidate_DNTUnfolded_edge__edge17.lgspFlags = candidate_DNTUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge17;
                                                                                                                            }
                                                                                                                            while( (candidate_DNTUnfolded_edge__edge17 = candidate_DNTUnfolded_edge__edge17.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge17 );
                                                                                                                        }
                                                                                                                        candidate_DNTUnfolded_node_c5.lgspFlags = candidate_DNTUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c5;
                                                                                                                        candidate_DNTUnfolded_edge__edge3.lgspFlags = candidate_DNTUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge3;
                                                                                                                    }
                                                                                                                    while( (candidate_DNTUnfolded_edge__edge3 = candidate_DNTUnfolded_edge__edge3.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge3 );
                                                                                                                }
                                                                                                                candidate_DNTUnfolded_node__node4.lgspFlags = candidate_DNTUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node4;
                                                                                                                candidate_DNTUnfolded_edge__edge15.lgspFlags = candidate_DNTUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge15;
                                                                                                            }
                                                                                                            while( (candidate_DNTUnfolded_edge__edge15 = candidate_DNTUnfolded_edge__edge15.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge15 );
                                                                                                        }
                                                                                                        candidate_DNTUnfolded_node__node3.lgspFlags = candidate_DNTUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node3;
                                                                                                        candidate_DNTUnfolded_edge__edge14.lgspFlags = candidate_DNTUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge14;
                                                                                                    }
                                                                                                    while( (candidate_DNTUnfolded_edge__edge14 = candidate_DNTUnfolded_edge__edge14.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge14 );
                                                                                                }
                                                                                                candidate_DNTUnfolded_node__node5.lgspFlags = candidate_DNTUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node5;
                                                                                                candidate_DNTUnfolded_edge__edge16.lgspFlags = candidate_DNTUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge16;
                                                                                            }
                                                                                            while( (candidate_DNTUnfolded_edge__edge16 = candidate_DNTUnfolded_edge__edge16.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge16 );
                                                                                        }
                                                                                        candidate_DNTUnfolded_edge__edge7.lgspFlags = candidate_DNTUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge7;
                                                                                    }
                                                                                    while( (candidate_DNTUnfolded_edge__edge7 = candidate_DNTUnfolded_edge__edge7.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge7 );
                                                                                }
                                                                                candidate_DNTUnfolded_node_c4.lgspFlags = candidate_DNTUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c4;
                                                                                candidate_DNTUnfolded_edge__edge2.lgspFlags = candidate_DNTUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge2;
                                                                            }
                                                                            while( (candidate_DNTUnfolded_edge__edge2 = candidate_DNTUnfolded_edge__edge2.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge2 );
                                                                        }
                                                                        candidate_DNTUnfolded_node__node2.lgspFlags = candidate_DNTUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node2;
                                                                        candidate_DNTUnfolded_edge__edge12.lgspFlags = candidate_DNTUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge12;
                                                                    }
                                                                    while( (candidate_DNTUnfolded_edge__edge12 = candidate_DNTUnfolded_edge__edge12.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge12 );
                                                                }
                                                                candidate_DNTUnfolded_node__node1.lgspFlags = candidate_DNTUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node1;
                                                                candidate_DNTUnfolded_edge__edge11.lgspFlags = candidate_DNTUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge11;
                                                            }
                                                            while( (candidate_DNTUnfolded_edge__edge11 = candidate_DNTUnfolded_edge__edge11.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge11 );
                                                        }
                                                        candidate_DNTUnfolded_node__node0.lgspFlags = candidate_DNTUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node__node0;
                                                        candidate_DNTUnfolded_edge__edge10.lgspFlags = candidate_DNTUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge10;
                                                    }
                                                    while( (candidate_DNTUnfolded_edge__edge10 = candidate_DNTUnfolded_edge__edge10.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge10 );
                                                }
                                                candidate_DNTUnfolded_node_n2.lgspFlags = candidate_DNTUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_n2;
                                                candidate_DNTUnfolded_edge__edge13.lgspFlags = candidate_DNTUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge13;
                                            }
                                            while( (candidate_DNTUnfolded_edge__edge13 = candidate_DNTUnfolded_edge__edge13.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge13 );
                                        }
                                        candidate_DNTUnfolded_node_c3.lgspFlags = candidate_DNTUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c3;
                                        candidate_DNTUnfolded_edge__edge1.lgspFlags = candidate_DNTUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge1;
                                    }
                                    while( (candidate_DNTUnfolded_edge__edge1 = candidate_DNTUnfolded_edge__edge1.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge1 );
                                }
                                candidate_DNTUnfolded_node_c.lgspFlags = candidate_DNTUnfolded_node_c.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c;
                                candidate_DNTUnfolded_edge__edge9.lgspFlags = candidate_DNTUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge9;
                            }
                            while( (candidate_DNTUnfolded_edge__edge9 = candidate_DNTUnfolded_edge__edge9.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge9 );
                        }
                        candidate_DNTUnfolded_edge__edge6.lgspFlags = candidate_DNTUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge6;
                    }
                    while( (candidate_DNTUnfolded_edge__edge6 = candidate_DNTUnfolded_edge__edge6.lgspOutNext) != head_candidate_DNTUnfolded_edge__edge6 );
                }
                candidate_DNTUnfolded_node_c2.lgspFlags = candidate_DNTUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c2;
                candidate_DNTUnfolded_node_c1.lgspFlags = candidate_DNTUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_node_c1;
                candidate_DNTUnfolded_edge__edge0.lgspFlags = candidate_DNTUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_DNTUnfolded_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_DNTUnfolded.IMatch_DNTUnfolded match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches)
        {
            foreach(Rule_DNTUnfolded.IMatch_DNTUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_DNTUnfolded.IMatch_DNTUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_DNTUnfolded.IMatch_DNTUnfolded)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_DNTUnfolded.IMatch_DNTUnfolded>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_createDNT
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createDNT.IMatch_createDNT match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_createDNT : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_createDNT
    {
        public Action_createDNT()
            : base(Rule_createDNT.Instance.patternGraph)
        {
            _rulePattern = Rule_createDNT.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_createDNT _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "createDNT"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_createDNT.Match_createDNT, Rule_createDNT.IMatch_createDNT> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_createDNT Instance { get { return instance; } set { instance = value; } }
        private static Action_createDNT instance = new Action_createDNT();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_createDNT.Match_createDNT, Rule_createDNT.IMatch_createDNT>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Rule_createDNT.Match_createDNT match = matches.GetNextUnfilledPosition();
            matches.PositionWasFilledFixIt();
            // if enough matches were found, we leave
            if(maxMatches > 0 && matches.Count >= maxMatches)
            {
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createDNT.IMatch_createDNT match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches)
        {
            foreach(Rule_createDNT.IMatch_createDNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_createDNT.IMatch_createDNT match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_createDNT.IMatch_createDNT)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_createDNT.IMatch_createDNT>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNB
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNB.IMatch_TNB match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNB : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNB
    {
        public Action_TNB()
            : base(Rule_TNB.Instance.patternGraph)
        {
            _rulePattern = Rule_TNB.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNB _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNB"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNB.Match_TNB, Rule_TNB.IMatch_TNB> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNB Instance { get { return instance; } set { instance = value; } }
        private static Action_TNB instance = new Action_TNB();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNB.Match_TNB, Rule_TNB.IMatch_TNB>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Lookup TNB_edge__edge0 
            int type_id_candidate_TNB_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_TNB_edge__edge0], candidate_TNB_edge__edge0 = head_candidate_TNB_edge__edge0.lgspTypeNext; candidate_TNB_edge__edge0 != head_candidate_TNB_edge__edge0; candidate_TNB_edge__edge0 = candidate_TNB_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_TNB_edge__edge0;
                prev__candidate_TNB_edge__edge0 = candidate_TNB_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNB_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source TNB_node_c1 from TNB_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNB_node_c1 = candidate_TNB_edge__edge0.lgspSource;
                if(candidate_TNB_node_c1.lgspType.TypeID!=1) {
                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNB_node_c1;
                prev__candidate_TNB_node_c1 = candidate_TNB_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNB_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target TNB_node_c2 from TNB_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNB_node_c2 = candidate_TNB_edge__edge0.lgspTarget;
                if(candidate_TNB_node_c2.lgspType.TypeID!=1) {
                    candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                    continue;
                }
                if((candidate_TNB_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNB_node_c2;
                prev__candidate_TNB_node_c2 = candidate_TNB_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNB_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Element Nitro_node_anchor_inlined__sub1_40 assigned from other element TNB_node_c2 
                GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub1_40 = candidate_TNB_node_c2;
                if(candidate_Nitro_node_anchor_inlined__sub1_40.lgspType.TypeID!=1) {
                    candidate_TNB_node_c2.lgspFlags = candidate_TNB_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c2;
                    candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                    continue;
                }
                // Element Hydrogen_node_anchor_inlined__sub0_39 assigned from other element TNB_node_c1 
                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub0_39 = candidate_TNB_node_c1;
                if(candidate_Hydrogen_node_anchor_inlined__sub0_39.lgspType.TypeID!=1) {
                    candidate_TNB_node_c2.lgspFlags = candidate_TNB_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c2;
                    candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                    continue;
                }
                // Extend Outgoing TNB_edge__edge6 from TNB_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge6 = candidate_TNB_node_c1.lgspOuthead;
                if(head_candidate_TNB_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge6 = head_candidate_TNB_edge__edge6;
                    do
                    {
                        if(candidate_TNB_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_TNB_edge__edge6.lgspTarget != candidate_TNB_node_c2) {
                            continue;
                        }
                        if((candidate_TNB_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_TNB_edge__edge6;
                        prev__candidate_TNB_edge__edge6 = candidate_TNB_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_TNB_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing TNB_edge__edge1 from TNB_node_c2 
                        GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge1 = candidate_TNB_node_c2.lgspOuthead;
                        if(head_candidate_TNB_edge__edge1 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge1 = head_candidate_TNB_edge__edge1;
                            do
                            {
                                if(candidate_TNB_edge__edge1.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_TNB_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_TNB_edge__edge1;
                                prev__candidate_TNB_edge__edge1 = candidate_TNB_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNB_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target TNB_node_c3 from TNB_edge__edge1 
                                GRGEN_LGSP.LGSPNode candidate_TNB_node_c3 = candidate_TNB_edge__edge1.lgspTarget;
                                if(candidate_TNB_node_c3.lgspType.TypeID!=1) {
                                    candidate_TNB_edge__edge1.lgspFlags = candidate_TNB_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge1;
                                    continue;
                                }
                                if((candidate_TNB_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    candidate_TNB_edge__edge1.lgspFlags = candidate_TNB_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge1;
                                    continue;
                                }
                                uint prev__candidate_TNB_node_c3;
                                prev__candidate_TNB_node_c3 = candidate_TNB_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNB_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Element Hydrogen_node_anchor_inlined__sub2_41 assigned from other element TNB_node_c3 
                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub2_41 = candidate_TNB_node_c3;
                                if(candidate_Hydrogen_node_anchor_inlined__sub2_41.lgspType.TypeID!=1) {
                                    candidate_TNB_node_c3.lgspFlags = candidate_TNB_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c3;
                                    candidate_TNB_edge__edge1.lgspFlags = candidate_TNB_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge1;
                                    continue;
                                }
                                // Extend Outgoing Nitro_edge__edge0_inlined__sub1_40 from Nitro_node_anchor_inlined__sub1_40 
                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub1_40 = candidate_Nitro_node_anchor_inlined__sub1_40.lgspOuthead;
                                if(head_candidate_Nitro_edge__edge0_inlined__sub1_40 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub1_40 = head_candidate_Nitro_edge__edge0_inlined__sub1_40;
                                    do
                                    {
                                        if(candidate_Nitro_edge__edge0_inlined__sub1_40.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub1_40;
                                        prev__candidate_Nitro_edge__edge0_inlined__sub1_40 = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target Nitro_node_n_inlined__sub1_40 from Nitro_edge__edge0_inlined__sub1_40 
                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub1_40 = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspTarget;
                                        if(candidate_Nitro_node_n_inlined__sub1_40.lgspType.TypeID!=4) {
                                            candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_40;
                                            continue;
                                        }
                                        uint prev__candidate_Nitro_node_n_inlined__sub1_40;
                                        prev__candidate_Nitro_node_n_inlined__sub1_40 = candidate_Nitro_node_n_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_Nitro_node_n_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing Hydrogen_edge__edge0_inlined__sub0_39 from Hydrogen_node_anchor_inlined__sub0_39 
                                        GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub0_39 = candidate_Hydrogen_node_anchor_inlined__sub0_39.lgspOuthead;
                                        if(head_candidate_Hydrogen_edge__edge0_inlined__sub0_39 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub0_39 = head_candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                            do
                                            {
                                                if(candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                                prev__candidate_Hydrogen_edge__edge0_inlined__sub0_39 = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target Hydrogen_node__node0_inlined__sub0_39 from Hydrogen_edge__edge0_inlined__sub0_39 
                                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub0_39 = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspTarget;
                                                if(candidate_Hydrogen_node__node0_inlined__sub0_39.lgspType.TypeID!=2) {
                                                    candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                                    continue;
                                                }
                                                uint prev__candidate_Hydrogen_node__node0_inlined__sub0_39;
                                                prev__candidate_Hydrogen_node__node0_inlined__sub0_39 = candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing TNB_edge__edge2 from TNB_node_c3 
                                                GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge2 = candidate_TNB_node_c3.lgspOuthead;
                                                if(head_candidate_TNB_edge__edge2 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge2 = head_candidate_TNB_edge__edge2;
                                                    do
                                                    {
                                                        if(candidate_TNB_edge__edge2.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_TNB_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNB_edge__edge2;
                                                        prev__candidate_TNB_edge__edge2 = candidate_TNB_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNB_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target TNB_node_c4 from TNB_edge__edge2 
                                                        GRGEN_LGSP.LGSPNode candidate_TNB_node_c4 = candidate_TNB_edge__edge2.lgspTarget;
                                                        if(candidate_TNB_node_c4.lgspType.TypeID!=1) {
                                                            candidate_TNB_edge__edge2.lgspFlags = candidate_TNB_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge2;
                                                            continue;
                                                        }
                                                        if((candidate_TNB_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_TNB_edge__edge2.lgspFlags = candidate_TNB_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge2;
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNB_node_c4;
                                                        prev__candidate_TNB_node_c4 = candidate_TNB_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNB_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Element Nitro_node_anchor_inlined__sub3_42 assigned from other element TNB_node_c4 
                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub3_42 = candidate_TNB_node_c4;
                                                        if(candidate_Nitro_node_anchor_inlined__sub3_42.lgspType.TypeID!=1) {
                                                            candidate_TNB_node_c4.lgspFlags = candidate_TNB_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c4;
                                                            candidate_TNB_edge__edge2.lgspFlags = candidate_TNB_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge2;
                                                            continue;
                                                        }
                                                        // Extend Outgoing TNB_edge__edge7 from TNB_node_c3 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge7 = candidate_TNB_node_c3.lgspOuthead;
                                                        if(head_candidate_TNB_edge__edge7 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge7 = head_candidate_TNB_edge__edge7;
                                                            do
                                                            {
                                                                if(candidate_TNB_edge__edge7.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_TNB_edge__edge7.lgspTarget != candidate_TNB_node_c4) {
                                                                    continue;
                                                                }
                                                                if((candidate_TNB_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_TNB_edge__edge7;
                                                                prev__candidate_TNB_edge__edge7 = candidate_TNB_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_TNB_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing Hydrogen_edge__edge0_inlined__sub2_41 from Hydrogen_node_anchor_inlined__sub2_41 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub2_41 = candidate_Hydrogen_node_anchor_inlined__sub2_41.lgspOuthead;
                                                                if(head_candidate_Hydrogen_edge__edge0_inlined__sub2_41 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub2_41 = head_candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                    do
                                                                    {
                                                                        if(candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                        prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41 = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target Hydrogen_node__node0_inlined__sub2_41 from Hydrogen_edge__edge0_inlined__sub2_41 
                                                                        GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub2_41 = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspTarget;
                                                                        if(candidate_Hydrogen_node__node0_inlined__sub2_41.lgspType.TypeID!=2) {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                            continue;
                                                                        }
                                                                        if((candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_Hydrogen_node__node0_inlined__sub2_41;
                                                                        prev__candidate_Hydrogen_node__node0_inlined__sub2_41 = candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing Nitro_edge__edge1_inlined__sub1_40 from Nitro_node_n_inlined__sub1_40 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub1_40 = candidate_Nitro_node_n_inlined__sub1_40.lgspOuthead;
                                                                        if(head_candidate_Nitro_edge__edge1_inlined__sub1_40 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub1_40 = head_candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                            do
                                                                            {
                                                                                if(candidate_Nitro_edge__edge1_inlined__sub1_40.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                                prev__candidate_Nitro_edge__edge1_inlined__sub1_40 = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target Nitro_node__node0_inlined__sub1_40 from Nitro_edge__edge1_inlined__sub1_40 
                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub1_40 = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspTarget;
                                                                                if(candidate_Nitro_node__node0_inlined__sub1_40.lgspType.TypeID!=3) {
                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_Nitro_node__node0_inlined__sub1_40;
                                                                                prev__candidate_Nitro_node__node0_inlined__sub1_40 = candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing Nitro_edge__edge2_inlined__sub1_40 from Nitro_node_n_inlined__sub1_40 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub1_40 = candidate_Nitro_node_n_inlined__sub1_40.lgspOuthead;
                                                                                if(head_candidate_Nitro_edge__edge2_inlined__sub1_40 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub1_40 = head_candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_Nitro_edge__edge2_inlined__sub1_40.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                        prev__candidate_Nitro_edge__edge2_inlined__sub1_40 = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target Nitro_node__node1_inlined__sub1_40 from Nitro_edge__edge2_inlined__sub1_40 
                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub1_40 = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspTarget;
                                                                                        if(candidate_Nitro_node__node1_inlined__sub1_40.lgspType.TypeID!=3) {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_Nitro_node__node1_inlined__sub1_40;
                                                                                        prev__candidate_Nitro_node__node1_inlined__sub1_40 = candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing TNB_edge__edge3 from TNB_node_c4 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge3 = candidate_TNB_node_c4.lgspOuthead;
                                                                                        if(head_candidate_TNB_edge__edge3 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge3 = head_candidate_TNB_edge__edge3;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_TNB_edge__edge3.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNB_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNB_edge__edge3;
                                                                                                prev__candidate_TNB_edge__edge3 = candidate_TNB_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNB_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target TNB_node_c5 from TNB_edge__edge3 
                                                                                                GRGEN_LGSP.LGSPNode candidate_TNB_node_c5 = candidate_TNB_edge__edge3.lgspTarget;
                                                                                                if(candidate_TNB_node_c5.lgspType.TypeID!=1) {
                                                                                                    candidate_TNB_edge__edge3.lgspFlags = candidate_TNB_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge3;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNB_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_TNB_edge__edge3.lgspFlags = candidate_TNB_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge3;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNB_node_c5;
                                                                                                prev__candidate_TNB_node_c5 = candidate_TNB_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNB_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Element Hydrogen_node_anchor_inlined__sub4_43 assigned from other element TNB_node_c5 
                                                                                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node_anchor_inlined__sub4_43 = candidate_TNB_node_c5;
                                                                                                if(candidate_Hydrogen_node_anchor_inlined__sub4_43.lgspType.TypeID!=1) {
                                                                                                    candidate_TNB_node_c5.lgspFlags = candidate_TNB_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c5;
                                                                                                    candidate_TNB_edge__edge3.lgspFlags = candidate_TNB_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge3;
                                                                                                    continue;
                                                                                                }
                                                                                                // Extend Outgoing Nitro_edge__edge0_inlined__sub3_42 from Nitro_node_anchor_inlined__sub3_42 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub3_42 = candidate_Nitro_node_anchor_inlined__sub3_42.lgspOuthead;
                                                                                                if(head_candidate_Nitro_edge__edge0_inlined__sub3_42 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub3_42 = head_candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_Nitro_edge__edge0_inlined__sub3_42.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                        prev__candidate_Nitro_edge__edge0_inlined__sub3_42 = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target Nitro_node_n_inlined__sub3_42 from Nitro_edge__edge0_inlined__sub3_42 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub3_42 = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspTarget;
                                                                                                        if(candidate_Nitro_node_n_inlined__sub3_42.lgspType.TypeID!=4) {
                                                                                                            candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_Nitro_node_n_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_Nitro_node_n_inlined__sub3_42;
                                                                                                        prev__candidate_Nitro_node_n_inlined__sub3_42 = candidate_Nitro_node_n_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_Nitro_node_n_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing TNB_edge__edge4 from TNB_node_c5 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge4 = candidate_TNB_node_c5.lgspOuthead;
                                                                                                        if(head_candidate_TNB_edge__edge4 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge4 = head_candidate_TNB_edge__edge4;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_TNB_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNB_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_TNB_edge__edge4;
                                                                                                                prev__candidate_TNB_edge__edge4 = candidate_TNB_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_TNB_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target TNB_node_c6 from TNB_edge__edge4 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNB_node_c6 = candidate_TNB_edge__edge4.lgspTarget;
                                                                                                                if(candidate_TNB_node_c6.lgspType.TypeID!=1) {
                                                                                                                    candidate_TNB_edge__edge4.lgspFlags = candidate_TNB_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge4;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNB_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_TNB_edge__edge4.lgspFlags = candidate_TNB_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge4;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // Element Nitro_node_anchor_inlined__sub5_44 assigned from other element TNB_node_c6 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node_anchor_inlined__sub5_44 = candidate_TNB_node_c6;
                                                                                                                if(candidate_Nitro_node_anchor_inlined__sub5_44.lgspType.TypeID!=1) {
                                                                                                                    candidate_TNB_edge__edge4.lgspFlags = candidate_TNB_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge4;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // Extend Outgoing TNB_edge__edge8 from TNB_node_c5 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge8 = candidate_TNB_node_c5.lgspOuthead;
                                                                                                                if(head_candidate_TNB_edge__edge8 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge8 = head_candidate_TNB_edge__edge8;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_TNB_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if(candidate_TNB_edge__edge8.lgspTarget != candidate_TNB_node_c6) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNB_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNB_edge__edge8;
                                                                                                                        prev__candidate_TNB_edge__edge8 = candidate_TNB_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNB_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Extend Outgoing Hydrogen_edge__edge0_inlined__sub4_43 from Hydrogen_node_anchor_inlined__sub4_43 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Hydrogen_edge__edge0_inlined__sub4_43 = candidate_Hydrogen_node_anchor_inlined__sub4_43.lgspOuthead;
                                                                                                                        if(head_candidate_Hydrogen_edge__edge0_inlined__sub4_43 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Hydrogen_edge__edge0_inlined__sub4_43 = head_candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                                prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43 = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target Hydrogen_node__node0_inlined__sub4_43 from Hydrogen_edge__edge0_inlined__sub4_43 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Hydrogen_node__node0_inlined__sub4_43 = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspTarget;
                                                                                                                                if(candidate_Hydrogen_node__node0_inlined__sub4_43.lgspType.TypeID!=2) {
                                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_Hydrogen_node__node0_inlined__sub4_43.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                // Extend Outgoing Nitro_edge__edge1_inlined__sub3_42 from Nitro_node_n_inlined__sub3_42 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub3_42 = candidate_Nitro_node_n_inlined__sub3_42.lgspOuthead;
                                                                                                                                if(head_candidate_Nitro_edge__edge1_inlined__sub3_42 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub3_42 = head_candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_Nitro_edge__edge1_inlined__sub3_42.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                        prev__candidate_Nitro_edge__edge1_inlined__sub3_42 = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target Nitro_node__node0_inlined__sub3_42 from Nitro_edge__edge1_inlined__sub3_42 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub3_42 = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspTarget;
                                                                                                                                        if(candidate_Nitro_node__node0_inlined__sub3_42.lgspType.TypeID!=3) {
                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_Nitro_node__node0_inlined__sub3_42;
                                                                                                                                        prev__candidate_Nitro_node__node0_inlined__sub3_42 = candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Extend Outgoing Nitro_edge__edge2_inlined__sub3_42 from Nitro_node_n_inlined__sub3_42 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub3_42 = candidate_Nitro_node_n_inlined__sub3_42.lgspOuthead;
                                                                                                                                        if(head_candidate_Nitro_edge__edge2_inlined__sub3_42 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub3_42 = head_candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_Nitro_edge__edge2_inlined__sub3_42.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                                prev__candidate_Nitro_edge__edge2_inlined__sub3_42 = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Implicit Target Nitro_node__node1_inlined__sub3_42 from Nitro_edge__edge2_inlined__sub3_42 
                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub3_42 = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspTarget;
                                                                                                                                                if(candidate_Nitro_node__node1_inlined__sub3_42.lgspType.TypeID!=3) {
                                                                                                                                                    candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_Nitro_node__node1_inlined__sub3_42;
                                                                                                                                                prev__candidate_Nitro_node__node1_inlined__sub3_42 = candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing TNB_edge__edge5 from TNB_node_c6 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNB_edge__edge5 = candidate_TNB_node_c6.lgspOuthead;
                                                                                                                                                if(head_candidate_TNB_edge__edge5 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNB_edge__edge5 = head_candidate_TNB_edge__edge5;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_TNB_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if(candidate_TNB_edge__edge5.lgspTarget != candidate_TNB_node_c1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_TNB_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_TNB_edge__edge5;
                                                                                                                                                        prev__candidate_TNB_edge__edge5 = candidate_TNB_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_TNB_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Extend Outgoing Nitro_edge__edge0_inlined__sub5_44 from Nitro_node_anchor_inlined__sub5_44 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge0_inlined__sub5_44 = candidate_Nitro_node_anchor_inlined__sub5_44.lgspOuthead;
                                                                                                                                                        if(head_candidate_Nitro_edge__edge0_inlined__sub5_44 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge0_inlined__sub5_44 = head_candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_Nitro_edge__edge0_inlined__sub5_44.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                                prev__candidate_Nitro_edge__edge0_inlined__sub5_44 = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target Nitro_node_n_inlined__sub5_44 from Nitro_edge__edge0_inlined__sub5_44 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node_n_inlined__sub5_44 = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspTarget;
                                                                                                                                                                if(candidate_Nitro_node_n_inlined__sub5_44.lgspType.TypeID!=4) {
                                                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_Nitro_node_n_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                // Extend Outgoing Nitro_edge__edge1_inlined__sub5_44 from Nitro_node_n_inlined__sub5_44 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge1_inlined__sub5_44 = candidate_Nitro_node_n_inlined__sub5_44.lgspOuthead;
                                                                                                                                                                if(head_candidate_Nitro_edge__edge1_inlined__sub5_44 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge1_inlined__sub5_44 = head_candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_Nitro_edge__edge1_inlined__sub5_44.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                        prev__candidate_Nitro_edge__edge1_inlined__sub5_44 = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target Nitro_node__node0_inlined__sub5_44 from Nitro_edge__edge1_inlined__sub5_44 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_Nitro_node__node0_inlined__sub5_44 = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspTarget;
                                                                                                                                                                        if(candidate_Nitro_node__node0_inlined__sub5_44.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_Nitro_node__node0_inlined__sub5_44;
                                                                                                                                                                        prev__candidate_Nitro_node__node0_inlined__sub5_44 = candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Extend Outgoing Nitro_edge__edge2_inlined__sub5_44 from Nitro_node_n_inlined__sub5_44 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_Nitro_edge__edge2_inlined__sub5_44 = candidate_Nitro_node_n_inlined__sub5_44.lgspOuthead;
                                                                                                                                                                        if(head_candidate_Nitro_edge__edge2_inlined__sub5_44 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_Nitro_edge__edge2_inlined__sub5_44 = head_candidate_Nitro_edge__edge2_inlined__sub5_44;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_Nitro_edge__edge2_inlined__sub5_44.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_Nitro_edge__edge2_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                // Implicit Target Nitro_node__node1_inlined__sub5_44 from Nitro_edge__edge2_inlined__sub5_44 
                                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_Nitro_node__node1_inlined__sub5_44 = candidate_Nitro_edge__edge2_inlined__sub5_44.lgspTarget;
                                                                                                                                                                                if(candidate_Nitro_node__node1_inlined__sub5_44.lgspType.TypeID!=3) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_Nitro_node__node1_inlined__sub5_44.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                Rule_TNB.Match_TNB match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                Pattern_Hydrogen.Match_Hydrogen match__sub0 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                match__sub0.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                Pattern_Nitro.Match_Nitro match__sub1 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                match__sub1.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                Pattern_Hydrogen.Match_Hydrogen match__sub2 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                match__sub2.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                Pattern_Nitro.Match_Nitro match__sub3 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                match__sub3.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                Pattern_Hydrogen.Match_Hydrogen match__sub4 = new Pattern_Hydrogen.Match_Hydrogen();
                                                                                                                                                                                match__sub4.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                Pattern_Nitro.Match_Nitro match__sub5 = new Pattern_Nitro.Match_Nitro();
                                                                                                                                                                                match__sub5.SetMatchOfEnclosingPattern(match);
                                                                                                                                                                                match._node_c1 = candidate_TNB_node_c1;
                                                                                                                                                                                match._node_c2 = candidate_TNB_node_c2;
                                                                                                                                                                                match._node_c3 = candidate_TNB_node_c3;
                                                                                                                                                                                match._node_c4 = candidate_TNB_node_c4;
                                                                                                                                                                                match._node_c5 = candidate_TNB_node_c5;
                                                                                                                                                                                match._node_c6 = candidate_TNB_node_c6;
                                                                                                                                                                                match__sub0._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub0_39;
                                                                                                                                                                                match__sub0._node__node0 = candidate_Hydrogen_node__node0_inlined__sub0_39;
                                                                                                                                                                                match__sub1._node_anchor = candidate_Nitro_node_anchor_inlined__sub1_40;
                                                                                                                                                                                match__sub1._node_n = candidate_Nitro_node_n_inlined__sub1_40;
                                                                                                                                                                                match__sub1._node__node0 = candidate_Nitro_node__node0_inlined__sub1_40;
                                                                                                                                                                                match__sub1._node__node1 = candidate_Nitro_node__node1_inlined__sub1_40;
                                                                                                                                                                                match__sub2._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub2_41;
                                                                                                                                                                                match__sub2._node__node0 = candidate_Hydrogen_node__node0_inlined__sub2_41;
                                                                                                                                                                                match__sub3._node_anchor = candidate_Nitro_node_anchor_inlined__sub3_42;
                                                                                                                                                                                match__sub3._node_n = candidate_Nitro_node_n_inlined__sub3_42;
                                                                                                                                                                                match__sub3._node__node0 = candidate_Nitro_node__node0_inlined__sub3_42;
                                                                                                                                                                                match__sub3._node__node1 = candidate_Nitro_node__node1_inlined__sub3_42;
                                                                                                                                                                                match__sub4._node_anchor = candidate_Hydrogen_node_anchor_inlined__sub4_43;
                                                                                                                                                                                match__sub4._node__node0 = candidate_Hydrogen_node__node0_inlined__sub4_43;
                                                                                                                                                                                match__sub5._node_anchor = candidate_Nitro_node_anchor_inlined__sub5_44;
                                                                                                                                                                                match__sub5._node_n = candidate_Nitro_node_n_inlined__sub5_44;
                                                                                                                                                                                match__sub5._node__node0 = candidate_Nitro_node__node0_inlined__sub5_44;
                                                                                                                                                                                match__sub5._node__node1 = candidate_Nitro_node__node1_inlined__sub5_44;
                                                                                                                                                                                match._edge__edge0 = candidate_TNB_edge__edge0;
                                                                                                                                                                                match._edge__edge1 = candidate_TNB_edge__edge1;
                                                                                                                                                                                match._edge__edge2 = candidate_TNB_edge__edge2;
                                                                                                                                                                                match._edge__edge3 = candidate_TNB_edge__edge3;
                                                                                                                                                                                match._edge__edge4 = candidate_TNB_edge__edge4;
                                                                                                                                                                                match._edge__edge5 = candidate_TNB_edge__edge5;
                                                                                                                                                                                match._edge__edge6 = candidate_TNB_edge__edge6;
                                                                                                                                                                                match._edge__edge7 = candidate_TNB_edge__edge7;
                                                                                                                                                                                match._edge__edge8 = candidate_TNB_edge__edge8;
                                                                                                                                                                                match__sub0._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                                                                                                                                                                match__sub1._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub1_40;
                                                                                                                                                                                match__sub1._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                                                                                                                                match__sub1._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                                                                                                                match__sub2._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                                                                                                                                match__sub3._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                                                                                                match__sub3._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                                                                match__sub3._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                                                                match__sub4._edge__edge0 = candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                                                                                match__sub5._edge__edge0 = candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                                                match__sub5._edge__edge1 = candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                                match__sub5._edge__edge2 = candidate_Nitro_edge__edge2_inlined__sub5_44;
                                                                                                                                                                                match.__sub0 = match__sub0;
                                                                                                                                                                                match.__sub1 = match__sub1;
                                                                                                                                                                                match.__sub2 = match__sub2;
                                                                                                                                                                                match.__sub3 = match__sub3;
                                                                                                                                                                                match.__sub4 = match__sub4;
                                                                                                                                                                                match.__sub5 = match__sub5;
                                                                                                                                                                                matches.PositionWasFilledFixIt();
                                                                                                                                                                                // if enough matches were found, we leave
                                                                                                                                                                                if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                {
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub5_44.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub5_44);
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub5_44.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub5_44);
                                                                                                                                                                                    candidate_Nitro_node_anchor_inlined__sub5_44.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub5_44);
                                                                                                                                                                                    candidate_TNB_node_c6.MoveOutHeadAfter(candidate_TNB_edge__edge5);
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub3_42.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub3_42);
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub3_42.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub3_42);
                                                                                                                                                                                    candidate_Hydrogen_node_anchor_inlined__sub4_43.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub4_43);
                                                                                                                                                                                    candidate_TNB_node_c5.MoveOutHeadAfter(candidate_TNB_edge__edge8);
                                                                                                                                                                                    candidate_TNB_node_c5.MoveOutHeadAfter(candidate_TNB_edge__edge4);
                                                                                                                                                                                    candidate_Nitro_node_anchor_inlined__sub3_42.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub3_42);
                                                                                                                                                                                    candidate_TNB_node_c4.MoveOutHeadAfter(candidate_TNB_edge__edge3);
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub1_40.MoveOutHeadAfter(candidate_Nitro_edge__edge2_inlined__sub1_40);
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub1_40.MoveOutHeadAfter(candidate_Nitro_edge__edge1_inlined__sub1_40);
                                                                                                                                                                                    candidate_Hydrogen_node_anchor_inlined__sub2_41.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub2_41);
                                                                                                                                                                                    candidate_TNB_node_c3.MoveOutHeadAfter(candidate_TNB_edge__edge7);
                                                                                                                                                                                    candidate_TNB_node_c3.MoveOutHeadAfter(candidate_TNB_edge__edge2);
                                                                                                                                                                                    candidate_Hydrogen_node_anchor_inlined__sub0_39.MoveOutHeadAfter(candidate_Hydrogen_edge__edge0_inlined__sub0_39);
                                                                                                                                                                                    candidate_Nitro_node_anchor_inlined__sub1_40.MoveOutHeadAfter(candidate_Nitro_edge__edge0_inlined__sub1_40);
                                                                                                                                                                                    candidate_TNB_node_c2.MoveOutHeadAfter(candidate_TNB_edge__edge1);
                                                                                                                                                                                    candidate_TNB_node_c1.MoveOutHeadAfter(candidate_TNB_edge__edge6);
                                                                                                                                                                                    graph.MoveHeadAfter(candidate_TNB_edge__edge0);
                                                                                                                                                                                    candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags = candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub5_44;
                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                                                    candidate_TNB_edge__edge5.lgspFlags = candidate_TNB_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge5;
                                                                                                                                                                                    candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags = candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub3_42;
                                                                                                                                                                                    candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                                                                    candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_42;
                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                                                                                    candidate_TNB_edge__edge8.lgspFlags = candidate_TNB_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge8;
                                                                                                                                                                                    candidate_TNB_edge__edge4.lgspFlags = candidate_TNB_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge4;
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub3_42.lgspFlags = candidate_Nitro_node_n_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub3_42;
                                                                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                                                                                                    candidate_TNB_node_c5.lgspFlags = candidate_TNB_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c5;
                                                                                                                                                                                    candidate_TNB_edge__edge3.lgspFlags = candidate_TNB_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge3;
                                                                                                                                                                                    candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_40;
                                                                                                                                                                                    candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                                                                                                                    candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_40;
                                                                                                                                                                                    candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                                                                                                                                    candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_41;
                                                                                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                                                                                                                                    candidate_TNB_edge__edge7.lgspFlags = candidate_TNB_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge7;
                                                                                                                                                                                    candidate_TNB_node_c4.lgspFlags = candidate_TNB_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c4;
                                                                                                                                                                                    candidate_TNB_edge__edge2.lgspFlags = candidate_TNB_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge2;
                                                                                                                                                                                    candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub0_39;
                                                                                                                                                                                    candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                                                                                                                                                                    candidate_Nitro_node_n_inlined__sub1_40.lgspFlags = candidate_Nitro_node_n_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_40;
                                                                                                                                                                                    candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_40;
                                                                                                                                                                                    candidate_TNB_node_c3.lgspFlags = candidate_TNB_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c3;
                                                                                                                                                                                    candidate_TNB_edge__edge1.lgspFlags = candidate_TNB_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge1;
                                                                                                                                                                                    candidate_TNB_edge__edge6.lgspFlags = candidate_TNB_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge6;
                                                                                                                                                                                    candidate_TNB_node_c2.lgspFlags = candidate_TNB_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c2;
                                                                                                                                                                                    candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                                                                                                                                                                                    candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
                                                                                                                                                                                    return matches;
                                                                                                                                                                                }
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_Nitro_edge__edge2_inlined__sub5_44 = candidate_Nitro_edge__edge2_inlined__sub5_44.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub5_44 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags = candidate_Nitro_node__node0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub5_44;
                                                                                                                                                                        candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub5_44;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_Nitro_edge__edge1_inlined__sub5_44 = candidate_Nitro_edge__edge1_inlined__sub5_44.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub5_44 );
                                                                                                                                                                }
                                                                                                                                                                candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub5_44;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_Nitro_edge__edge0_inlined__sub5_44 = candidate_Nitro_edge__edge0_inlined__sub5_44.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub5_44 );
                                                                                                                                                        }
                                                                                                                                                        candidate_TNB_edge__edge5.lgspFlags = candidate_TNB_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge5;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_TNB_edge__edge5 = candidate_TNB_edge__edge5.lgspOutNext) != head_candidate_TNB_edge__edge5 );
                                                                                                                                                }
                                                                                                                                                candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags = candidate_Nitro_node__node1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub3_42;
                                                                                                                                                candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub3_42;
                                                                                                                                            }
                                                                                                                                            while( (candidate_Nitro_edge__edge2_inlined__sub3_42 = candidate_Nitro_edge__edge2_inlined__sub3_42.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub3_42 );
                                                                                                                                        }
                                                                                                                                        candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags = candidate_Nitro_node__node0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub3_42;
                                                                                                                                        candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub3_42;
                                                                                                                                    }
                                                                                                                                    while( (candidate_Nitro_edge__edge1_inlined__sub3_42 = candidate_Nitro_edge__edge1_inlined__sub3_42.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub3_42 );
                                                                                                                                }
                                                                                                                                candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub4_43;
                                                                                                                            }
                                                                                                                            while( (candidate_Hydrogen_edge__edge0_inlined__sub4_43 = candidate_Hydrogen_edge__edge0_inlined__sub4_43.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub4_43 );
                                                                                                                        }
                                                                                                                        candidate_TNB_edge__edge8.lgspFlags = candidate_TNB_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge8;
                                                                                                                    }
                                                                                                                    while( (candidate_TNB_edge__edge8 = candidate_TNB_edge__edge8.lgspOutNext) != head_candidate_TNB_edge__edge8 );
                                                                                                                }
                                                                                                                candidate_TNB_edge__edge4.lgspFlags = candidate_TNB_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge4;
                                                                                                            }
                                                                                                            while( (candidate_TNB_edge__edge4 = candidate_TNB_edge__edge4.lgspOutNext) != head_candidate_TNB_edge__edge4 );
                                                                                                        }
                                                                                                        candidate_Nitro_node_n_inlined__sub3_42.lgspFlags = candidate_Nitro_node_n_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub3_42;
                                                                                                        candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub3_42;
                                                                                                    }
                                                                                                    while( (candidate_Nitro_edge__edge0_inlined__sub3_42 = candidate_Nitro_edge__edge0_inlined__sub3_42.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub3_42 );
                                                                                                }
                                                                                                candidate_TNB_node_c5.lgspFlags = candidate_TNB_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c5;
                                                                                                candidate_TNB_edge__edge3.lgspFlags = candidate_TNB_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge3;
                                                                                            }
                                                                                            while( (candidate_TNB_edge__edge3 = candidate_TNB_edge__edge3.lgspOutNext) != head_candidate_TNB_edge__edge3 );
                                                                                        }
                                                                                        candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags = candidate_Nitro_node__node1_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node1_inlined__sub1_40;
                                                                                        candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge2_inlined__sub1_40;
                                                                                    }
                                                                                    while( (candidate_Nitro_edge__edge2_inlined__sub1_40 = candidate_Nitro_edge__edge2_inlined__sub1_40.lgspOutNext) != head_candidate_Nitro_edge__edge2_inlined__sub1_40 );
                                                                                }
                                                                                candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags = candidate_Nitro_node__node0_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node__node0_inlined__sub1_40;
                                                                                candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge1_inlined__sub1_40;
                                                                            }
                                                                            while( (candidate_Nitro_edge__edge1_inlined__sub1_40 = candidate_Nitro_edge__edge1_inlined__sub1_40.lgspOutNext) != head_candidate_Nitro_edge__edge1_inlined__sub1_40 );
                                                                        }
                                                                        candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub2_41;
                                                                        candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub2_41;
                                                                    }
                                                                    while( (candidate_Hydrogen_edge__edge0_inlined__sub2_41 = candidate_Hydrogen_edge__edge0_inlined__sub2_41.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub2_41 );
                                                                }
                                                                candidate_TNB_edge__edge7.lgspFlags = candidate_TNB_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge7;
                                                            }
                                                            while( (candidate_TNB_edge__edge7 = candidate_TNB_edge__edge7.lgspOutNext) != head_candidate_TNB_edge__edge7 );
                                                        }
                                                        candidate_TNB_node_c4.lgspFlags = candidate_TNB_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c4;
                                                        candidate_TNB_edge__edge2.lgspFlags = candidate_TNB_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge2;
                                                    }
                                                    while( (candidate_TNB_edge__edge2 = candidate_TNB_edge__edge2.lgspOutNext) != head_candidate_TNB_edge__edge2 );
                                                }
                                                candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags = candidate_Hydrogen_node__node0_inlined__sub0_39.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_node__node0_inlined__sub0_39;
                                                candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Hydrogen_edge__edge0_inlined__sub0_39;
                                            }
                                            while( (candidate_Hydrogen_edge__edge0_inlined__sub0_39 = candidate_Hydrogen_edge__edge0_inlined__sub0_39.lgspOutNext) != head_candidate_Hydrogen_edge__edge0_inlined__sub0_39 );
                                        }
                                        candidate_Nitro_node_n_inlined__sub1_40.lgspFlags = candidate_Nitro_node_n_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_node_n_inlined__sub1_40;
                                        candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_Nitro_edge__edge0_inlined__sub1_40;
                                    }
                                    while( (candidate_Nitro_edge__edge0_inlined__sub1_40 = candidate_Nitro_edge__edge0_inlined__sub1_40.lgspOutNext) != head_candidate_Nitro_edge__edge0_inlined__sub1_40 );
                                }
                                candidate_TNB_node_c3.lgspFlags = candidate_TNB_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c3;
                                candidate_TNB_edge__edge1.lgspFlags = candidate_TNB_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge1;
                            }
                            while( (candidate_TNB_edge__edge1 = candidate_TNB_edge__edge1.lgspOutNext) != head_candidate_TNB_edge__edge1 );
                        }
                        candidate_TNB_edge__edge6.lgspFlags = candidate_TNB_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge6;
                    }
                    while( (candidate_TNB_edge__edge6 = candidate_TNB_edge__edge6.lgspOutNext) != head_candidate_TNB_edge__edge6 );
                }
                candidate_TNB_node_c2.lgspFlags = candidate_TNB_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c2;
                candidate_TNB_node_c1.lgspFlags = candidate_TNB_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_node_c1;
                candidate_TNB_edge__edge0.lgspFlags = candidate_TNB_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNB_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNB.IMatch_TNB match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches)
        {
            foreach(Rule_TNB.IMatch_TNB match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNB.IMatch_TNB match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNB.IMatch_TNB)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNB.IMatch_TNB>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_TNBUnfolded
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNBUnfolded.IMatch_TNBUnfolded match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_TNBUnfolded : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_TNBUnfolded
    {
        public Action_TNBUnfolded()
            : base(Rule_TNBUnfolded.Instance.patternGraph)
        {
            _rulePattern = Rule_TNBUnfolded.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_TNBUnfolded _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "TNBUnfolded"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_TNBUnfolded.Match_TNBUnfolded, Rule_TNBUnfolded.IMatch_TNBUnfolded> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_TNBUnfolded Instance { get { return instance; } set { instance = value; } }
        private static Action_TNBUnfolded instance = new Action_TNBUnfolded();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_TNBUnfolded.Match_TNBUnfolded, Rule_TNBUnfolded.IMatch_TNBUnfolded>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            // Lookup TNBUnfolded_edge__edge0 
            int type_id_candidate_TNBUnfolded_edge__edge0 = 1;
            for(GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge0 = graph.edgesByTypeHeads[type_id_candidate_TNBUnfolded_edge__edge0], candidate_TNBUnfolded_edge__edge0 = head_candidate_TNBUnfolded_edge__edge0.lgspTypeNext; candidate_TNBUnfolded_edge__edge0 != head_candidate_TNBUnfolded_edge__edge0; candidate_TNBUnfolded_edge__edge0 = candidate_TNBUnfolded_edge__edge0.lgspTypeNext)
            {
                uint prev__candidate_TNBUnfolded_edge__edge0;
                prev__candidate_TNBUnfolded_edge__edge0 = candidate_TNBUnfolded_edge__edge0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNBUnfolded_edge__edge0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Source TNBUnfolded_node_c1 from TNBUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c1 = candidate_TNBUnfolded_edge__edge0.lgspSource;
                if(candidate_TNBUnfolded_node_c1.lgspType.TypeID!=1) {
                    candidate_TNBUnfolded_edge__edge0.lgspFlags = candidate_TNBUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNBUnfolded_node_c1;
                prev__candidate_TNBUnfolded_node_c1 = candidate_TNBUnfolded_node_c1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNBUnfolded_node_c1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Implicit Target TNBUnfolded_node_c2 from TNBUnfolded_edge__edge0 
                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c2 = candidate_TNBUnfolded_edge__edge0.lgspTarget;
                if(candidate_TNBUnfolded_node_c2.lgspType.TypeID!=1) {
                    candidate_TNBUnfolded_node_c1.lgspFlags = candidate_TNBUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c1;
                    candidate_TNBUnfolded_edge__edge0.lgspFlags = candidate_TNBUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge0;
                    continue;
                }
                if((candidate_TNBUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                {
                    candidate_TNBUnfolded_node_c1.lgspFlags = candidate_TNBUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c1;
                    candidate_TNBUnfolded_edge__edge0.lgspFlags = candidate_TNBUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge0;
                    continue;
                }
                uint prev__candidate_TNBUnfolded_node_c2;
                prev__candidate_TNBUnfolded_node_c2 = candidate_TNBUnfolded_node_c2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                candidate_TNBUnfolded_node_c2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                // Extend Outgoing TNBUnfolded_edge__edge6 from TNBUnfolded_node_c1 
                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge6 = candidate_TNBUnfolded_node_c1.lgspOuthead;
                if(head_candidate_TNBUnfolded_edge__edge6 != null)
                {
                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge6 = head_candidate_TNBUnfolded_edge__edge6;
                    do
                    {
                        if(candidate_TNBUnfolded_edge__edge6.lgspType.TypeID!=1) {
                            continue;
                        }
                        if(candidate_TNBUnfolded_edge__edge6.lgspTarget != candidate_TNBUnfolded_node_c2) {
                            continue;
                        }
                        if((candidate_TNBUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                        {
                            continue;
                        }
                        uint prev__candidate_TNBUnfolded_edge__edge6;
                        prev__candidate_TNBUnfolded_edge__edge6 = candidate_TNBUnfolded_edge__edge6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        candidate_TNBUnfolded_edge__edge6.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                        // Extend Outgoing TNBUnfolded_edge__edge9 from TNBUnfolded_node_c1 
                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge9 = candidate_TNBUnfolded_node_c1.lgspOuthead;
                        if(head_candidate_TNBUnfolded_edge__edge9 != null)
                        {
                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge9 = head_candidate_TNBUnfolded_edge__edge9;
                            do
                            {
                                if(candidate_TNBUnfolded_edge__edge9.lgspType.TypeID!=1) {
                                    continue;
                                }
                                if((candidate_TNBUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                {
                                    continue;
                                }
                                uint prev__candidate_TNBUnfolded_edge__edge9;
                                prev__candidate_TNBUnfolded_edge__edge9 = candidate_TNBUnfolded_edge__edge9.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNBUnfolded_edge__edge9.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Implicit Target TNBUnfolded_node__node0 from TNBUnfolded_edge__edge9 
                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node0 = candidate_TNBUnfolded_edge__edge9.lgspTarget;
                                if(candidate_TNBUnfolded_node__node0.lgspType.TypeID!=2) {
                                    candidate_TNBUnfolded_edge__edge9.lgspFlags = candidate_TNBUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge9;
                                    continue;
                                }
                                uint prev__candidate_TNBUnfolded_node__node0;
                                prev__candidate_TNBUnfolded_node__node0 = candidate_TNBUnfolded_node__node0.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                candidate_TNBUnfolded_node__node0.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                // Extend Outgoing TNBUnfolded_edge__edge1 from TNBUnfolded_node_c2 
                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge1 = candidate_TNBUnfolded_node_c2.lgspOuthead;
                                if(head_candidate_TNBUnfolded_edge__edge1 != null)
                                {
                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge1 = head_candidate_TNBUnfolded_edge__edge1;
                                    do
                                    {
                                        if(candidate_TNBUnfolded_edge__edge1.lgspType.TypeID!=1) {
                                            continue;
                                        }
                                        if((candidate_TNBUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            continue;
                                        }
                                        uint prev__candidate_TNBUnfolded_edge__edge1;
                                        prev__candidate_TNBUnfolded_edge__edge1 = candidate_TNBUnfolded_edge__edge1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_TNBUnfolded_edge__edge1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Implicit Target TNBUnfolded_node_c3 from TNBUnfolded_edge__edge1 
                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c3 = candidate_TNBUnfolded_edge__edge1.lgspTarget;
                                        if(candidate_TNBUnfolded_node_c3.lgspType.TypeID!=1) {
                                            candidate_TNBUnfolded_edge__edge1.lgspFlags = candidate_TNBUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge1;
                                            continue;
                                        }
                                        if((candidate_TNBUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                        {
                                            candidate_TNBUnfolded_edge__edge1.lgspFlags = candidate_TNBUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge1;
                                            continue;
                                        }
                                        uint prev__candidate_TNBUnfolded_node_c3;
                                        prev__candidate_TNBUnfolded_node_c3 = candidate_TNBUnfolded_node_c3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        candidate_TNBUnfolded_node_c3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                        // Extend Outgoing TNBUnfolded_edge__edge10 from TNBUnfolded_node_c2 
                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge10 = candidate_TNBUnfolded_node_c2.lgspOuthead;
                                        if(head_candidate_TNBUnfolded_edge__edge10 != null)
                                        {
                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge10 = head_candidate_TNBUnfolded_edge__edge10;
                                            do
                                            {
                                                if(candidate_TNBUnfolded_edge__edge10.lgspType.TypeID!=1) {
                                                    continue;
                                                }
                                                if((candidate_TNBUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                {
                                                    continue;
                                                }
                                                uint prev__candidate_TNBUnfolded_edge__edge10;
                                                prev__candidate_TNBUnfolded_edge__edge10 = candidate_TNBUnfolded_edge__edge10.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_TNBUnfolded_edge__edge10.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Implicit Target TNBUnfolded_node_n2 from TNBUnfolded_edge__edge10 
                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_n2 = candidate_TNBUnfolded_edge__edge10.lgspTarget;
                                                if(candidate_TNBUnfolded_node_n2.lgspType.TypeID!=4) {
                                                    candidate_TNBUnfolded_edge__edge10.lgspFlags = candidate_TNBUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge10;
                                                    continue;
                                                }
                                                uint prev__candidate_TNBUnfolded_node_n2;
                                                prev__candidate_TNBUnfolded_node_n2 = candidate_TNBUnfolded_node_n2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                candidate_TNBUnfolded_node_n2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                // Extend Outgoing TNBUnfolded_edge__edge2 from TNBUnfolded_node_c3 
                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge2 = candidate_TNBUnfolded_node_c3.lgspOuthead;
                                                if(head_candidate_TNBUnfolded_edge__edge2 != null)
                                                {
                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge2 = head_candidate_TNBUnfolded_edge__edge2;
                                                    do
                                                    {
                                                        if(candidate_TNBUnfolded_edge__edge2.lgspType.TypeID!=1) {
                                                            continue;
                                                        }
                                                        if((candidate_TNBUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNBUnfolded_edge__edge2;
                                                        prev__candidate_TNBUnfolded_edge__edge2 = candidate_TNBUnfolded_edge__edge2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNBUnfolded_edge__edge2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Implicit Target TNBUnfolded_node_c4 from TNBUnfolded_edge__edge2 
                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c4 = candidate_TNBUnfolded_edge__edge2.lgspTarget;
                                                        if(candidate_TNBUnfolded_node_c4.lgspType.TypeID!=1) {
                                                            candidate_TNBUnfolded_edge__edge2.lgspFlags = candidate_TNBUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge2;
                                                            continue;
                                                        }
                                                        if((candidate_TNBUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                        {
                                                            candidate_TNBUnfolded_edge__edge2.lgspFlags = candidate_TNBUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge2;
                                                            continue;
                                                        }
                                                        uint prev__candidate_TNBUnfolded_node_c4;
                                                        prev__candidate_TNBUnfolded_node_c4 = candidate_TNBUnfolded_node_c4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        candidate_TNBUnfolded_node_c4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                        // Extend Outgoing TNBUnfolded_edge__edge7 from TNBUnfolded_node_c3 
                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge7 = candidate_TNBUnfolded_node_c3.lgspOuthead;
                                                        if(head_candidate_TNBUnfolded_edge__edge7 != null)
                                                        {
                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge7 = head_candidate_TNBUnfolded_edge__edge7;
                                                            do
                                                            {
                                                                if(candidate_TNBUnfolded_edge__edge7.lgspType.TypeID!=1) {
                                                                    continue;
                                                                }
                                                                if(candidate_TNBUnfolded_edge__edge7.lgspTarget != candidate_TNBUnfolded_node_c4) {
                                                                    continue;
                                                                }
                                                                if((candidate_TNBUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                {
                                                                    continue;
                                                                }
                                                                uint prev__candidate_TNBUnfolded_edge__edge7;
                                                                prev__candidate_TNBUnfolded_edge__edge7 = candidate_TNBUnfolded_edge__edge7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                candidate_TNBUnfolded_edge__edge7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                // Extend Outgoing TNBUnfolded_edge__edge13 from TNBUnfolded_node_c3 
                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge13 = candidate_TNBUnfolded_node_c3.lgspOuthead;
                                                                if(head_candidate_TNBUnfolded_edge__edge13 != null)
                                                                {
                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge13 = head_candidate_TNBUnfolded_edge__edge13;
                                                                    do
                                                                    {
                                                                        if(candidate_TNBUnfolded_edge__edge13.lgspType.TypeID!=1) {
                                                                            continue;
                                                                        }
                                                                        if((candidate_TNBUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_TNBUnfolded_edge__edge13;
                                                                        prev__candidate_TNBUnfolded_edge__edge13 = candidate_TNBUnfolded_edge__edge13.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_TNBUnfolded_edge__edge13.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Implicit Target TNBUnfolded_node__node3 from TNBUnfolded_edge__edge13 
                                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node3 = candidate_TNBUnfolded_edge__edge13.lgspTarget;
                                                                        if(candidate_TNBUnfolded_node__node3.lgspType.TypeID!=2) {
                                                                            candidate_TNBUnfolded_edge__edge13.lgspFlags = candidate_TNBUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge13;
                                                                            continue;
                                                                        }
                                                                        if((candidate_TNBUnfolded_node__node3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                        {
                                                                            candidate_TNBUnfolded_edge__edge13.lgspFlags = candidate_TNBUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge13;
                                                                            continue;
                                                                        }
                                                                        uint prev__candidate_TNBUnfolded_node__node3;
                                                                        prev__candidate_TNBUnfolded_node__node3 = candidate_TNBUnfolded_node__node3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        candidate_TNBUnfolded_node__node3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                        // Extend Outgoing TNBUnfolded_edge__edge11 from TNBUnfolded_node_n2 
                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge11 = candidate_TNBUnfolded_node_n2.lgspOuthead;
                                                                        if(head_candidate_TNBUnfolded_edge__edge11 != null)
                                                                        {
                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge11 = head_candidate_TNBUnfolded_edge__edge11;
                                                                            do
                                                                            {
                                                                                if(candidate_TNBUnfolded_edge__edge11.lgspType.TypeID!=1) {
                                                                                    continue;
                                                                                }
                                                                                if((candidate_TNBUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                {
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_TNBUnfolded_edge__edge11;
                                                                                prev__candidate_TNBUnfolded_edge__edge11 = candidate_TNBUnfolded_edge__edge11.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_TNBUnfolded_edge__edge11.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Implicit Target TNBUnfolded_node__node1 from TNBUnfolded_edge__edge11 
                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node1 = candidate_TNBUnfolded_edge__edge11.lgspTarget;
                                                                                if(candidate_TNBUnfolded_node__node1.lgspType.TypeID!=3) {
                                                                                    candidate_TNBUnfolded_edge__edge11.lgspFlags = candidate_TNBUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge11;
                                                                                    continue;
                                                                                }
                                                                                uint prev__candidate_TNBUnfolded_node__node1;
                                                                                prev__candidate_TNBUnfolded_node__node1 = candidate_TNBUnfolded_node__node1.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                candidate_TNBUnfolded_node__node1.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                // Extend Outgoing TNBUnfolded_edge__edge12 from TNBUnfolded_node_n2 
                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge12 = candidate_TNBUnfolded_node_n2.lgspOuthead;
                                                                                if(head_candidate_TNBUnfolded_edge__edge12 != null)
                                                                                {
                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge12 = head_candidate_TNBUnfolded_edge__edge12;
                                                                                    do
                                                                                    {
                                                                                        if(candidate_TNBUnfolded_edge__edge12.lgspType.TypeID!=1) {
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_TNBUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_TNBUnfolded_edge__edge12;
                                                                                        prev__candidate_TNBUnfolded_edge__edge12 = candidate_TNBUnfolded_edge__edge12.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_TNBUnfolded_edge__edge12.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Implicit Target TNBUnfolded_node__node2 from TNBUnfolded_edge__edge12 
                                                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node2 = candidate_TNBUnfolded_edge__edge12.lgspTarget;
                                                                                        if(candidate_TNBUnfolded_node__node2.lgspType.TypeID!=3) {
                                                                                            candidate_TNBUnfolded_edge__edge12.lgspFlags = candidate_TNBUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge12;
                                                                                            continue;
                                                                                        }
                                                                                        if((candidate_TNBUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                        {
                                                                                            candidate_TNBUnfolded_edge__edge12.lgspFlags = candidate_TNBUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge12;
                                                                                            continue;
                                                                                        }
                                                                                        uint prev__candidate_TNBUnfolded_node__node2;
                                                                                        prev__candidate_TNBUnfolded_node__node2 = candidate_TNBUnfolded_node__node2.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        candidate_TNBUnfolded_node__node2.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                        // Extend Outgoing TNBUnfolded_edge__edge3 from TNBUnfolded_node_c4 
                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge3 = candidate_TNBUnfolded_node_c4.lgspOuthead;
                                                                                        if(head_candidate_TNBUnfolded_edge__edge3 != null)
                                                                                        {
                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge3 = head_candidate_TNBUnfolded_edge__edge3;
                                                                                            do
                                                                                            {
                                                                                                if(candidate_TNBUnfolded_edge__edge3.lgspType.TypeID!=1) {
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNBUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNBUnfolded_edge__edge3;
                                                                                                prev__candidate_TNBUnfolded_edge__edge3 = candidate_TNBUnfolded_edge__edge3.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNBUnfolded_edge__edge3.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Implicit Target TNBUnfolded_node_c5 from TNBUnfolded_edge__edge3 
                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c5 = candidate_TNBUnfolded_edge__edge3.lgspTarget;
                                                                                                if(candidate_TNBUnfolded_node_c5.lgspType.TypeID!=1) {
                                                                                                    candidate_TNBUnfolded_edge__edge3.lgspFlags = candidate_TNBUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge3;
                                                                                                    continue;
                                                                                                }
                                                                                                if((candidate_TNBUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                {
                                                                                                    candidate_TNBUnfolded_edge__edge3.lgspFlags = candidate_TNBUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge3;
                                                                                                    continue;
                                                                                                }
                                                                                                uint prev__candidate_TNBUnfolded_node_c5;
                                                                                                prev__candidate_TNBUnfolded_node_c5 = candidate_TNBUnfolded_node_c5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                candidate_TNBUnfolded_node_c5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                // Extend Outgoing TNBUnfolded_edge__edge14 from TNBUnfolded_node_c4 
                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge14 = candidate_TNBUnfolded_node_c4.lgspOuthead;
                                                                                                if(head_candidate_TNBUnfolded_edge__edge14 != null)
                                                                                                {
                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge14 = head_candidate_TNBUnfolded_edge__edge14;
                                                                                                    do
                                                                                                    {
                                                                                                        if(candidate_TNBUnfolded_edge__edge14.lgspType.TypeID!=1) {
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_TNBUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_TNBUnfolded_edge__edge14;
                                                                                                        prev__candidate_TNBUnfolded_edge__edge14 = candidate_TNBUnfolded_edge__edge14.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_TNBUnfolded_edge__edge14.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Implicit Target TNBUnfolded_node_n4 from TNBUnfolded_edge__edge14 
                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_n4 = candidate_TNBUnfolded_edge__edge14.lgspTarget;
                                                                                                        if(candidate_TNBUnfolded_node_n4.lgspType.TypeID!=4) {
                                                                                                            candidate_TNBUnfolded_edge__edge14.lgspFlags = candidate_TNBUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge14;
                                                                                                            continue;
                                                                                                        }
                                                                                                        if((candidate_TNBUnfolded_node_n4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                        {
                                                                                                            candidate_TNBUnfolded_edge__edge14.lgspFlags = candidate_TNBUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge14;
                                                                                                            continue;
                                                                                                        }
                                                                                                        uint prev__candidate_TNBUnfolded_node_n4;
                                                                                                        prev__candidate_TNBUnfolded_node_n4 = candidate_TNBUnfolded_node_n4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        candidate_TNBUnfolded_node_n4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                        // Extend Outgoing TNBUnfolded_edge__edge4 from TNBUnfolded_node_c5 
                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge4 = candidate_TNBUnfolded_node_c5.lgspOuthead;
                                                                                                        if(head_candidate_TNBUnfolded_edge__edge4 != null)
                                                                                                        {
                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge4 = head_candidate_TNBUnfolded_edge__edge4;
                                                                                                            do
                                                                                                            {
                                                                                                                if(candidate_TNBUnfolded_edge__edge4.lgspType.TypeID!=1) {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNBUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    continue;
                                                                                                                }
                                                                                                                uint prev__candidate_TNBUnfolded_edge__edge4;
                                                                                                                prev__candidate_TNBUnfolded_edge__edge4 = candidate_TNBUnfolded_edge__edge4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                candidate_TNBUnfolded_edge__edge4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                // Implicit Target TNBUnfolded_node_c6 from TNBUnfolded_edge__edge4 
                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_c6 = candidate_TNBUnfolded_edge__edge4.lgspTarget;
                                                                                                                if(candidate_TNBUnfolded_node_c6.lgspType.TypeID!=1) {
                                                                                                                    candidate_TNBUnfolded_edge__edge4.lgspFlags = candidate_TNBUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge4;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                if((candidate_TNBUnfolded_node_c6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                {
                                                                                                                    candidate_TNBUnfolded_edge__edge4.lgspFlags = candidate_TNBUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge4;
                                                                                                                    continue;
                                                                                                                }
                                                                                                                // Extend Outgoing TNBUnfolded_edge__edge8 from TNBUnfolded_node_c5 
                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge8 = candidate_TNBUnfolded_node_c5.lgspOuthead;
                                                                                                                if(head_candidate_TNBUnfolded_edge__edge8 != null)
                                                                                                                {
                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge8 = head_candidate_TNBUnfolded_edge__edge8;
                                                                                                                    do
                                                                                                                    {
                                                                                                                        if(candidate_TNBUnfolded_edge__edge8.lgspType.TypeID!=1) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if(candidate_TNBUnfolded_edge__edge8.lgspTarget != candidate_TNBUnfolded_node_c6) {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        if((candidate_TNBUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                        {
                                                                                                                            continue;
                                                                                                                        }
                                                                                                                        uint prev__candidate_TNBUnfolded_edge__edge8;
                                                                                                                        prev__candidate_TNBUnfolded_edge__edge8 = candidate_TNBUnfolded_edge__edge8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        candidate_TNBUnfolded_edge__edge8.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                        // Extend Outgoing TNBUnfolded_edge__edge17 from TNBUnfolded_node_c5 
                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge17 = candidate_TNBUnfolded_node_c5.lgspOuthead;
                                                                                                                        if(head_candidate_TNBUnfolded_edge__edge17 != null)
                                                                                                                        {
                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge17 = head_candidate_TNBUnfolded_edge__edge17;
                                                                                                                            do
                                                                                                                            {
                                                                                                                                if(candidate_TNBUnfolded_edge__edge17.lgspType.TypeID!=1) {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_TNBUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                uint prev__candidate_TNBUnfolded_edge__edge17;
                                                                                                                                prev__candidate_TNBUnfolded_edge__edge17 = candidate_TNBUnfolded_edge__edge17.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                candidate_TNBUnfolded_edge__edge17.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                // Implicit Target TNBUnfolded_node__node6 from TNBUnfolded_edge__edge17 
                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node6 = candidate_TNBUnfolded_edge__edge17.lgspTarget;
                                                                                                                                if(candidate_TNBUnfolded_node__node6.lgspType.TypeID!=2) {
                                                                                                                                    candidate_TNBUnfolded_edge__edge17.lgspFlags = candidate_TNBUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                if((candidate_TNBUnfolded_node__node6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                {
                                                                                                                                    candidate_TNBUnfolded_edge__edge17.lgspFlags = candidate_TNBUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge17;
                                                                                                                                    continue;
                                                                                                                                }
                                                                                                                                // Extend Outgoing TNBUnfolded_edge__edge15 from TNBUnfolded_node_n4 
                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge15 = candidate_TNBUnfolded_node_n4.lgspOuthead;
                                                                                                                                if(head_candidate_TNBUnfolded_edge__edge15 != null)
                                                                                                                                {
                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge15 = head_candidate_TNBUnfolded_edge__edge15;
                                                                                                                                    do
                                                                                                                                    {
                                                                                                                                        if(candidate_TNBUnfolded_edge__edge15.lgspType.TypeID!=1) {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNBUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_TNBUnfolded_edge__edge15;
                                                                                                                                        prev__candidate_TNBUnfolded_edge__edge15 = candidate_TNBUnfolded_edge__edge15.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_TNBUnfolded_edge__edge15.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Implicit Target TNBUnfolded_node__node4 from TNBUnfolded_edge__edge15 
                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node4 = candidate_TNBUnfolded_edge__edge15.lgspTarget;
                                                                                                                                        if(candidate_TNBUnfolded_node__node4.lgspType.TypeID!=3) {
                                                                                                                                            candidate_TNBUnfolded_edge__edge15.lgspFlags = candidate_TNBUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge15;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        if((candidate_TNBUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                        {
                                                                                                                                            candidate_TNBUnfolded_edge__edge15.lgspFlags = candidate_TNBUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge15;
                                                                                                                                            continue;
                                                                                                                                        }
                                                                                                                                        uint prev__candidate_TNBUnfolded_node__node4;
                                                                                                                                        prev__candidate_TNBUnfolded_node__node4 = candidate_TNBUnfolded_node__node4.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        candidate_TNBUnfolded_node__node4.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                        // Extend Outgoing TNBUnfolded_edge__edge16 from TNBUnfolded_node_n4 
                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge16 = candidate_TNBUnfolded_node_n4.lgspOuthead;
                                                                                                                                        if(head_candidate_TNBUnfolded_edge__edge16 != null)
                                                                                                                                        {
                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge16 = head_candidate_TNBUnfolded_edge__edge16;
                                                                                                                                            do
                                                                                                                                            {
                                                                                                                                                if(candidate_TNBUnfolded_edge__edge16.lgspType.TypeID!=1) {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_TNBUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_TNBUnfolded_edge__edge16;
                                                                                                                                                prev__candidate_TNBUnfolded_edge__edge16 = candidate_TNBUnfolded_edge__edge16.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_TNBUnfolded_edge__edge16.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Implicit Target TNBUnfolded_node__node5 from TNBUnfolded_edge__edge16 
                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node5 = candidate_TNBUnfolded_edge__edge16.lgspTarget;
                                                                                                                                                if(candidate_TNBUnfolded_node__node5.lgspType.TypeID!=3) {
                                                                                                                                                    candidate_TNBUnfolded_edge__edge16.lgspFlags = candidate_TNBUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge16;
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                if((candidate_TNBUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                {
                                                                                                                                                    candidate_TNBUnfolded_edge__edge16.lgspFlags = candidate_TNBUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge16;
                                                                                                                                                    continue;
                                                                                                                                                }
                                                                                                                                                uint prev__candidate_TNBUnfolded_node__node5;
                                                                                                                                                prev__candidate_TNBUnfolded_node__node5 = candidate_TNBUnfolded_node__node5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                candidate_TNBUnfolded_node__node5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                // Extend Outgoing TNBUnfolded_edge__edge5 from TNBUnfolded_node_c6 
                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge5 = candidate_TNBUnfolded_node_c6.lgspOuthead;
                                                                                                                                                if(head_candidate_TNBUnfolded_edge__edge5 != null)
                                                                                                                                                {
                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge5 = head_candidate_TNBUnfolded_edge__edge5;
                                                                                                                                                    do
                                                                                                                                                    {
                                                                                                                                                        if(candidate_TNBUnfolded_edge__edge5.lgspType.TypeID!=1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if(candidate_TNBUnfolded_edge__edge5.lgspTarget != candidate_TNBUnfolded_node_c1) {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        if((candidate_TNBUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                        {
                                                                                                                                                            continue;
                                                                                                                                                        }
                                                                                                                                                        uint prev__candidate_TNBUnfolded_edge__edge5;
                                                                                                                                                        prev__candidate_TNBUnfolded_edge__edge5 = candidate_TNBUnfolded_edge__edge5.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        candidate_TNBUnfolded_edge__edge5.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                        // Extend Outgoing TNBUnfolded_edge__edge18 from TNBUnfolded_node_c6 
                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge18 = candidate_TNBUnfolded_node_c6.lgspOuthead;
                                                                                                                                                        if(head_candidate_TNBUnfolded_edge__edge18 != null)
                                                                                                                                                        {
                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge18 = head_candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                            do
                                                                                                                                                            {
                                                                                                                                                                if(candidate_TNBUnfolded_edge__edge18.lgspType.TypeID!=1) {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_TNBUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                uint prev__candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                                prev__candidate_TNBUnfolded_edge__edge18 = candidate_TNBUnfolded_edge__edge18.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                candidate_TNBUnfolded_edge__edge18.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                // Implicit Target TNBUnfolded_node_n6 from TNBUnfolded_edge__edge18 
                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node_n6 = candidate_TNBUnfolded_edge__edge18.lgspTarget;
                                                                                                                                                                if(candidate_TNBUnfolded_node_n6.lgspType.TypeID!=4) {
                                                                                                                                                                    candidate_TNBUnfolded_edge__edge18.lgspFlags = candidate_TNBUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                if((candidate_TNBUnfolded_node_n6.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                {
                                                                                                                                                                    candidate_TNBUnfolded_edge__edge18.lgspFlags = candidate_TNBUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                                    continue;
                                                                                                                                                                }
                                                                                                                                                                // Extend Outgoing TNBUnfolded_edge__edge19 from TNBUnfolded_node_n6 
                                                                                                                                                                GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge19 = candidate_TNBUnfolded_node_n6.lgspOuthead;
                                                                                                                                                                if(head_candidate_TNBUnfolded_edge__edge19 != null)
                                                                                                                                                                {
                                                                                                                                                                    GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge19 = head_candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                    do
                                                                                                                                                                    {
                                                                                                                                                                        if(candidate_TNBUnfolded_edge__edge19.lgspType.TypeID!=1) {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_TNBUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                        prev__candidate_TNBUnfolded_edge__edge19 = candidate_TNBUnfolded_edge__edge19.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_TNBUnfolded_edge__edge19.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Implicit Target TNBUnfolded_node__node7 from TNBUnfolded_edge__edge19 
                                                                                                                                                                        GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node7 = candidate_TNBUnfolded_edge__edge19.lgspTarget;
                                                                                                                                                                        if(candidate_TNBUnfolded_node__node7.lgspType.TypeID!=3) {
                                                                                                                                                                            candidate_TNBUnfolded_edge__edge19.lgspFlags = candidate_TNBUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        if((candidate_TNBUnfolded_node__node7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                        {
                                                                                                                                                                            candidate_TNBUnfolded_edge__edge19.lgspFlags = candidate_TNBUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                            continue;
                                                                                                                                                                        }
                                                                                                                                                                        uint prev__candidate_TNBUnfolded_node__node7;
                                                                                                                                                                        prev__candidate_TNBUnfolded_node__node7 = candidate_TNBUnfolded_node__node7.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        candidate_TNBUnfolded_node__node7.lgspFlags |= (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace;
                                                                                                                                                                        // Extend Outgoing TNBUnfolded_edge__edge20 from TNBUnfolded_node_n6 
                                                                                                                                                                        GRGEN_LGSP.LGSPEdge head_candidate_TNBUnfolded_edge__edge20 = candidate_TNBUnfolded_node_n6.lgspOuthead;
                                                                                                                                                                        if(head_candidate_TNBUnfolded_edge__edge20 != null)
                                                                                                                                                                        {
                                                                                                                                                                            GRGEN_LGSP.LGSPEdge candidate_TNBUnfolded_edge__edge20 = head_candidate_TNBUnfolded_edge__edge20;
                                                                                                                                                                            do
                                                                                                                                                                            {
                                                                                                                                                                                if(candidate_TNBUnfolded_edge__edge20.lgspType.TypeID!=1) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_TNBUnfolded_edge__edge20.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                // Implicit Target TNBUnfolded_node__node8 from TNBUnfolded_edge__edge20 
                                                                                                                                                                                GRGEN_LGSP.LGSPNode candidate_TNBUnfolded_node__node8 = candidate_TNBUnfolded_edge__edge20.lgspTarget;
                                                                                                                                                                                if(candidate_TNBUnfolded_node__node8.lgspType.TypeID!=3) {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                if((candidate_TNBUnfolded_node__node8.lgspFlags & (uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) != 0)
                                                                                                                                                                                {
                                                                                                                                                                                    continue;
                                                                                                                                                                                }
                                                                                                                                                                                Rule_TNBUnfolded.Match_TNBUnfolded match = matches.GetNextUnfilledPosition();
                                                                                                                                                                                match._node_c1 = candidate_TNBUnfolded_node_c1;
                                                                                                                                                                                match._node_c2 = candidate_TNBUnfolded_node_c2;
                                                                                                                                                                                match._node_c3 = candidate_TNBUnfolded_node_c3;
                                                                                                                                                                                match._node_c4 = candidate_TNBUnfolded_node_c4;
                                                                                                                                                                                match._node_c5 = candidate_TNBUnfolded_node_c5;
                                                                                                                                                                                match._node_c6 = candidate_TNBUnfolded_node_c6;
                                                                                                                                                                                match._node__node0 = candidate_TNBUnfolded_node__node0;
                                                                                                                                                                                match._node_n2 = candidate_TNBUnfolded_node_n2;
                                                                                                                                                                                match._node__node1 = candidate_TNBUnfolded_node__node1;
                                                                                                                                                                                match._node__node2 = candidate_TNBUnfolded_node__node2;
                                                                                                                                                                                match._node__node3 = candidate_TNBUnfolded_node__node3;
                                                                                                                                                                                match._node_n4 = candidate_TNBUnfolded_node_n4;
                                                                                                                                                                                match._node__node4 = candidate_TNBUnfolded_node__node4;
                                                                                                                                                                                match._node__node5 = candidate_TNBUnfolded_node__node5;
                                                                                                                                                                                match._node__node6 = candidate_TNBUnfolded_node__node6;
                                                                                                                                                                                match._node_n6 = candidate_TNBUnfolded_node_n6;
                                                                                                                                                                                match._node__node7 = candidate_TNBUnfolded_node__node7;
                                                                                                                                                                                match._node__node8 = candidate_TNBUnfolded_node__node8;
                                                                                                                                                                                match._edge__edge0 = candidate_TNBUnfolded_edge__edge0;
                                                                                                                                                                                match._edge__edge1 = candidate_TNBUnfolded_edge__edge1;
                                                                                                                                                                                match._edge__edge2 = candidate_TNBUnfolded_edge__edge2;
                                                                                                                                                                                match._edge__edge3 = candidate_TNBUnfolded_edge__edge3;
                                                                                                                                                                                match._edge__edge4 = candidate_TNBUnfolded_edge__edge4;
                                                                                                                                                                                match._edge__edge5 = candidate_TNBUnfolded_edge__edge5;
                                                                                                                                                                                match._edge__edge6 = candidate_TNBUnfolded_edge__edge6;
                                                                                                                                                                                match._edge__edge7 = candidate_TNBUnfolded_edge__edge7;
                                                                                                                                                                                match._edge__edge8 = candidate_TNBUnfolded_edge__edge8;
                                                                                                                                                                                match._edge__edge9 = candidate_TNBUnfolded_edge__edge9;
                                                                                                                                                                                match._edge__edge10 = candidate_TNBUnfolded_edge__edge10;
                                                                                                                                                                                match._edge__edge11 = candidate_TNBUnfolded_edge__edge11;
                                                                                                                                                                                match._edge__edge12 = candidate_TNBUnfolded_edge__edge12;
                                                                                                                                                                                match._edge__edge13 = candidate_TNBUnfolded_edge__edge13;
                                                                                                                                                                                match._edge__edge14 = candidate_TNBUnfolded_edge__edge14;
                                                                                                                                                                                match._edge__edge15 = candidate_TNBUnfolded_edge__edge15;
                                                                                                                                                                                match._edge__edge16 = candidate_TNBUnfolded_edge__edge16;
                                                                                                                                                                                match._edge__edge17 = candidate_TNBUnfolded_edge__edge17;
                                                                                                                                                                                match._edge__edge18 = candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                                                match._edge__edge19 = candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                                match._edge__edge20 = candidate_TNBUnfolded_edge__edge20;
                                                                                                                                                                                matches.PositionWasFilledFixIt();
                                                                                                                                                                                // if enough matches were found, we leave
                                                                                                                                                                                if(maxMatches > 0 && matches.Count >= maxMatches)
                                                                                                                                                                                {
                                                                                                                                                                                    candidate_TNBUnfolded_node_n6.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge20);
                                                                                                                                                                                    candidate_TNBUnfolded_node_n6.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge19);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c6.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge18);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c6.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge5);
                                                                                                                                                                                    candidate_TNBUnfolded_node_n4.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge16);
                                                                                                                                                                                    candidate_TNBUnfolded_node_n4.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge15);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c5.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge17);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c5.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge8);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c5.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge4);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c4.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge14);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c4.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge3);
                                                                                                                                                                                    candidate_TNBUnfolded_node_n2.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge12);
                                                                                                                                                                                    candidate_TNBUnfolded_node_n2.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge11);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c3.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge13);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c3.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge7);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c3.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge2);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c2.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge10);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c2.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge1);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c1.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge9);
                                                                                                                                                                                    candidate_TNBUnfolded_node_c1.MoveOutHeadAfter(candidate_TNBUnfolded_edge__edge6);
                                                                                                                                                                                    graph.MoveHeadAfter(candidate_TNBUnfolded_edge__edge0);
                                                                                                                                                                                    candidate_TNBUnfolded_node__node7.lgspFlags = candidate_TNBUnfolded_node__node7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node7;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge19.lgspFlags = candidate_TNBUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge18.lgspFlags = candidate_TNBUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge5.lgspFlags = candidate_TNBUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge5;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node5.lgspFlags = candidate_TNBUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node5;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge16.lgspFlags = candidate_TNBUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge16;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node4.lgspFlags = candidate_TNBUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node4;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge15.lgspFlags = candidate_TNBUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge15;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge17.lgspFlags = candidate_TNBUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge17;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge8.lgspFlags = candidate_TNBUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge8;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge4.lgspFlags = candidate_TNBUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge4;
                                                                                                                                                                                    candidate_TNBUnfolded_node_n4.lgspFlags = candidate_TNBUnfolded_node_n4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_n4;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge14.lgspFlags = candidate_TNBUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge14;
                                                                                                                                                                                    candidate_TNBUnfolded_node_c5.lgspFlags = candidate_TNBUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c5;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge3.lgspFlags = candidate_TNBUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge3;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node2.lgspFlags = candidate_TNBUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node2;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge12.lgspFlags = candidate_TNBUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge12;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node1.lgspFlags = candidate_TNBUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node1;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge11.lgspFlags = candidate_TNBUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge11;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node3.lgspFlags = candidate_TNBUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node3;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge13.lgspFlags = candidate_TNBUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge13;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge7.lgspFlags = candidate_TNBUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge7;
                                                                                                                                                                                    candidate_TNBUnfolded_node_c4.lgspFlags = candidate_TNBUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c4;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge2.lgspFlags = candidate_TNBUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge2;
                                                                                                                                                                                    candidate_TNBUnfolded_node_n2.lgspFlags = candidate_TNBUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_n2;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge10.lgspFlags = candidate_TNBUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge10;
                                                                                                                                                                                    candidate_TNBUnfolded_node_c3.lgspFlags = candidate_TNBUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c3;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge1.lgspFlags = candidate_TNBUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge1;
                                                                                                                                                                                    candidate_TNBUnfolded_node__node0.lgspFlags = candidate_TNBUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node0;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge9.lgspFlags = candidate_TNBUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge9;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge6.lgspFlags = candidate_TNBUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge6;
                                                                                                                                                                                    candidate_TNBUnfolded_node_c2.lgspFlags = candidate_TNBUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c2;
                                                                                                                                                                                    candidate_TNBUnfolded_node_c1.lgspFlags = candidate_TNBUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c1;
                                                                                                                                                                                    candidate_TNBUnfolded_edge__edge0.lgspFlags = candidate_TNBUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge0;
                                                                                                                                                                                    return matches;
                                                                                                                                                                                }
                                                                                                                                                                            }
                                                                                                                                                                            while( (candidate_TNBUnfolded_edge__edge20 = candidate_TNBUnfolded_edge__edge20.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge20 );
                                                                                                                                                                        }
                                                                                                                                                                        candidate_TNBUnfolded_node__node7.lgspFlags = candidate_TNBUnfolded_node__node7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node7;
                                                                                                                                                                        candidate_TNBUnfolded_edge__edge19.lgspFlags = candidate_TNBUnfolded_edge__edge19.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge19;
                                                                                                                                                                    }
                                                                                                                                                                    while( (candidate_TNBUnfolded_edge__edge19 = candidate_TNBUnfolded_edge__edge19.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge19 );
                                                                                                                                                                }
                                                                                                                                                                candidate_TNBUnfolded_edge__edge18.lgspFlags = candidate_TNBUnfolded_edge__edge18.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge18;
                                                                                                                                                            }
                                                                                                                                                            while( (candidate_TNBUnfolded_edge__edge18 = candidate_TNBUnfolded_edge__edge18.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge18 );
                                                                                                                                                        }
                                                                                                                                                        candidate_TNBUnfolded_edge__edge5.lgspFlags = candidate_TNBUnfolded_edge__edge5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge5;
                                                                                                                                                    }
                                                                                                                                                    while( (candidate_TNBUnfolded_edge__edge5 = candidate_TNBUnfolded_edge__edge5.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge5 );
                                                                                                                                                }
                                                                                                                                                candidate_TNBUnfolded_node__node5.lgspFlags = candidate_TNBUnfolded_node__node5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node5;
                                                                                                                                                candidate_TNBUnfolded_edge__edge16.lgspFlags = candidate_TNBUnfolded_edge__edge16.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge16;
                                                                                                                                            }
                                                                                                                                            while( (candidate_TNBUnfolded_edge__edge16 = candidate_TNBUnfolded_edge__edge16.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge16 );
                                                                                                                                        }
                                                                                                                                        candidate_TNBUnfolded_node__node4.lgspFlags = candidate_TNBUnfolded_node__node4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node4;
                                                                                                                                        candidate_TNBUnfolded_edge__edge15.lgspFlags = candidate_TNBUnfolded_edge__edge15.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge15;
                                                                                                                                    }
                                                                                                                                    while( (candidate_TNBUnfolded_edge__edge15 = candidate_TNBUnfolded_edge__edge15.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge15 );
                                                                                                                                }
                                                                                                                                candidate_TNBUnfolded_edge__edge17.lgspFlags = candidate_TNBUnfolded_edge__edge17.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge17;
                                                                                                                            }
                                                                                                                            while( (candidate_TNBUnfolded_edge__edge17 = candidate_TNBUnfolded_edge__edge17.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge17 );
                                                                                                                        }
                                                                                                                        candidate_TNBUnfolded_edge__edge8.lgspFlags = candidate_TNBUnfolded_edge__edge8.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge8;
                                                                                                                    }
                                                                                                                    while( (candidate_TNBUnfolded_edge__edge8 = candidate_TNBUnfolded_edge__edge8.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge8 );
                                                                                                                }
                                                                                                                candidate_TNBUnfolded_edge__edge4.lgspFlags = candidate_TNBUnfolded_edge__edge4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge4;
                                                                                                            }
                                                                                                            while( (candidate_TNBUnfolded_edge__edge4 = candidate_TNBUnfolded_edge__edge4.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge4 );
                                                                                                        }
                                                                                                        candidate_TNBUnfolded_node_n4.lgspFlags = candidate_TNBUnfolded_node_n4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_n4;
                                                                                                        candidate_TNBUnfolded_edge__edge14.lgspFlags = candidate_TNBUnfolded_edge__edge14.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge14;
                                                                                                    }
                                                                                                    while( (candidate_TNBUnfolded_edge__edge14 = candidate_TNBUnfolded_edge__edge14.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge14 );
                                                                                                }
                                                                                                candidate_TNBUnfolded_node_c5.lgspFlags = candidate_TNBUnfolded_node_c5.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c5;
                                                                                                candidate_TNBUnfolded_edge__edge3.lgspFlags = candidate_TNBUnfolded_edge__edge3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge3;
                                                                                            }
                                                                                            while( (candidate_TNBUnfolded_edge__edge3 = candidate_TNBUnfolded_edge__edge3.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge3 );
                                                                                        }
                                                                                        candidate_TNBUnfolded_node__node2.lgspFlags = candidate_TNBUnfolded_node__node2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node2;
                                                                                        candidate_TNBUnfolded_edge__edge12.lgspFlags = candidate_TNBUnfolded_edge__edge12.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge12;
                                                                                    }
                                                                                    while( (candidate_TNBUnfolded_edge__edge12 = candidate_TNBUnfolded_edge__edge12.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge12 );
                                                                                }
                                                                                candidate_TNBUnfolded_node__node1.lgspFlags = candidate_TNBUnfolded_node__node1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node1;
                                                                                candidate_TNBUnfolded_edge__edge11.lgspFlags = candidate_TNBUnfolded_edge__edge11.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge11;
                                                                            }
                                                                            while( (candidate_TNBUnfolded_edge__edge11 = candidate_TNBUnfolded_edge__edge11.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge11 );
                                                                        }
                                                                        candidate_TNBUnfolded_node__node3.lgspFlags = candidate_TNBUnfolded_node__node3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node3;
                                                                        candidate_TNBUnfolded_edge__edge13.lgspFlags = candidate_TNBUnfolded_edge__edge13.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge13;
                                                                    }
                                                                    while( (candidate_TNBUnfolded_edge__edge13 = candidate_TNBUnfolded_edge__edge13.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge13 );
                                                                }
                                                                candidate_TNBUnfolded_edge__edge7.lgspFlags = candidate_TNBUnfolded_edge__edge7.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge7;
                                                            }
                                                            while( (candidate_TNBUnfolded_edge__edge7 = candidate_TNBUnfolded_edge__edge7.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge7 );
                                                        }
                                                        candidate_TNBUnfolded_node_c4.lgspFlags = candidate_TNBUnfolded_node_c4.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c4;
                                                        candidate_TNBUnfolded_edge__edge2.lgspFlags = candidate_TNBUnfolded_edge__edge2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge2;
                                                    }
                                                    while( (candidate_TNBUnfolded_edge__edge2 = candidate_TNBUnfolded_edge__edge2.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge2 );
                                                }
                                                candidate_TNBUnfolded_node_n2.lgspFlags = candidate_TNBUnfolded_node_n2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_n2;
                                                candidate_TNBUnfolded_edge__edge10.lgspFlags = candidate_TNBUnfolded_edge__edge10.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge10;
                                            }
                                            while( (candidate_TNBUnfolded_edge__edge10 = candidate_TNBUnfolded_edge__edge10.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge10 );
                                        }
                                        candidate_TNBUnfolded_node_c3.lgspFlags = candidate_TNBUnfolded_node_c3.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c3;
                                        candidate_TNBUnfolded_edge__edge1.lgspFlags = candidate_TNBUnfolded_edge__edge1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge1;
                                    }
                                    while( (candidate_TNBUnfolded_edge__edge1 = candidate_TNBUnfolded_edge__edge1.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge1 );
                                }
                                candidate_TNBUnfolded_node__node0.lgspFlags = candidate_TNBUnfolded_node__node0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node__node0;
                                candidate_TNBUnfolded_edge__edge9.lgspFlags = candidate_TNBUnfolded_edge__edge9.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge9;
                            }
                            while( (candidate_TNBUnfolded_edge__edge9 = candidate_TNBUnfolded_edge__edge9.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge9 );
                        }
                        candidate_TNBUnfolded_edge__edge6.lgspFlags = candidate_TNBUnfolded_edge__edge6.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge6;
                    }
                    while( (candidate_TNBUnfolded_edge__edge6 = candidate_TNBUnfolded_edge__edge6.lgspOutNext) != head_candidate_TNBUnfolded_edge__edge6 );
                }
                candidate_TNBUnfolded_node_c2.lgspFlags = candidate_TNBUnfolded_node_c2.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c2;
                candidate_TNBUnfolded_node_c1.lgspFlags = candidate_TNBUnfolded_node_c1.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_node_c1;
                candidate_TNBUnfolded_edge__edge0.lgspFlags = candidate_TNBUnfolded_edge__edge0.lgspFlags & ~((uint)GRGEN_LGSP.LGSPElemFlags.IS_MATCHED << isoSpace) | prev__candidate_TNBUnfolded_edge__edge0;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_TNBUnfolded.IMatch_TNBUnfolded match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches)
        {
            foreach(Rule_TNBUnfolded.IMatch_TNBUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_TNBUnfolded.IMatch_TNBUnfolded match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_TNBUnfolded.IMatch_TNBUnfolded)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_TNBUnfolded.IMatch_TNBUnfolded>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_createTNB
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createTNB.IMatch_createTNB match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_createTNB : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_createTNB
    {
        public Action_createTNB()
            : base(Rule_createTNB.Instance.patternGraph)
        {
            _rulePattern = Rule_createTNB.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_createTNB _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "createTNB"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_createTNB.Match_createTNB, Rule_createTNB.IMatch_createTNB> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_createTNB Instance { get { return instance; } set { instance = value; } }
        private static Action_createTNB instance = new Action_createTNB();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_createTNB.Match_createTNB, Rule_createTNB.IMatch_createTNB>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Rule_createTNB.Match_createTNB match = matches.GetNextUnfilledPosition();
            matches.PositionWasFilledFixIt();
            // if enough matches were found, we leave
            if(maxMatches > 0 && matches.Count >= maxMatches)
            {
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createTNB.IMatch_createTNB match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches)
        {
            foreach(Rule_createTNB.IMatch_createTNB match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_createTNB.IMatch_createTNB match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_createTNB.IMatch_createTNB)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_createTNB.IMatch_createTNB>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_keepBenzolRingPattern
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_keepBenzolRingPattern : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_keepBenzolRingPattern
    {
        public Action_keepBenzolRingPattern()
            : base(Rule_keepBenzolRingPattern.Instance.patternGraph)
        {
            _rulePattern = Rule_keepBenzolRingPattern.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_keepBenzolRingPattern _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "keepBenzolRingPattern"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_keepBenzolRingPattern.Match_keepBenzolRingPattern, Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_keepBenzolRingPattern Instance { get { return instance; } set { instance = value; } }
        private static Action_keepBenzolRingPattern instance = new Action_keepBenzolRingPattern();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_keepBenzolRingPattern.Match_keepBenzolRingPattern, Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Push subpattern matching task for br
            PatternAction_BenzolRing taskFor_br = PatternAction_BenzolRing.getNewTask(actionEnv, openTasks);
            taskFor_br.searchPatternpath = false;
            taskFor_br.matchOfNestingPattern = null;
            taskFor_br.lastMatchAtPreviousNestingLevel = null;
            openTasks.Push(taskFor_br);
            // Match subpatterns 
            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
            // Pop subpattern matching task for br
            openTasks.Pop();
            PatternAction_BenzolRing.releaseTask(taskFor_br);
            // Check whether subpatterns were found 
            if(matchesList.Count>0) {
                // subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it
                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                {
                    Rule_keepBenzolRingPattern.Match_keepBenzolRingPattern match = matches.GetNextUnfilledPosition();
                    match._br = (@Pattern_BenzolRing.Match_BenzolRing)currentFoundPartialMatch.Pop();
                    match._br._matchOfEnclosingPattern = match;
                    matches.PositionWasFilledFixIt();
                }
                matchesList.Clear();
                // if enough matches were found, we leave
                if(maxMatches > 0 && matches.Count >= maxMatches)
                {
                    return matches;
                }
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches)
        {
            foreach(Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_keepBenzolRingPattern.IMatch_keepBenzolRingPattern>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_createBenzolRingPattern
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_createBenzolRingPattern : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_createBenzolRingPattern
    {
        public Action_createBenzolRingPattern()
            : base(Rule_createBenzolRingPattern.Instance.patternGraph)
        {
            _rulePattern = Rule_createBenzolRingPattern.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_createBenzolRingPattern _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "createBenzolRingPattern"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_createBenzolRingPattern.Match_createBenzolRingPattern, Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_createBenzolRingPattern Instance { get { return instance; } set { instance = value; } }
        private static Action_createBenzolRingPattern instance = new Action_createBenzolRingPattern();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_createBenzolRingPattern.Match_createBenzolRingPattern, Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Rule_createBenzolRingPattern.Match_createBenzolRingPattern match = matches.GetNextUnfilledPosition();
            matches.PositionWasFilledFixIt();
            // if enough matches were found, we leave
            if(maxMatches > 0 && matches.Count >= maxMatches)
            {
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches)
        {
            foreach(Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_createBenzolRingPattern.IMatch_createBenzolRingPattern>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_deleteBenzolRingPattern
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_deleteBenzolRingPattern : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_deleteBenzolRingPattern
    {
        public Action_deleteBenzolRingPattern()
            : base(Rule_deleteBenzolRingPattern.Instance.patternGraph)
        {
            _rulePattern = Rule_deleteBenzolRingPattern.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_deleteBenzolRingPattern _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "deleteBenzolRingPattern"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_deleteBenzolRingPattern.Match_deleteBenzolRingPattern, Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_deleteBenzolRingPattern Instance { get { return instance; } set { instance = value; } }
        private static Action_deleteBenzolRingPattern instance = new Action_deleteBenzolRingPattern();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_deleteBenzolRingPattern.Match_deleteBenzolRingPattern, Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Push subpattern matching task for _sub0
            PatternAction_BenzolRing taskFor__sub0 = PatternAction_BenzolRing.getNewTask(actionEnv, openTasks);
            taskFor__sub0.searchPatternpath = false;
            taskFor__sub0.matchOfNestingPattern = null;
            taskFor__sub0.lastMatchAtPreviousNestingLevel = null;
            openTasks.Push(taskFor__sub0);
            // Match subpatterns 
            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
            // Pop subpattern matching task for _sub0
            openTasks.Pop();
            PatternAction_BenzolRing.releaseTask(taskFor__sub0);
            // Check whether subpatterns were found 
            if(matchesList.Count>0) {
                // subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it
                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                {
                    Rule_deleteBenzolRingPattern.Match_deleteBenzolRingPattern match = matches.GetNextUnfilledPosition();
                    match.__sub0 = (@Pattern_BenzolRing.Match_BenzolRing)currentFoundPartialMatch.Pop();
                    match.__sub0._matchOfEnclosingPattern = match;
                    matches.PositionWasFilledFixIt();
                }
                matchesList.Clear();
                // if enough matches were found, we leave
                if(maxMatches > 0 && matches.Count >= maxMatches)
                {
                    return matches;
                }
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches)
        {
            foreach(Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_deleteBenzolRingPattern.IMatch_deleteBenzolRingPattern>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    
    /// <summary>
    /// An object representing an executable rule - same as IAction, but with exact types and distinct parameters.
    /// </summary>
    public interface IAction_deleteInModifyBenzolRingPattern
    {
        /// <summary> same as IAction.Match, but with exact types and distinct parameters. </summary>
        GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> same as IAction.Modify, but with exact types and distinct parameters. </summary>
        void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern match);
        /// <summary> same as IAction.ModifyAll, but with exact types and distinct parameters. </summary>
        void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches);
        /// <summary> same as IAction.Apply, but with exact types and distinct parameters; returns true if applied </summary>
        bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyAll, but with exact types and distinct parameters; returns the number of matches found/applied. </summary>
        int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyStar, but with exact types and distinct parameters. </summary>
        bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyPlus, but with exact types and distinct parameters. </summary>
        bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv);
        /// <summary> same as IAction.ApplyMinMax, but with exact types and distinct parameters. </summary>
        bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max);
    }
    
    public class Action_deleteInModifyBenzolRingPattern : GRGEN_LGSP.LGSPAction, GRGEN_LIBGR.IAction, IAction_deleteInModifyBenzolRingPattern
    {
        public Action_deleteInModifyBenzolRingPattern()
            : base(Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph)
        {
            _rulePattern = Rule_deleteInModifyBenzolRingPattern.Instance;
            DynamicMatch = myMatch;
        }

        public Rule_deleteInModifyBenzolRingPattern _rulePattern;
        public override GRGEN_LGSP.LGSPRulePattern rulePattern { get { return _rulePattern; } }
        public override string Name { get { return "deleteInModifyBenzolRingPattern"; } }
        [ThreadStatic] private static GRGEN_LGSP.LGSPMatchesList<Rule_deleteInModifyBenzolRingPattern.Match_deleteInModifyBenzolRingPattern, Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches;

        // Performance optimization: saves us usage of new for the return array or the return arrays. In the object/string-style modify/apply methods of the action interface implementation.
        [ThreadStatic] public static object[] ReturnArray;
        [ThreadStatic] public static List<object[]> ReturnArrayListForAll;
        [ThreadStatic] public static List<object[]> AvailableReturnArrays;
        public static Action_deleteInModifyBenzolRingPattern Instance { get { return instance; } set { instance = value; } }
        private static Action_deleteInModifyBenzolRingPattern instance = new Action_deleteInModifyBenzolRingPattern();
        
        public GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> myMatch(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches)
        {
            GRGEN_LGSP.LGSPGraph graph = actionEnv.graph;
            if(matches == null)
                matches = new GRGEN_LGSP.LGSPMatchesList<Rule_deleteInModifyBenzolRingPattern.Match_deleteInModifyBenzolRingPattern, Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern>(this);
            matches.Clear();
            if(ReturnArray == null)
                ReturnArray = new object[0];
            int isoSpace = 0;
            Stack<GRGEN_LGSP.LGSPSubpatternAction> openTasks = new Stack<GRGEN_LGSP.LGSPSubpatternAction>();
            List<Stack<GRGEN_LIBGR.IMatch>> foundPartialMatches = new List<Stack<GRGEN_LIBGR.IMatch>>();
            List<Stack<GRGEN_LIBGR.IMatch>> matchesList = foundPartialMatches;
            // Push subpattern matching task for br
            PatternAction_BenzolRing taskFor_br = PatternAction_BenzolRing.getNewTask(actionEnv, openTasks);
            taskFor_br.searchPatternpath = false;
            taskFor_br.matchOfNestingPattern = null;
            taskFor_br.lastMatchAtPreviousNestingLevel = null;
            openTasks.Push(taskFor_br);
            // Match subpatterns 
            openTasks.Peek().myMatch(matchesList, maxMatches - foundPartialMatches.Count, isoSpace);
            // Pop subpattern matching task for br
            openTasks.Pop();
            PatternAction_BenzolRing.releaseTask(taskFor_br);
            // Check whether subpatterns were found 
            if(matchesList.Count>0) {
                // subpatterns/alternatives were found, extend the partial matches by our local match object, becoming a complete match object and save it
                foreach(Stack<GRGEN_LIBGR.IMatch> currentFoundPartialMatch in matchesList)
                {
                    Rule_deleteInModifyBenzolRingPattern.Match_deleteInModifyBenzolRingPattern match = matches.GetNextUnfilledPosition();
                    match._br = (@Pattern_BenzolRing.Match_BenzolRing)currentFoundPartialMatch.Pop();
                    match._br._matchOfEnclosingPattern = match;
                    matches.PositionWasFilledFixIt();
                }
                matchesList.Clear();
                // if enough matches were found, we leave
                if(maxMatches > 0 && matches.Count >= maxMatches)
                {
                    return matches;
                }
                return matches;
            }
            return matches;
        }
        /// <summary> Type of the matcher method (with parameters processing environment containing host graph, maximum number of matches to search for (zero=unlimited), and rule parameters; returning found matches). </summary>
        public delegate GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> MatchInvoker(GRGEN_LGSP.LGSPActionExecutionEnvironment actionEnv, int maxMatches);
        /// <summary> A delegate pointing to the current matcher program for this rule. </summary>
        public MatchInvoker DynamicMatch;
        /// <summary> The RulePattern object from which this LGSPAction object has been created. </summary>
        public GRGEN_LIBGR.IRulePattern RulePattern { get { return _rulePattern; } }
        public GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches)
        {
            return DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
        }
        public void Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern match)
        {
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
        }
        public void ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches)
        {
            foreach(Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
        }
        public bool Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            return true;
        }
        public int ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, maxMatches);
            if(matches.Count <= 0) return 0;
            foreach(Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern match in matches)
            {
                
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, match);
            }
            return matches.Count;
        }
        public bool ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches;
            
            while(true)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return true;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
        }
        public bool ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            if(matches.Count <= 0) return false;
            
            do
            {
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
            }
            while(matches.Count > 0) ;
            return true;
        }
        public bool ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern> matches;
            
            for(int i = 0; i < max; i++)
            {
                matches = DynamicMatch((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, 1);
                if(matches.Count <= 0) return i >= min;
                _rulePattern.Modify((GRGEN_LGSP.LGSPActionExecutionEnvironment)actionEnv, matches.First);
            }
            return true;
        }
        // implementation of inexact action interface by delegation to exact action interface
        public GRGEN_LIBGR.IMatches Match(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int maxMatches, object[] parameters)
        {
            return Match(actionEnv, maxMatches);
        }
        public object[] Modify(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatch match)
        {
            
            Modify(actionEnv, (Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern)match);
            return ReturnArray;
        }
        public List<object[]> ModifyAll(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches)
        {
            ModifyAll(actionEnv, (GRGEN_LIBGR.IMatchesExact<Rule_deleteInModifyBenzolRingPattern.IMatch_deleteInModifyBenzolRingPattern>)matches);
            while(AvailableReturnArrays.Count < matches.Count) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matches.Count; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        object[] GRGEN_LIBGR.IAction.Apply(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            
            if(Apply(actionEnv)) {
                return ReturnArray;
            }
            else return null;
        }
        public List<object[]> Reserve(int numReturns)
        {
            if(AvailableReturnArrays == null)
                AvailableReturnArrays = new List<object[]>();
            while(AvailableReturnArrays.Count < numReturns) AvailableReturnArrays.Add(new object[0]);
            if(ReturnArrayListForAll == null)
                ReturnArrayListForAll = new List<object[]>();
            ReturnArrayListForAll.Clear();
            for(int i=0; i<numReturns; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        List<object[]> GRGEN_LIBGR.IAction.ApplyAll(int maxMatches, GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            int matchesCount = ApplyAll(maxMatches, actionEnv);
            while(AvailableReturnArrays.Count < matchesCount) AvailableReturnArrays.Add(new object[0]);
            ReturnArrayListForAll.Clear();
            for(int i=0; i<matchesCount; ++i)
            {
                ReturnArrayListForAll.Add(AvailableReturnArrays[i]);
            }
            return ReturnArrayListForAll;
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyStar(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyStar(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyPlus(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, params object[] parameters)
        {
            return ApplyPlus(actionEnv);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        bool GRGEN_LIBGR.IAction.ApplyMinMax(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, int min, int max, params object[] parameters)
        {
            return ApplyMinMax(actionEnv, min, max);
        }
        public void Filter(GRGEN_LIBGR.IActionExecutionEnvironment actionEnv, GRGEN_LIBGR.IMatches matches, GRGEN_LIBGR.FilterCallWithArguments filter)
        {
            switch(filter.PackagePrefixedName) {
                case "keepFirst": matches.Filter_keepFirst((System.Int32)(filter.Arguments[0])); break;
                case "keepLast": matches.Filter_keepLast((System.Int32)(filter.Arguments[0])); break;
                case "keepFirstFraction": matches.Filter_keepFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "keepLastFraction": matches.Filter_keepLastFraction((System.Double)(filter.Arguments[0])); break;
                case "removeFirst": matches.Filter_removeFirst((System.Int32)(filter.Arguments[0])); break;
                case "removeLast": matches.Filter_removeLast((System.Int32)(filter.Arguments[0])); break;
                case "removeFirstFraction": matches.Filter_removeFirstFraction((System.Double)(filter.Arguments[0])); break;
                case "removeLastFraction": matches.Filter_removeLastFraction((System.Double)(filter.Arguments[0])); break;
                default: throw new Exception("Unknown filter name " + filter.PackagePrefixedName + "!");
            }
        }
    }
    

    // class which instantiates and stores all the compiled actions of the module,
    // dynamic regeneration and compilation causes the old action to be overwritten by the new one
    // matching/rule patterns are analyzed at creation time here, once, so that later regeneration runs have all the information available
    public class TNTActions : GRGEN_LGSP.LGSPActions
    {
        public TNTActions(GRGEN_LGSP.LGSPGraph lgspgraph, string modelAsmName, string actionsAsmName)
            : base(lgspgraph, modelAsmName, actionsAsmName)
        {
            InitActions();
        }

        public TNTActions(GRGEN_LGSP.LGSPGraph lgspgraph)
            : base(lgspgraph)
        {
            InitActions();
        }

        private void InitActions()
        {
            packages = new string[0];
            GRGEN_LGSP.PatternGraphAnalyzer analyzer = new GRGEN_LGSP.PatternGraphAnalyzer();
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_BenzolRing.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_Oxygen.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_Hydrogen.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_Methyl.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_Nitro.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_TriNitro.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_BenzolRing.Instance);
            actions.Add("BenzolRing", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_BenzolRing.Instance);
            @BenzolRing = GRGEN_ACTIONS.Action_BenzolRing.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance);
            actions.Add("TNTTotallyFolded", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNTTotallyFolded.Instance);
            @TNTTotallyFolded = GRGEN_ACTIONS.Action_TNTTotallyFolded.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNTChain.Instance);
            actions.Add("TNTChain", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNTChain.Instance);
            @TNTChain = GRGEN_ACTIONS.Action_TNTChain.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_ToluolCore.Instance);
            actions.Add("ToluolCore", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_ToluolCore.Instance);
            @ToluolCore = GRGEN_ACTIONS.Action_ToluolCore.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance);
            actions.Add("ToluolCoreNotC6Nitro", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_ToluolCoreNotC6Nitro.Instance);
            @ToluolCoreNotC6Nitro = GRGEN_ACTIONS.Action_ToluolCoreNotC6Nitro.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_Toluol.Instance);
            actions.Add("Toluol", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_Toluol.Instance);
            @Toluol = GRGEN_ACTIONS.Action_Toluol.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNT.Instance);
            actions.Add("TNT", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNT.Instance);
            @TNT = GRGEN_ACTIONS.Action_TNT.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance);
            actions.Add("TNTUnfolded", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNTUnfolded.Instance);
            @TNTUnfolded = GRGEN_ACTIONS.Action_TNTUnfolded.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_createTNT.Instance);
            actions.Add("createTNT", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_createTNT.Instance);
            @createTNT = GRGEN_ACTIONS.Action_createTNT.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_DNT.Instance);
            actions.Add("DNT", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_DNT.Instance);
            @DNT = GRGEN_ACTIONS.Action_DNT.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance);
            actions.Add("DNTUnfolded", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_DNTUnfolded.Instance);
            @DNTUnfolded = GRGEN_ACTIONS.Action_DNTUnfolded.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_createDNT.Instance);
            actions.Add("createDNT", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_createDNT.Instance);
            @createDNT = GRGEN_ACTIONS.Action_createDNT.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNB.Instance);
            actions.Add("TNB", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNB.Instance);
            @TNB = GRGEN_ACTIONS.Action_TNB.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance);
            actions.Add("TNBUnfolded", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_TNBUnfolded.Instance);
            @TNBUnfolded = GRGEN_ACTIONS.Action_TNBUnfolded.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_createTNB.Instance);
            actions.Add("createTNB", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_createTNB.Instance);
            @createTNB = GRGEN_ACTIONS.Action_createTNB.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance);
            actions.Add("keepBenzolRingPattern", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_keepBenzolRingPattern.Instance);
            @keepBenzolRingPattern = GRGEN_ACTIONS.Action_keepBenzolRingPattern.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance);
            actions.Add("createBenzolRingPattern", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_createBenzolRingPattern.Instance);
            @createBenzolRingPattern = GRGEN_ACTIONS.Action_createBenzolRingPattern.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance);
            actions.Add("deleteBenzolRingPattern", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_deleteBenzolRingPattern.Instance);
            @deleteBenzolRingPattern = GRGEN_ACTIONS.Action_deleteBenzolRingPattern.Instance;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph, false);
            GRGEN_LGSP.PatternGraphAnalyzer.PrepareInline(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph);
            analyzer.RememberMatchingPattern(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance);
            actions.Add("deleteInModifyBenzolRingPattern", (GRGEN_LGSP.LGSPAction) GRGEN_ACTIONS.Action_deleteInModifyBenzolRingPattern.Instance);
            @deleteInModifyBenzolRingPattern = GRGEN_ACTIONS.Action_deleteInModifyBenzolRingPattern.Instance;
            analyzer.ComputeInterPatternRelations(false);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph);
            analyzer.AnalyzeWithInterPatternRelationsKnown(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph);
            analyzer.InlineSubpatternUsages(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph);
            GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph.maxIsoSpace = 0;
            GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph.maxIsoSpace = 0;
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRing.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC123456Exposed.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC1Exposed.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_BenzolRingC1ExposedNotC6Nitro.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Oxygen.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Hydrogen.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Hydroxyl.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Methyl.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_Nitro.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_TriNitro.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Pattern_ToluolCoreThenTriNitro.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_BenzolRing.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTTotallyFolded.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTChain.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_ToluolCore.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_Toluol.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNT.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNTUnfolded.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createTNT.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_DNT.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_DNTUnfolded.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createDNT.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNB.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_TNBUnfolded.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createTNB.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_keepBenzolRingPattern.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_createBenzolRingPattern.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_deleteBenzolRingPattern.Instance.patternGraph, true);
            analyzer.AnalyzeNestingOfPatternGraph(GRGEN_ACTIONS.Rule_deleteInModifyBenzolRingPattern.Instance.patternGraph, true);
            analyzer.ComputeInterPatternRelations(true);
        }
        
        public GRGEN_ACTIONS.IAction_BenzolRing @BenzolRing;
        public GRGEN_ACTIONS.IAction_TNTTotallyFolded @TNTTotallyFolded;
        public GRGEN_ACTIONS.IAction_TNTChain @TNTChain;
        public GRGEN_ACTIONS.IAction_ToluolCore @ToluolCore;
        public GRGEN_ACTIONS.IAction_ToluolCoreNotC6Nitro @ToluolCoreNotC6Nitro;
        public GRGEN_ACTIONS.IAction_Toluol @Toluol;
        public GRGEN_ACTIONS.IAction_TNT @TNT;
        public GRGEN_ACTIONS.IAction_TNTUnfolded @TNTUnfolded;
        public GRGEN_ACTIONS.IAction_createTNT @createTNT;
        public GRGEN_ACTIONS.IAction_DNT @DNT;
        public GRGEN_ACTIONS.IAction_DNTUnfolded @DNTUnfolded;
        public GRGEN_ACTIONS.IAction_createDNT @createDNT;
        public GRGEN_ACTIONS.IAction_TNB @TNB;
        public GRGEN_ACTIONS.IAction_TNBUnfolded @TNBUnfolded;
        public GRGEN_ACTIONS.IAction_createTNB @createTNB;
        public GRGEN_ACTIONS.IAction_keepBenzolRingPattern @keepBenzolRingPattern;
        public GRGEN_ACTIONS.IAction_createBenzolRingPattern @createBenzolRingPattern;
        public GRGEN_ACTIONS.IAction_deleteBenzolRingPattern @deleteBenzolRingPattern;
        public GRGEN_ACTIONS.IAction_deleteInModifyBenzolRingPattern @deleteInModifyBenzolRingPattern;
        
        
        public override string[] Packages { get { return packages; } }
        private string[] packages;
        
        public override string Name { get { return "TNTActions"; } }
        public override string StatisticsPath { get { return null; } }
        public override bool LazyNIC { get { return false; } }
        public override bool InlineIndependents { get { return true; } }
        public override bool Profile { get { return false; } }

        public override IList ArrayOrderAscendingBy(IList array, string member)
        {
            if(array.Count == 0)
                return array;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return null;
            if(array[0] == null)
                return null;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return null;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "Toluol":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                default:
                    return null;
                }
            }
        }

        public override IList ArrayOrderDescendingBy(IList array, string member)
        {
            if(array.Count == 0)
                return array;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return null;
            if(array[0] == null)
                return null;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return null;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "Toluol":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                default:
                    return null;
                }
            }
        }

        public override IList ArrayGroupBy(IList array, string member)
        {
            if(array.Count == 0)
                return array;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return null;
            if(array[0] == null)
                return null;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return null;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_groupBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_groupBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTChain_groupBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTChain_groupBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTChain_groupBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTChain_groupBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTChain_groupBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_groupBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_groupBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_groupBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_Toluol_groupBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_Toluol_groupBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_Toluol_groupBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_Toluol_groupBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_Toluol_groupBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_groupBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNT_groupBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNT_groupBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNT_groupBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNT_groupBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNT_groupBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNT_groupBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNT_groupBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNT_groupBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNT_groupBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNT_groupBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNT_groupBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNT_groupBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNT_groupBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNT_groupBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_groupBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_groupBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_groupBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_DNT_groupBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_DNT_groupBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_DNT_groupBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_DNT_groupBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_DNT_groupBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_DNT_groupBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_DNT_groupBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_DNT_groupBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_DNT_groupBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_DNT_groupBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_DNT_groupBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_DNT_groupBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_DNT_groupBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_DNT_groupBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_groupBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_groupBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_groupBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNB_groupBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNB_groupBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNB_groupBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNB_groupBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNB_groupBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNB_groupBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNB_groupBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNB_groupBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNB_groupBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNB_groupBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNB_groupBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNB_groupBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNB_groupBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNB_groupBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_groupBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_groupBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                default:
                    return null;
                }
            }
        }

        public override IList ArrayKeepOneForEach(IList array, string member)
        {
            if(array.Count == 0)
                return array;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return null;
            if(array[0] == null)
                return null;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return null;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTChain_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_Toluol_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNT_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNT_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_keepOneForEachBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_DNT_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_DNT_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_keepOneForEachBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNB_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNB_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_keepOneForEachBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array));
                    default:
                        return null;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return null;
                    }
                default:
                    return null;
                }
            }
        }

        public override int ArrayIndexOfBy(IList array, string member, object value)
        {
            if(array.Count == 0)
                return -1;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return -1;
            if(array[0] == null)
                return -1;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return -1;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_indexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_indexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_indexOfBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_Toluol_indexOfBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_Toluol_indexOfBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_Toluol_indexOfBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_Toluol_indexOfBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_Toluol_indexOfBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNT_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNT_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNT_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNT_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNT_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNT_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNT_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNT_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNT_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNT_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNT_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNT_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNT_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNT_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_indexOfBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_DNT_indexOfBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_DNT_indexOfBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_DNT_indexOfBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_DNT_indexOfBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_DNT_indexOfBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_DNT_indexOfBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_DNT_indexOfBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_DNT_indexOfBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_DNT_indexOfBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_DNT_indexOfBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_DNT_indexOfBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_DNT_indexOfBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_DNT_indexOfBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_DNT_indexOfBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNB_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNB_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNB_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNB_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNB_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNB_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNB_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNB_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNB_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNB_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNB_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNB_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNB_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNB_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                default:
                    return -1;
                }
            }
        }

        public override int ArrayIndexOfBy(IList array, string member, object value, int startIndex)
        {
            if(array.Count == 0)
                return -1;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return -1;
            if(array[0] == null)
                return -1;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return -1;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTChain_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_indexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_indexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_indexOfBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_Toluol_indexOfBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_Toluol_indexOfBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_Toluol_indexOfBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_Toluol_indexOfBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_Toluol_indexOfBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNT_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNT_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNT_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNT_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNT_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNT_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNT_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNT_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNT_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNT_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNT_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNT_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNT_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNT_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_indexOfBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_indexOfBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_DNT_indexOfBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_DNT_indexOfBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_DNT_indexOfBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_DNT_indexOfBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_DNT_indexOfBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_DNT_indexOfBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_DNT_indexOfBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_DNT_indexOfBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_DNT_indexOfBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_DNT_indexOfBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_DNT_indexOfBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_DNT_indexOfBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_DNT_indexOfBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_DNT_indexOfBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_indexOfBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNB_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNB_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNB_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNB_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNB_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNB_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNB_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNB_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNB_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNB_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNB_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNB_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNB_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNB_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_indexOfBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                default:
                    return -1;
                }
            }
        }

        public override int ArrayLastIndexOfBy(IList array, string member, object value)
        {
            if(array.Count == 0)
                return -1;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return -1;
            if(array[0] == null)
                return -1;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return -1;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    default:
                        return -1;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value);
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value);
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value);
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value);
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value);
                    default:
                        return -1;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                default:
                    return -1;
                }
            }
        }

        public override int ArrayLastIndexOfBy(IList array, string member, object value, int startIndex)
        {
            if(array.Count == 0)
                return -1;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return -1;
            if(array[0] == null)
                return -1;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return -1;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTTotallyFolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTTotallyFolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTChain_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTChain.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCore_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCore.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_ToluolCoreNotC6Nitro_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_ToluolCoreNotC6Nitro.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "Toluol":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_Toluol_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_Toluol.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNT_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNT_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_c(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy_n6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node9":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node10":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__node10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge21":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge21(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge22":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge22(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge23":
                        return ArrayHelper.Array_TNTUnfolded_lastIndexOfBy__edge23(GRGEN_ACTIONS.Rule_TNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNT":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_DNT_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_DNT_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_DNT.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_c(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_node9":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__node9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge21":
                        return ArrayHelper.Array_DNTUnfolded_lastIndexOfBy__edge21(GRGEN_ACTIONS.Rule_DNTUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNB":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNB_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNB_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNB.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    case "c1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "c6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_c6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IC)value, startIndex);
                    case "_node0":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IH)value, startIndex);
                    case "n6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy_n6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IN)value, startIndex);
                    case "_node7":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_node8":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__node8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_MODEL.IO)value, startIndex);
                    case "_edge0":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge0(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge1":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge1(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge2":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge2(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge3":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge3(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge4":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge4(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge5":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge5(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge6":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge6(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge7":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge7(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge8":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge8(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge9":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge9(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge10":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge10(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge11":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge11(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge12":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge12(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge13":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge13(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge14":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge14(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge15":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge15(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge16":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge16(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge17":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge17(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge18":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge18(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge19":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge19(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    case "_edge20":
                        return ArrayHelper.Array_TNBUnfolded_lastIndexOfBy__edge20(GRGEN_ACTIONS.Rule_TNBUnfolded.ConvertAsNeeded(array), (GRGEN_LIBGR.IDEdge)value, startIndex);
                    default:
                        return -1;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                default:
                    return -1;
                }
            }
        }

        public override int ArrayIndexOfOrderedBy(IList array, string member, object value)
        {
            if(array.Count == 0)
                return -1;
            string arrayType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array.GetType());
            string arrayValueType = GRGEN_LIBGR.TypesHelper.ExtractSrc(arrayType);
            if(!arrayValueType.StartsWith("match<"))
                return -1;
            if(array[0] == null)
                return -1;
            if(arrayValueType == "match<>")
                arrayValueType = GRGEN_LIBGR.TypesHelper.DotNetTypeToXgrsType(array[0].GetType());
            if(arrayValueType.StartsWith("match<class "))
            {
                switch(arrayValueType.Substring(12, arrayValueType.Length - 12 - 1))
                {
                default:
                    return -1;
                }
            }
            else
            {
                switch(arrayValueType.Substring(6, arrayValueType.Length - 6 - 1))
                {
                case "BenzolRing":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTTotallyFolded":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTChain":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "ToluolCore":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "ToluolCoreNotC6Nitro":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "Toluol":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNTUnfolded":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createTNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "DNTUnfolded":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createDNT":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "TNBUnfolded":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createTNB":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "keepBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "createBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                case "deleteInModifyBenzolRingPattern":
                    switch(member)
                    {
                    default:
                        return -1;
                    }
                default:
                    return -1;
                }
            }
        }
        public override void FailAssertion() { Debug.Assert(false); }
        public override string ModelMD5Hash { get { return "583af96ffaea1ff96cb47dfd0ed198ce"; } }
    }
}