module NC_stf160templates {

	//good ones
	template (value) type1 cs_template1 := {
	
	}

	template (value) type1 cs_template2 (charstring cs) := {
	
	}

	template (value) type1 cs_template3 (template (value) charstring cs) := {
	
	}

	template (omit) type1 cs_template4 (template (value) charstring cs) := {
	
	}

	template (value) type1 cs_template5 (template (omit) charstring cs) := {
	
	}

	template type1 cr_template1 := {
	
	}

	template (present) type1 cr_template2 (charstring cs) := {
	
	}

	template type1 cr_template3 (template (value) charstring cs) := {
	
	}

	template (present) type1 cr_template4 (template (value) charstring cs) := {
	
	}

	template type1 cr_template5 (template (omit) charstring cs) := {
	
	}

	//bad ones
	template type1 cs_badtemplate1 := {
	
	}
	template (present) type1 cs_badtemplate2 (template (omit) charstring cs) := {
	
	}
	
	template (value) type1 cr_badtemplate3 (template (value) charstring cs) := {
	
	}

	//inconclusive or bad?
	template (omit) type1 cs_badtemplate4 (template charstring cs) := {
	
	}
	template (omit) type1 cs_badtemplate5 (template (present) charstring cs) := {
	
	}

	//derived templates
	//good
	template (present) type1 dcr_template4 (template (value) charstring cs) modifies cr_template4 := {
	
	}

	template type1 dcr_template5 (template (omit) charstring cs) modifies dcr_template5 := {
	
	}
	//bad
	template (present) type1 cr_badtemplate4d (template (value) charstring cs) modifies cr_template4 := {
	
	}

	template (value) type1 cs_badtemplate3 (template (value) charstring cs) modifies cs_template3:= {
	
	}

	template (value) type1 dcr_badtemplate5 (template (omit) charstring cs) modifies cr_template5 := {
	
	}
	
	

}