{{# def.definitions }}
							 | 
						|
								{{# def.errors }}
							 | 
						|
								{{# def.setupKeyword }}
							 | 
						|
								
							 | 
						|
								{{## def._validateRef:_v:
							 | 
						|
								  {{? it.opts.passContext }}
							 | 
						|
								    {{=_v}}.call(this,
							 | 
						|
								  {{??}}
							 | 
						|
								    {{=_v}}(
							 | 
						|
								  {{?}}
							 | 
						|
								    {{=$data}}, {{# def.dataPath }}{{# def.passParentData }}, rootData)
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								{{ var $async, $refCode; }}
							 | 
						|
								{{? $schema == '#' || $schema == '#/' }}
							 | 
						|
								  {{
							 | 
						|
								    if (it.isRoot) {
							 | 
						|
								      $async = it.async;
							 | 
						|
								      $refCode = 'validate';
							 | 
						|
								    } else {
							 | 
						|
								      $async = it.root.schema.$async === true;
							 | 
						|
								      $refCode = 'root.refVal[0]';
							 | 
						|
								    }
							 | 
						|
								  }}
							 | 
						|
								{{??}}
							 | 
						|
								  {{ var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot); }}
							 | 
						|
								  {{? $refVal === undefined }}
							 | 
						|
								    {{ var $message = it.MissingRefError.message(it.baseId, $schema); }}
							 | 
						|
								    {{? it.opts.missingRefs == 'fail' }}
							 | 
						|
								      {{ it.logger.error($message); }}
							 | 
						|
								      {{# def.error:'$ref' }}
							 | 
						|
								      {{? $breakOnError }} if (false) { {{?}}
							 | 
						|
								    {{?? it.opts.missingRefs == 'ignore' }}
							 | 
						|
								      {{ it.logger.warn($message); }}
							 | 
						|
								      {{? $breakOnError }} if (true) { {{?}}
							 | 
						|
								    {{??}}
							 | 
						|
								      {{ throw new it.MissingRefError(it.baseId, $schema, $message); }}
							 | 
						|
								    {{?}}
							 | 
						|
								  {{?? $refVal.inline }}
							 | 
						|
								    {{# def.setupNextLevel }}
							 | 
						|
								    {{
							 | 
						|
								      $it.schema = $refVal.schema;
							 | 
						|
								      $it.schemaPath = '';
							 | 
						|
								      $it.errSchemaPath = $schema;
							 | 
						|
								    }}
							 | 
						|
								    {{ var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code); }}
							 | 
						|
								    {{= $code }}
							 | 
						|
								    {{? $breakOnError}}
							 | 
						|
								      if ({{=$nextValid}}) {
							 | 
						|
								    {{?}}
							 | 
						|
								  {{??}}
							 | 
						|
								    {{
							 | 
						|
								      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);
							 | 
						|
								      $refCode = $refVal.code;
							 | 
						|
								    }}
							 | 
						|
								  {{?}}
							 | 
						|
								{{?}}
							 | 
						|
								
							 | 
						|
								{{? $refCode }}
							 | 
						|
								  {{# def.beginDefOut}}
							 | 
						|
								    {{# def._validateRef:$refCode }}
							 | 
						|
								  {{# def.storeDefOut:__callValidate }}
							 | 
						|
								
							 | 
						|
								  {{? $async }}
							 | 
						|
								    {{ if (!it.async) throw new Error('async schema referenced by sync schema'); }}
							 | 
						|
								    {{? $breakOnError }} var {{=$valid}}; {{?}}
							 | 
						|
								    try {
							 | 
						|
								      await {{=__callValidate}};
							 | 
						|
								      {{? $breakOnError }} {{=$valid}} = true; {{?}}
							 | 
						|
								    } catch (e) {
							 | 
						|
								      if (!(e instanceof ValidationError)) throw e;
							 | 
						|
								      if (vErrors === null) vErrors = e.errors;
							 | 
						|
								      else vErrors = vErrors.concat(e.errors);
							 | 
						|
								      errors = vErrors.length;
							 | 
						|
								      {{? $breakOnError }} {{=$valid}} = false; {{?}}
							 | 
						|
								    }
							 | 
						|
								    {{? $breakOnError }} if ({{=$valid}}) { {{?}}
							 | 
						|
								  {{??}}
							 | 
						|
								    if (!{{=__callValidate}}) {
							 | 
						|
								      if (vErrors === null) vErrors = {{=$refCode}}.errors;
							 | 
						|
								      else vErrors = vErrors.concat({{=$refCode}}.errors);
							 | 
						|
								      errors = vErrors.length;
							 | 
						|
								    } {{? $breakOnError }} else { {{?}}
							 | 
						|
								  {{?}}
							 | 
						|
								{{?}}
							 |