occam-verify-cli 1.0.45 → 1.0.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
12
12
  var _type = require("../type");
13
+ var _type1 = require("../declaration/type");
13
14
  function _class_call_check(instance, Constructor) {
14
15
  if (!(instance instanceof Constructor)) {
15
16
  throw new TypeError("Cannot call a class as a function");
@@ -113,15 +114,27 @@ var _default = (0, _dom.domAssigned)((_ComplexTypeDeclaration = /*#__PURE__*/ fu
113
114
  {
114
115
  key: "verify",
115
116
  value: function verify() {
117
+ var _this = this;
116
118
  var verified = false;
117
119
  var complexTypeDeclarationString = this.getString();
118
120
  this.fileContext.trace("Verifying the '".concat(complexTypeDeclarationString, "' complex type declaration..."));
119
121
  var typeVerified = this.verifyType();
120
122
  if (typeVerified) {
121
- var includeSuperTypes = false, properties = this.type.getProperties(includeSuperTypes), propertiesVerified = this.verifyProperties(properties);
122
- if (propertiesVerified) {
123
- this.fileContext.addType(this.type);
124
- verified = true;
123
+ var superTypesVerified = this.verifySuperTypes();
124
+ if (superTypesVerified) {
125
+ var includeSuperTypes = false, properties = this.type.getProperties(includeSuperTypes), propertiesVerified = this.verifyProperties(properties);
126
+ if (propertiesVerified) {
127
+ var superTypes;
128
+ superTypes = this.type.getSuperTypes();
129
+ superTypes = superTypes.map(function(superType) {
130
+ var superTypeName = superType.getName();
131
+ superType = _this.fileContext.findTypeByTypeName(superTypeName);
132
+ return superType;
133
+ });
134
+ this.type.setSuperTypes(superTypes);
135
+ this.fileContext.addType(this.type);
136
+ verified = true;
137
+ }
125
138
  }
126
139
  }
127
140
  if (verified) {
@@ -134,27 +147,16 @@ var _default = (0, _dom.domAssigned)((_ComplexTypeDeclaration = /*#__PURE__*/ fu
134
147
  key: "verifyType",
135
148
  value: function verifyType() {
136
149
  var typeVerified = false;
137
- var typeString = this.type.getString(); ///
138
- this.fileContext.trace("Verifying the '".concat(typeString, "' type..."));
139
- var typeName = this.type.getName(), typePresent = this.fileContext.isTypePresentByTypeName(typeName);
150
+ var typeName = this.type.getName();
151
+ this.fileContext.trace("Verifying the '".concat(typeName, "' type..."));
152
+ var typePresent = this.fileContext.isTypePresentByTypeName(typeName);
140
153
  if (typePresent) {
141
- var typeString1 = this.type.getString();
142
- this.fileContext.debug("The '".concat(typeString1, "' type is already present."));
154
+ this.fileContext.debug("The type '".concat(typeName, "' is already present."));
143
155
  } else {
144
- var superType;
145
- superType = this.type.getSuperType();
146
- var superTypeName = superType.getName();
147
- superType = this.fileContext.findTypeByTypeName(superTypeName);
148
- if (superType === null) {
149
- var superTypeString = superType.getString();
150
- this.fileContext.debug("The super-type '".concat(superTypeString, "' is not present."));
151
- } else {
152
- this.type.setSuperType(superType);
153
- typeVerified = true;
154
- }
156
+ typeVerified = true;
155
157
  }
156
158
  if (typeVerified) {
157
- this.fileContext.debug("...verified the '".concat(typeString, "' type."));
159
+ this.fileContext.debug("...verified the '".concat(typeName, "' type."));
158
160
  }
159
161
  return typeVerified;
160
162
  }
@@ -208,16 +210,43 @@ var _default = (0, _dom.domAssigned)((_ComplexTypeDeclaration = /*#__PURE__*/ fu
208
210
  value: function verifyProperties(properties) {
209
211
  var _this = this;
210
212
  var propertiesVerified;
211
- var superType = this.type.getSuperType(), superTypeProperties = superType.getProperties();
212
- propertiesVerified = properties.every(function(property) {
213
- var propertyVerified = _this.verifyProperty(property, properties, superTypeProperties);
214
- if (propertyVerified) {
213
+ var superTypes = this.type.getSuperTypes();
214
+ propertiesVerified = superTypes.every(function(superType) {
215
+ var superTypeProperties = superType.getProperties(), propertiesVerified = properties.every(function(property) {
216
+ var propertyVerified = _this.verifyProperty(property, properties, superTypeProperties);
217
+ if (propertyVerified) {
218
+ return true;
219
+ }
220
+ });
221
+ if (propertiesVerified) {
215
222
  return true;
216
223
  }
217
224
  });
218
225
  return propertiesVerified;
219
226
  }
220
227
  },
228
+ {
229
+ key: "verifySuperTypes",
230
+ value: function verifySuperTypes() {
231
+ var _this = this;
232
+ var superTypesVerified = true;
233
+ var superTypes = this.type.getSuperTypes(), superTypesString = (0, _type1.superTypesStringFromSuperTypes)(superTypes);
234
+ if (superTypesString !== null) {
235
+ var typeName = this.type.getString();
236
+ this.fileContext.trace("Verifying the '".concat(typeName, "' type's ").concat(superTypesString, " super types..."));
237
+ superTypesVerified = superTypes.every(function(superType) {
238
+ var superTypeName = superType.getName(), superTypePresent = _this.fileContext.isTypePresentByTypeName(superTypeName);
239
+ if (superTypePresent) {
240
+ return true;
241
+ }
242
+ });
243
+ if (superTypesVerified) {
244
+ this.fileContext.debug("...verified the '".concat(typeName, "' type's ").concat(superTypesString, " super types."));
245
+ }
246
+ }
247
+ return superTypesVerified;
248
+ }
249
+ },
221
250
  {
222
251
  key: "verifyPropertyType",
223
252
  value: function verifyPropertyType(propertyType) {
@@ -225,17 +254,22 @@ var _default = (0, _dom.domAssigned)((_ComplexTypeDeclaration = /*#__PURE__*/ fu
225
254
  if (propertyType === _type.objectType) {
226
255
  propertyTypeVerified = true;
227
256
  } else {
228
- var propertyTypeString = propertyType.getString(); ///
229
- this.fileContext.trace("Verifying the '".concat(propertyTypeString, "' property type..."));
230
- var propertyTypeName = propertyType.getName(), propertyTypePresent = this.fileContext.isTypePresentByTypeName(propertyTypeName);
231
- if (!propertyTypePresent) {
232
- var propertyTypeString1 = propertyType.getString();
233
- this.fileContext.debug("The '".concat(propertyTypeString1, "' property type is not present."));
234
- } else {
257
+ var typeName = this.type.getName(), propertyTypeName = propertyType.getName();
258
+ if (typeName === propertyTypeName) {
235
259
  propertyTypeVerified = true;
236
- }
237
- if (propertyTypeVerified) {
238
- this.fileContext.debug("...verified the '".concat(propertyTypeString, "' property type."));
260
+ } else {
261
+ var propertyTypeString = propertyType.getString(); ///
262
+ this.fileContext.trace("Verifying the '".concat(propertyTypeString, "' property type..."));
263
+ var propertyTypePresent = this.fileContext.isTypePresentByTypeName(propertyTypeName);
264
+ if (!propertyTypePresent) {
265
+ var propertyTypeString1 = propertyType.getString();
266
+ this.fileContext.debug("The '".concat(propertyTypeString1, "' property type is not present."));
267
+ } else {
268
+ propertyTypeVerified = true;
269
+ }
270
+ if (propertyTypeVerified) {
271
+ this.fileContext.debug("...verified the '".concat(propertyTypeString, "' property type."));
272
+ }
239
273
  }
240
274
  }
241
275
  return propertyTypeVerified;
@@ -253,4 +287,4 @@ var _default = (0, _dom.domAssigned)((_ComplexTypeDeclaration = /*#__PURE__*/ fu
253
287
  return ComplexTypeDeclaration;
254
288
  }(), _define_property(_ComplexTypeDeclaration, "name", "ComplexTypeDeclaration"), _ComplexTypeDeclaration));
255
289
 
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vZGVjbGFyYXRpb24vY29tcGxleFR5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5pbXBvcnQgeyBvYmplY3RUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBDb21wbGV4VHlwZURlY2xhcmF0aW9uIHtcbiAgY29uc3RydWN0b3IoZmlsZUNvbnRleHQsIHN0cmluZywgdHlwZSkge1xuICAgIHRoaXMuZmlsZUNvbnRleHQgPSBmaWxlQ29udGV4dDtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb21wbGV4IHR5cGUgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHR5cGVWZXJpZmllZCA9IHRoaXMudmVyaWZ5VHlwZSgpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllZCkge1xuICAgICAgY29uc3QgaW5jbHVkZVN1cGVyVHlwZXMgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLnR5cGUuZ2V0UHJvcGVydGllcyhpbmNsdWRlU3VwZXJUeXBlcyksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVByb3BlcnRpZXMocHJvcGVydGllcyk7XG5cbiAgICAgIGlmIChwcm9wZXJ0aWVzVmVyaWZpZWQpIHtcbiAgICAgICAgdGhpcy5maWxlQ29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgdmVyaWZpZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmd9JyBjb21wbGV4IHR5cGUgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5VHlwZSgpIHtcbiAgICBsZXQgdHlwZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpOyAvLy9cblxuICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICB0eXBlUHJlc2VudCA9IHRoaXMuZmlsZUNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgc3VwZXJUeXBlO1xuXG4gICAgICBzdXBlclR5cGUgPSB0aGlzLnR5cGUuZ2V0U3VwZXJUeXBlKCk7XG5cbiAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBzdXBlclR5cGUgPSB0aGlzLmZpbGVDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShzdXBlclR5cGVOYW1lKTtcblxuICAgICAgaWYgKHN1cGVyVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgVGhlIHN1cGVyLXR5cGUgJyR7c3VwZXJUeXBlU3RyaW5nfScgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVWZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeVByb3BlcnR5KHByb3BlcnR5LCBwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKSB7XG4gICAgbGV0IHByb3BlcnR5VmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHkuZ2V0U3RyaW5nKCk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkuLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5TmFtZXMgPSBwcm9wZXJ0eS5nZXROYW1lcygpLFxuICAgICAgICAgIGNvdW50ID0gcHJvcGVydGllcy5yZWR1Y2UoKGNvdW50LCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lc01hdGNoID0gcHJvcGVydHkubWF0Y2hQcm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFtZXMpO1xuXG4gICAgICAgICAgICBpZiAocHJvcGVydHlOYW1lc01hdGNoKSB7XG4gICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgICAgICB9LCAwKTtcblxuICAgIGlmIChjb3VudCA+IDEpIHtcbiAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZVByb3BlcnR5ID0gc3VwZXJUeXBlUHJvcGVydGllcy5maW5kKChzdXBlclR5cGVQcm9wZXJ0eSkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVNYXRjaGVzID0gc3VwZXJUeXBlUHJvcGVydHkubWF0Y2hQcm9wZXJ0eU5hbWVzKHByb3BlcnR5TmFtZXMpO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICAgIGlmIChzdXBlclR5cGVQcm9wZXJ0eSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0eVN0cmluZyA9IHN1cGVyVHlwZVByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5IG1hdGNoZXMgdGhlIHN1cGVyIHR5cGUncyAnJHtzdXBlclR5cGVQcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5LmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHByb3BlcnR5VHlwZTtcblxuICAgICAgICBwcm9wZXJ0eVR5cGUgPSBwcm9wZXJ0eS5nZXRUeXBlKCk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydHlUeXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVByb3BlcnR5VHlwZShwcm9wZXJ0eVR5cGUpO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGVWZXJpZmllZCkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZU5hbWUgPSBwcm9wZXJ0eVR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgcHJvcGVydHlUeXBlID0gdGhpcy5maWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUocHJvcGVydHlUeXBlTmFtZSk7XG5cbiAgICAgICAgICBjb25zdCB0eXBlID0gcHJvcGVydHlUeXBlOyAgLy8vXG5cbiAgICAgICAgICBwcm9wZXJ0eS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICAgICAgcHJvcGVydHlWZXJpZmllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlWZXJpZmllZCkge1xuICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgdmVyaWZpZWQgdGhlICcke3Byb3BlcnR5U3RyaW5nfScgcHJvcGVydHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5VmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICBsZXQgcHJvcGVydGllc1ZlcmlmaWVkO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlID0gdGhpcy50eXBlLmdldFN1cGVyVHlwZSgpLFxuICAgICAgICAgIHN1cGVyVHlwZVByb3BlcnRpZXMgPSBzdXBlclR5cGUuZ2V0UHJvcGVydGllcygpO1xuXG4gICAgcHJvcGVydGllc1ZlcmlmaWVkID0gcHJvcGVydGllcy5ldmVyeSgocHJvcGVydHkpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5VmVyaWZpZWQgPSB0aGlzLnZlcmlmeVByb3BlcnR5KHByb3BlcnR5LCBwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcblxuICAgICAgaWYgKHByb3BlcnR5VmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvcGVydGllc1ZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZSkge1xuICAgIGxldCBwcm9wZXJ0eVR5cGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgcHJvcGVydHlUeXBlVmVyaWZpZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVR5cGVTdHJpbmcgPSBwcm9wZXJ0eVR5cGUuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICB0aGlzLmZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3Byb3BlcnR5VHlwZVN0cmluZ30nIHByb3BlcnR5IHR5cGUuLi5gKTtcblxuICAgICAgY29uc3QgcHJvcGVydHlUeXBlTmFtZSA9IHByb3BlcnR5VHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGVQcmVzZW50ID0gdGhpcy5maWxlQ29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZShwcm9wZXJ0eVR5cGVOYW1lKTtcblxuICAgICAgaWYgKCFwcm9wZXJ0eVR5cGVQcmVzZW50KSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZVN0cmluZyA9IHByb3BlcnR5VHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvcGVydHlUeXBlU3RyaW5nfScgcHJvcGVydHkgdHlwZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5VHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5VHlwZVZlcmlmaWVkKSB7XG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtwcm9wZXJ0eVR5cGVTdHJpbmd9JyBwcm9wZXJ0eSB0eXBlLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVR5cGVWZXJpZmllZDtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb21wbGV4VHlwZURlY2xhcmF0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGRvbSxcbiAgICAgICAgICBub2RlID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBmaWxlQ29udGV4dC5ub2RlQXNTdHJpbmcobm9kZSksXG4gICAgICAgICAgdHlwZSA9IFR5cGUuZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IG5ldyBDb21wbGV4VHlwZURlY2xhcmF0aW9uKGZpbGVDb250ZXh0LCBzdHJpbmcsIHR5cGUpO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhUeXBlRGVjbGFyYXRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImRvbUFzc2lnbmVkIiwiQ29tcGxleFR5cGVEZWNsYXJhdGlvbiIsImZpbGVDb250ZXh0Iiwic3RyaW5nIiwidHlwZSIsImdldEZpbGVDb250ZXh0IiwiZ2V0U3RyaW5nIiwiZ2V0VHlwZSIsInZlcmlmeSIsInZlcmlmaWVkIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZyIsInRyYWNlIiwidHlwZVZlcmlmaWVkIiwidmVyaWZ5VHlwZSIsImluY2x1ZGVTdXBlclR5cGVzIiwicHJvcGVydGllcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVmVyaWZpZWQiLCJ2ZXJpZnlQcm9wZXJ0aWVzIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJzdXBlclR5cGUiLCJnZXRTdXBlclR5cGUiLCJzdXBlclR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwic3VwZXJUeXBlU3RyaW5nIiwic2V0U3VwZXJUeXBlIiwidmVyaWZ5UHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1cGVyVHlwZVByb3BlcnRpZXMiLCJwcm9wZXJ0eVZlcmlmaWVkIiwicHJvcGVydHlTdHJpbmciLCJwcm9wZXJ0eU5hbWVzIiwiZ2V0TmFtZXMiLCJjb3VudCIsInJlZHVjZSIsInByb3BlcnR5TmFtZXNNYXRjaCIsIm1hdGNoUHJvcGVydHlOYW1lcyIsInN1cGVyVHlwZVByb3BlcnR5IiwiZmluZCIsInByb3BlcnR5TmFtZU1hdGNoZXMiLCJzdXBlclR5cGVQcm9wZXJ0eVN0cmluZyIsInByb3BlcnR5VHlwZSIsInByb3BlcnR5VHlwZVZlcmlmaWVkIiwidmVyaWZ5UHJvcGVydHlUeXBlIiwicHJvcGVydHlUeXBlTmFtZSIsInNldFR5cGUiLCJldmVyeSIsIm9iamVjdFR5cGUiLCJwcm9wZXJ0eVR5cGVTdHJpbmciLCJwcm9wZXJ0eVR5cGVQcmVzZW50IiwiZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJUeXBlIiwiZG9tIiwibm9kZSIsIm5vZGVBc1N0cmluZyIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OzsyREFMZ0I7b0JB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
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vZGVjbGFyYXRpb24vY29tcGxleFR5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5pbXBvcnQgeyBvYmplY3RUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uLy4uL2RvbVwiO1xuaW1wb3J0IHsgc3VwZXJUeXBlc1N0cmluZ0Zyb21TdXBlclR5cGVzIH0gZnJvbSBcIi4uL2RlY2xhcmF0aW9uL3R5cGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZG9tQXNzaWduZWQoY2xhc3MgQ29tcGxleFR5cGVEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGZpbGVDb250ZXh0LCBzdHJpbmcsIHR5cGUpIHtcbiAgICB0aGlzLmZpbGVDb250ZXh0ID0gZmlsZUNvbnRleHQ7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIHZlcmlmeSgpIHtcbiAgICBsZXQgdmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nfScgY29tcGxleCB0eXBlIGRlY2xhcmF0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVR5cGUoKTtcblxuICAgIGlmICh0eXBlVmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZXNWZXJpZmllZCA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcygpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVTdXBlclR5cGVzID0gZmFsc2UsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLnR5cGUuZ2V0UHJvcGVydGllcyhpbmNsdWRlU3VwZXJUeXBlcyksXG4gICAgICAgICAgICAgIHByb3BlcnRpZXNWZXJpZmllZCA9IHRoaXMudmVyaWZ5UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICBpZiAocHJvcGVydGllc1ZlcmlmaWVkKSB7XG4gICAgICAgICAgbGV0IHN1cGVyVHlwZXM7XG5cbiAgICAgICAgICBzdXBlclR5cGVzID0gdGhpcy50eXBlLmdldFN1cGVyVHlwZXMoKTtcblxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzLm1hcCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdXBlclR5cGVOYW1lID0gc3VwZXJUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgc3VwZXJUeXBlID0gdGhpcy5maWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoc3VwZXJUeXBlTmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzdXBlclR5cGU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgICAgIHRoaXMuZmlsZUNvbnRleHQuYWRkVHlwZSh0aGlzLnR5cGUpO1xuXG4gICAgICAgICAgdmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29tcGxleFR5cGVEZWNsYXJhdGlvblN0cmluZ30nIGNvbXBsZXggdHlwZSBkZWNsYXJhdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKCkge1xuICAgIGxldCB0eXBlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlUHJlc2VudCA9IHRoaXMuZmlsZUNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgdHlwZSAnJHt0eXBlTmFtZX0nIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlQcm9wZXJ0eShwcm9wZXJ0eSwgcHJvcGVydGllcywgc3VwZXJUeXBlUHJvcGVydGllcykge1xuICAgIGxldCBwcm9wZXJ0eVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgdGhpcy5maWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5Li4uYCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gcHJvcGVydHkuZ2V0TmFtZXMoKSxcbiAgICAgICAgICBjb3VudCA9IHByb3BlcnRpZXMucmVkdWNlKChjb3VudCwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZXNNYXRjaCA9IHByb3BlcnR5Lm1hdGNoUHJvcGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVzKTtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5TmFtZXNNYXRjaCkge1xuICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICAgICAgfSwgMCk7XG5cbiAgICBpZiAoY291bnQgPiAxKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0eSA9IHN1cGVyVHlwZVByb3BlcnRpZXMuZmluZCgoc3VwZXJUeXBlUHJvcGVydHkpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lTWF0Y2hlcyA9IHN1cGVyVHlwZVByb3BlcnR5Lm1hdGNoUHJvcGVydHlOYW1lcyhwcm9wZXJ0eU5hbWVzKTtcblxuICAgICAgICBpZiAocHJvcGVydHlOYW1lTWF0Y2hlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSB8fCBudWxsO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlUHJvcGVydHkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlUHJvcGVydHlTdHJpbmcgPSBzdXBlclR5cGVQcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eSBtYXRjaGVzIHRoZSBzdXBlciB0eXBlJ3MgJyR7c3VwZXJUeXBlUHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS5gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcm9wZXJ0eVR5cGU7XG5cbiAgICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHkuZ2V0VHlwZSgpO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlQcm9wZXJ0eVR5cGUocHJvcGVydHlUeXBlKTtcblxuICAgICAgICBpZiAocHJvcGVydHlUeXBlVmVyaWZpZWQpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVR5cGVOYW1lID0gcHJvcGVydHlUeXBlLmdldE5hbWUoKTtcblxuICAgICAgICAgIHByb3BlcnR5VHlwZSA9IHRoaXMuZmlsZUNvbnRleHQuZmluZFR5cGVCeVR5cGVOYW1lKHByb3BlcnR5VHlwZU5hbWUpO1xuXG4gICAgICAgICAgY29uc3QgdHlwZSA9IHByb3BlcnR5VHlwZTsgIC8vL1xuXG4gICAgICAgICAgcHJvcGVydHkuc2V0VHlwZSh0eXBlKTtcblxuICAgICAgICAgIHByb3BlcnR5VmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5VmVyaWZpZWQpIHtcbiAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYHZlcmlmaWVkIHRoZSAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgbGV0IHByb3BlcnRpZXNWZXJpZmllZDtcblxuICAgIGNvbnN0IHN1cGVyVHlwZXMgPSB0aGlzLnR5cGUuZ2V0U3VwZXJUeXBlcygpO1xuXG4gICAgcHJvcGVydGllc1ZlcmlmaWVkID0gc3VwZXJUeXBlcy5ldmVyeSgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICBjb25zdCBzdXBlclR5cGVQcm9wZXJ0aWVzID0gc3VwZXJUeXBlLmdldFByb3BlcnRpZXMoKSxcbiAgICAgICAgICAgIHByb3BlcnRpZXNWZXJpZmllZCA9IHByb3BlcnRpZXMuZXZlcnkoKHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmVyaWZpZWQgPSB0aGlzLnZlcmlmeVByb3BlcnR5KHByb3BlcnR5LCBwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICBpZiAocHJvcGVydHlWZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgaWYgKHByb3BlcnRpZXNWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzVmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGVzKCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZpZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IHRoaXMudHlwZS5nZXRTdXBlclR5cGVzKCksXG4gICAgICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgIGlmIChzdXBlclR5cGVzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgdGhpcy5maWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlTmFtZX0nIHR5cGUncyAke3N1cGVyVHlwZXNTdHJpbmd9IHN1cGVyIHR5cGVzLi4uYCk7XG5cbiAgICAgIHN1cGVyVHlwZXNWZXJpZmllZCA9IHN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVOYW1lID0gc3VwZXJUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgICBzdXBlclR5cGVQcmVzZW50ID0gdGhpcy5maWxlQ29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZShzdXBlclR5cGVOYW1lKTtcblxuICAgICAgICBpZiAoc3VwZXJUeXBlUHJlc2VudCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZmllZCkge1xuICAgICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlJ3MgJHtzdXBlclR5cGVzU3RyaW5nfSBzdXBlciB0eXBlcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5UHJvcGVydHlUeXBlKHByb3BlcnR5VHlwZSkge1xuICAgIGxldCBwcm9wZXJ0eVR5cGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgcHJvcGVydHlUeXBlVmVyaWZpZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGVOYW1lID0gcHJvcGVydHlUeXBlLmdldE5hbWUoKTtcblxuICAgICAgaWYgKHR5cGVOYW1lID09PSBwcm9wZXJ0eVR5cGVOYW1lKSB7XG4gICAgICAgIHByb3BlcnR5VHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSAge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eVR5cGVTdHJpbmcgPSBwcm9wZXJ0eVR5cGUuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlUeXBlU3RyaW5nfScgcHJvcGVydHkgdHlwZS4uLmApO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZVByZXNlbnQgPSB0aGlzLmZpbGVDb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHByb3BlcnR5VHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICghcHJvcGVydHlUeXBlUHJlc2VudCkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VHlwZVN0cmluZyA9IHByb3BlcnR5VHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9wZXJ0eVR5cGVTdHJpbmd9JyBwcm9wZXJ0eSB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BlcnR5VHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eVR5cGVWZXJpZmllZCkge1xuICAgICAgICAgIHRoaXMuZmlsZUNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtwcm9wZXJ0eVR5cGVTdHJpbmd9JyBwcm9wZXJ0eSB0eXBlLmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5VHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbXBsZXhUeXBlRGVjbGFyYXRpb25cIjtcblxuICBzdGF0aWMgZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZG9tLFxuICAgICAgICAgIG5vZGUgPSBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gbmV3IENvbXBsZXhUeXBlRGVjbGFyYXRpb24oZmlsZUNvbnRleHQsIHN0cmluZywgdHlwZSk7XG5cbiAgICByZXR1cm4gY29tcGxleFR5cGVEZWNsYXJhdGlvbjtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiZG9tQXNzaWduZWQiLCJDb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiZmlsZUNvbnRleHQiLCJzdHJpbmciLCJ0eXBlIiwiZ2V0RmlsZUNvbnRleHQiLCJnZXRTdHJpbmciLCJnZXRUeXBlIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uU3RyaW5nIiwidHJhY2UiLCJ0eXBlVmVyaWZpZWQiLCJ2ZXJpZnlUeXBlIiwic3VwZXJUeXBlc1ZlcmlmaWVkIiwidmVyaWZ5U3VwZXJUeXBlcyIsImluY2x1ZGVTdXBlclR5cGVzIiwicHJvcGVydGllcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVmVyaWZpZWQiLCJ2ZXJpZnlQcm9wZXJ0aWVzIiwic3VwZXJUeXBlcyIsImdldFN1cGVyVHlwZXMiLCJtYXAiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVOYW1lIiwiZ2V0TmFtZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInNldFN1cGVyVHlwZXMiLCJhZGRUeXBlIiwiZGVidWciLCJ0eXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJ2ZXJpZnlQcm9wZXJ0eSIsInByb3BlcnR5Iiwic3VwZXJUeXBlUHJvcGVydGllcyIsInByb3BlcnR5VmVyaWZpZWQiLCJwcm9wZXJ0eVN0cmluZyIsInByb3BlcnR5TmFtZXMiLCJnZXROYW1lcyIsImNvdW50IiwicmVkdWNlIiwicHJvcGVydHlOYW1lc01hdGNoIiwibWF0Y2hQcm9wZXJ0eU5hbWVzIiwic3VwZXJUeXBlUHJvcGVydHkiLCJmaW5kIiwicHJvcGVydHlOYW1lTWF0Y2hlcyIsInN1cGVyVHlwZVByb3BlcnR5U3RyaW5nIiwicHJvcGVydHlUeXBlIiwicHJvcGVydHlUeXBlVmVyaWZpZWQiLCJ2ZXJpZnlQcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVR5cGVOYW1lIiwic2V0VHlwZSIsImV2ZXJ5Iiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInN1cGVyVHlwZVByZXNlbnQiLCJvYmplY3RUeXBlIiwicHJvcGVydHlUeXBlU3RyaW5nIiwicHJvcGVydHlUeXBlUHJlc2VudCIsImZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsImRvbSIsIm5vZGUiLCJub2RlQXNTdHJpbmciLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBUUE7OztlQUFBOzs7MkRBTmdCO29CQUVXO3FCQUVvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRS9DLFdBQWVBLElBQUFBLGdCQUFXLDJDQUFDO2FBQU1DLHVCQUNuQkMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLElBQUk7Z0NBRE5IO1FBRTdCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FBR0E7Ozs7WUFHZEMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxXQUFXO1lBQ3pCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxNQUFNO1lBQ3BCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxJQUFJO1lBQ2xCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBOztnQkFDRSxJQUFJ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
@@ -2,13 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ default: function() {
8
13
  return _default;
14
+ },
15
+ superTypesStringFromSuperTypes: function() {
16
+ return superTypesStringFromSuperTypes;
9
17
  }
10
18
  });
11
19
  var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
20
+ var _type = require("../type");
12
21
  function _class_call_check(instance, Constructor) {
13
22
  if (!(instance instanceof Constructor)) {
14
23
  throw new TypeError("Cannot call a class as a function");
@@ -112,13 +121,25 @@ var _default = (0, _dom.domAssigned)((_TypeDeclaration = /*#__PURE__*/ function(
112
121
  {
113
122
  key: "verify",
114
123
  value: function verify() {
124
+ var _this = this;
115
125
  var verified = false;
116
126
  var typeDeclarationString = this.getString(); ///
117
127
  this.fileContext.trace("Verifying the '".concat(typeDeclarationString, "' type declaration..."));
118
128
  var typeVerified = this.verifyType();
119
129
  if (typeVerified) {
120
- this.fileContext.addType(this.type);
121
- verified = true;
130
+ var superTypesVerified = this.verifySuperTypes();
131
+ if (superTypesVerified) {
132
+ var superTypes;
133
+ superTypes = this.type.getSuperTypes();
134
+ superTypes = superTypes.map(function(superType) {
135
+ var superTypeName = superType.getName();
136
+ superType = _this.fileContext.findTypeByTypeName(superTypeName);
137
+ return superType;
138
+ });
139
+ this.type.setSuperTypes(superTypes);
140
+ this.fileContext.addType(this.type);
141
+ verified = true;
142
+ }
122
143
  }
123
144
  if (verified) {
124
145
  this.fileContext.debug("...verified the '".concat(typeDeclarationString, "' type declaration."));
@@ -129,32 +150,42 @@ var _default = (0, _dom.domAssigned)((_TypeDeclaration = /*#__PURE__*/ function(
129
150
  {
130
151
  key: "verifyType",
131
152
  value: function verifyType() {
132
- var _this = this;
133
153
  var typeVerified = false;
134
154
  var typeName = this.type.getName();
135
155
  this.fileContext.trace("Verifying the '".concat(typeName, "' type..."));
136
156
  var typePresent = this.fileContext.isTypePresentByTypeName(typeName);
137
157
  if (typePresent) {
138
- this.fileContext.debug("The type '".concat(typeName, "' is not present."));
158
+ this.fileContext.debug("The type '".concat(typeName, "' is already present."));
139
159
  } else {
140
- var superTypes = this.type.getSuperTypes();
141
- this.type.resetSuperTypes();
142
- typeVerified = superTypes.every(function(superType) {
143
- var superTypeName = superTypes.getName();
144
- superType = _this.fileContext.findTypeByTypeName(superTypeName);
145
- if (superType === null) {
146
- _this.fileContext.debug("The super-type '".concat(superTypeName, "' is not present."));
147
- } else {
148
- _this.type.addSuperType(superType);
149
- return true;
150
- }
151
- });
160
+ typeVerified = true;
152
161
  }
153
162
  if (typeVerified) {
154
- this.fileContext.debug("...typeVerified the '".concat(typeName, "' type."));
163
+ this.fileContext.debug("...verified the '".concat(typeName, "' type."));
155
164
  }
156
165
  return typeVerified;
157
166
  }
167
+ },
168
+ {
169
+ key: "verifySuperTypes",
170
+ value: function verifySuperTypes() {
171
+ var _this = this;
172
+ var superTypesVerified = true;
173
+ var superTypes = this.type.getSuperTypes(), superTypesString = superTypesStringFromSuperTypes(superTypes);
174
+ if (superTypesString !== null) {
175
+ var typeName = this.type.getString();
176
+ this.fileContext.trace("Verifying the '".concat(typeName, "' type's ").concat(superTypesString, " super types..."));
177
+ superTypesVerified = superTypes.every(function(superType) {
178
+ var superTypeName = superType.getName(), superTypePresent = _this.fileContext.isTypePresentByTypeName(superTypeName);
179
+ if (superTypePresent) {
180
+ return true;
181
+ }
182
+ });
183
+ if (superTypesVerified) {
184
+ this.fileContext.debug("...verified the '".concat(typeName, "' type's ").concat(superTypesString, " super types."));
185
+ }
186
+ }
187
+ return superTypesVerified;
188
+ }
158
189
  }
159
190
  ], [
160
191
  {
@@ -167,5 +198,15 @@ var _default = (0, _dom.domAssigned)((_TypeDeclaration = /*#__PURE__*/ function(
167
198
  ]);
168
199
  return TypeDeclaration;
169
200
  }(), _define_property(_TypeDeclaration, "name", "TypeDeclaration"), _TypeDeclaration));
201
+ function superTypesStringFromSuperTypes(superTypes) {
202
+ var superTypesString = superTypes.reduce(function(superTypesString, superType) {
203
+ if (superType !== _type.objectType) {
204
+ var superTypeName = superType.getName();
205
+ superTypesString = superTypesString === null ? "'".concat(superTypeName, "'") : "".concat(superTypesString, ", '").concat(superTypeName, "'");
206
+ }
207
+ return superTypesString;
208
+ }, null);
209
+ return superTypesString;
210
+ }
170
211
 
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vZGVjbGFyYXRpb24vdHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vLi4vZG9tXCI7XG5cbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBUeXBlRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihmaWxlQ29udGV4dCwgc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5maWxlQ29udGV4dCA9IGZpbGVDb250ZXh0O1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRGaWxlQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlQ29udGV4dDtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlUeXBlKCk7XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmFkZFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgdmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5VHlwZSgpIHtcbiAgICBsZXQgdHlwZVZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLmZpbGVDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVOYW1lfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZXNlbnQgPSB0aGlzLmZpbGVDb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgVGhlIHR5cGUgJyR7dHlwZU5hbWV9JyBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlcyA9IHRoaXMudHlwZS5nZXRTdXBlclR5cGVzKCk7XG5cbiAgICAgIHRoaXMudHlwZS5yZXNldFN1cGVyVHlwZXMoKTtcblxuICAgICAgdHlwZVZlcmlmaWVkID0gc3VwZXJUeXBlcy5ldmVyeSgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGVzLmdldE5hbWUoKTtcblxuICAgICAgICBzdXBlclR5cGUgPSB0aGlzLmZpbGVDb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZShzdXBlclR5cGVOYW1lKTtcblxuICAgICAgICBpZiAoc3VwZXJUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgVGhlIHN1cGVyLXR5cGUgJyR7c3VwZXJUeXBlTmFtZX0nIGlzIG5vdCBwcmVzZW50LmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHlwZS5hZGRTdXBlclR5cGUoc3VwZXJUeXBlKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi50eXBlVmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVZlcmlmaWVkO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVEZWNsYXJhdGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgVHlwZSB9ID0gZG9tLFxuICAgICAgICAgIHR5cGUgPSBUeXBlLmZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBub2RlID0gdHlwZURlY2xhcmF0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgc3RyaW5nID0gZmlsZUNvbnRleHQubm9kZUFzU3RyaW5nKG5vZGUpLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IG5ldyBUeXBlRGVjbGFyYXRpb24oZmlsZUNvbnRleHQsIHN0cmluZywgdHlwZSk7XG5cbiAgICByZXR1cm4gdHlwZURlY2xhcmF0aW9uO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJkb21Bc3NpZ25lZCIsIlR5cGVEZWNsYXJhdGlvbiIsImZpbGVDb250ZXh0Iiwic3RyaW5nIiwidHlwZSIsImdldEZpbGVDb250ZXh0IiwiZ2V0U3RyaW5nIiwiZ2V0VHlwZSIsInZlcmlmeSIsInZlcmlmaWVkIiwidHlwZURlY2xhcmF0aW9uU3RyaW5nIiwidHJhY2UiLCJ0eXBlVmVyaWZpZWQiLCJ2ZXJpZnlUeXBlIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZU5hbWUiLCJnZXROYW1lIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInN1cGVyVHlwZXMiLCJnZXRTdXBlclR5cGVzIiwicmVzZXRTdXBlclR5cGVzIiwiZXZlcnkiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVOYW1lIiwiZmluZFR5cGVCeVR5cGVOYW1lIiwiYWRkU3VwZXJUeXBlIiwiZnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsImRvbSIsIm5vZGUiLCJub2RlQXNTdHJpbmciLCJ0eXBlRGVjbGFyYXRpb24iLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQUE7OzsyREFKZ0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUloQixXQUFlQSxJQUFBQSxnQkFBVyxvQ0FBQzthQUFNQyxnQkFDbkJDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxJQUFJO2dDQUROSDtRQUU3QixJQUFJLENBQUNDLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBOzs7O1lBR2RDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0gsV0FBVztZQUN6Qjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0gsTUFBTTtZQUNwQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0gsSUFBSTtZQUNsQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJQyxXQUFXO2dCQUVmLElBQU1DLHdCQUF3QixJQUFJLENBQUNKLFNBQVMsSUFBSSxHQUFHO2dCQUVuRCxJQUFJLENBQUNKLFdBQVcsQ0FBQ1MsS0FBSyxDQUFDLEFBQUMsa0JBQXVDLE9BQXRCRCx1QkFBc0I7Z0JBRS9ELElBQU1FLGVBQWUsSUFBSSxDQUFDQyxVQUFVO2dCQUVwQyxJQUFJRCxjQUFjO29CQUNoQixJQUFJLENBQUNWLFdBQVcsQ0FBQ1ksT0FBTyxDQUFDLElBQUksQ0FBQ1YsSUFBSTtvQkFFbENLLFdBQVc7Z0JBQ2I7Z0JBRUEsSUFBSUEsVUFBVTtvQkFDWixJQUFJLENBQUNQLFdBQVcsQ0FBQ2EsS0FBSyxDQUFDLEFBQUMsb0JBQXlDLE9BQXRCTCx1QkFBc0I7Z0JBQ25FO2dCQUVBLE9BQU9EO1lBQ1Q7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7O2dCQUNFLElBQUlELGVBQWU7Z0JBRW5CLElBQU1JLFdBQVcsSUFBSSxDQUFDWixJQUFJLENBQUNhLE9BQU87Z0JBRWxDLElBQUksQ0FBQ2YsV0FBVyxDQUFDUyxLQUFLLENBQUMsQUFBQyxrQkFBMEIsT0FBVEssVUFBUztnQkFFbEQsSUFBTUUsY0FBYyxJQUFJLENBQUNoQixXQUFXLENBQUNpQix1QkFBdUIsQ0FBQ0g7Z0JBRTdELElBQUlFLGFBQWE7b0JBQ2YsSUFBSSxDQUFDaEIsV0FBVyxDQUFDYSxLQUFLLENBQUMsQUFBQyxhQUFxQixPQUFUQyxVQUFTO2dCQUMvQyxPQUFPO29CQUNMLElBQU1JLGFBQWEsSUFBSSxDQUFDaEIsSUFBSSxDQUFDaUIsYUFBYTtvQkFFMUMsSUFBSSxDQUFDakIsSUFBSSxDQUFDa0IsZUFBZTtvQkFFekJWLGVBQWVRLFdBQVdHLEtBQUssQ0FBQyxTQUFDQzt3QkFDL0IsSUFBTUMsZ0JBQWdCTCxXQUFXSCxPQUFPO3dCQUV4Q08sWUFBWSxNQUFLdEIsV0FBVyxDQUFDd0Isa0JBQWtCLENBQUNEO3dCQUVoRCxJQUFJRCxjQUFjLE1BQU07NEJBQ3RCLE1BQUt0QixXQUFXLENBQUNhLEtBQUssQ0FBQyxBQUFDLG1CQUFnQyxPQUFkVSxlQUFjO3dCQUMxRCxPQUFPOzRCQUNMLE1BQUtyQixJQUFJLENBQUN1QixZQUFZLENBQUNIOzRCQUV2QixPQUFPO3dCQUNUO29CQUNGO2dCQUNGO2dCQUVBLElBQUlaLGNBQWM7b0JBQ2hCLElBQUksQ0FBQ1YsV0FBVyxDQUFDYSxLQUFLLENBQUMsQUFBQyx3QkFBZ0MsT0FBVEMsVUFBUztnQkFDMUQ7Z0JBRUEsT0FBT0o7WUFDVDs7OztZQUlPZ0IsS0FBQUE7bUJBQVAsU0FBT0Esd0JBQXdCQyxtQkFBbUIsRUFBRTNCLFdBQVc7Z0JBQzdELElBQU0sQUFBRTRCLE9BQVNDLFlBQUcsQ0FBWkQsTUFDRjFCLE9BQU8wQixLQUFLRix1QkFBdUIsQ0FBQ0MscUJBQXFCM0IsY0FDekQ4QixPQUFPSCxxQkFDUDFCLFNBQVNELFlBQVkrQixZQUFZLENBQUNELE9BQ2xDRSxrQkFBa0IsSUFBSWpDLGdCQUFnQkMsYUFBYUMsUUFBUUM7Z0JBRWpFLE9BQU84QjtZQUNUOzs7O0tBVkEsbUNBQU9DLFFBQU8ifQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vZGVjbGFyYXRpb24vdHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vLi4vZG9tXCI7XG5cbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uLy4uL2RvbVwiO1xuaW1wb3J0IHtvYmplY3RUeXBlfSBmcm9tIFwiLi4vdHlwZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBUeXBlRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihmaWxlQ29udGV4dCwgc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5maWxlQ29udGV4dCA9IGZpbGVDb250ZXh0O1xuICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRGaWxlQ29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlQ29udGV4dDtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICB2ZXJpZnkoKSB7XG4gICAgbGV0IHZlcmlmaWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlUeXBlKCk7XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBzdXBlclR5cGVzVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZXMoKTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZmllZCkge1xuICAgICAgICBsZXQgc3VwZXJUeXBlcztcblxuICAgICAgICBzdXBlclR5cGVzID0gdGhpcy50eXBlLmdldFN1cGVyVHlwZXMoKTtcblxuICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlcy5tYXAoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgc3VwZXJUeXBlID0gdGhpcy5maWxlQ29udGV4dC5maW5kVHlwZUJ5VHlwZU5hbWUoc3VwZXJUeXBlTmFtZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgICB0aGlzLmZpbGVDb250ZXh0LmFkZFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUeXBlKCkge1xuICAgIGxldCB0eXBlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKTtcblxuICAgIHRoaXMuZmlsZUNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlUHJlc2VudCA9IHRoaXMuZmlsZUNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUodHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGVQcmVzZW50KSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGBUaGUgdHlwZSAnJHt0eXBlTmFtZX0nIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHlwZVZlcmlmaWVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZVZlcmlmaWVkKSB7XG4gICAgICB0aGlzLmZpbGVDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZU5hbWV9JyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGVzKCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZpZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IHRoaXMudHlwZS5nZXRTdXBlclR5cGVzKCksXG4gICAgICAgICAgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgIGlmIChzdXBlclR5cGVzU3RyaW5nICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgdGhpcy5maWxlQ29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlTmFtZX0nIHR5cGUncyAke3N1cGVyVHlwZXNTdHJpbmd9IHN1cGVyIHR5cGVzLi4uYCk7XG5cbiAgICAgIHN1cGVyVHlwZXNWZXJpZmllZCA9IHN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBzdXBlclR5cGVOYW1lID0gc3VwZXJUeXBlLmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgc3VwZXJUeXBlUHJlc2VudCA9IHRoaXMuZmlsZUNvbnRleHQuaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUoc3VwZXJUeXBlTmFtZSk7XG5cbiAgICAgICAgaWYgKHN1cGVyVHlwZVByZXNlbnQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGVzVmVyaWZpZWQpIHtcbiAgICAgICAgdGhpcy5maWxlQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVOYW1lfScgdHlwZSdzICR7c3VwZXJUeXBlc1N0cmluZ30gc3VwZXIgdHlwZXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyVHlwZXNWZXJpZmllZDtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlRGVjbGFyYXRpb25cIjtcblxuICBzdGF0aWMgZnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IFR5cGUgfSA9IGRvbSxcbiAgICAgICAgICB0eXBlID0gVHlwZS5mcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgbm9kZSA9IHR5cGVEZWNsYXJhdGlvbk5vZGUsIC8vL1xuICAgICAgICAgIHN0cmluZyA9IGZpbGVDb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBuZXcgVHlwZURlY2xhcmF0aW9uKGZpbGVDb250ZXh0LCBzdHJpbmcsIHR5cGUpO1xuXG4gICAgcmV0dXJuIHR5cGVEZWNsYXJhdGlvbjtcbiAgfVxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgYCcke3N1cGVyVHlwZU5hbWV9J2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAnJHtzdXBlclR5cGVOYW1lfSdgO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbn1cblxuIl0sIm5hbWVzIjpbInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsImRvbUFzc2lnbmVkIiwiVHlwZURlY2xhcmF0aW9uIiwiZmlsZUNvbnRleHQiLCJzdHJpbmciLCJ0eXBlIiwiZ2V0RmlsZUNvbnRleHQiLCJnZXRTdHJpbmciLCJnZXRUeXBlIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJ0eXBlRGVjbGFyYXRpb25TdHJpbmciLCJ0cmFjZSIsInR5cGVWZXJpZmllZCIsInZlcmlmeVR5cGUiLCJzdXBlclR5cGVzVmVyaWZpZWQiLCJ2ZXJpZnlTdXBlclR5cGVzIiwic3VwZXJUeXBlcyIsImdldFN1cGVyVHlwZXMiLCJtYXAiLCJzdXBlclR5cGUiLCJzdXBlclR5cGVOYW1lIiwiZ2V0TmFtZSIsImZpbmRUeXBlQnlUeXBlTmFtZSIsInNldFN1cGVyVHlwZXMiLCJhZGRUeXBlIiwiZGVidWciLCJ0eXBlTmFtZSIsInR5cGVQcmVzZW50IiwiaXNUeXBlUHJlc2VudEJ5VHlwZU5hbWUiLCJzdXBlclR5cGVzU3RyaW5nIiwiZXZlcnkiLCJzdXBlclR5cGVQcmVzZW50IiwiZnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiVHlwZSIsImRvbSIsIm5vZGUiLCJub2RlQXNTdHJpbmciLCJ0eXBlRGVjbGFyYXRpb24iLCJuYW1lIiwicmVkdWNlIiwib2JqZWN0VHlwZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBT0EsT0F3SEc7ZUF4SEg7O0lBMEhnQkEsOEJBQThCO2VBQTlCQTs7OzJEQS9IQTtvQkFHUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRXpCLFdBQWVDLElBQUFBLGdCQUFXLG9DQUFDO2FBQU1DLGdCQUNuQkMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLElBQUk7Z0NBRE5IO1FBRTdCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtRQUNuQixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FBR0E7Ozs7WUFHZEMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxXQUFXO1lBQ3pCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxNQUFNO1lBQ3BCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxJQUFJO1lBQ2xCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBOztnQkFDRSxJQUFJQyxXQUFXO2dCQUVmLElBQU1DLHdCQUF3QixJQUFJLENBQUNKLFNBQVMsSUFBSSxHQUFHO2dCQUVuRCxJQUFJLENBQUNKLFdBQVcsQ0FBQ1MsS0FBSyxDQUFDLEFBQUMsa0JBQXVDLE9BQXRCRCx1QkFBc0I7Z0JBRS9ELElBQU1FLGVBQWUsSUFBSSxDQUFDQyxVQUFVO2dCQUVwQyxJQUFJRCxjQUFjO29CQUNoQixJQUFNRSxxQkFBcUIsSUFBSSxDQUFDQyxnQkFBZ0I7b0JBRWhELElBQUlELG9CQUFvQjt3QkFDdEIsSUFBSUU7d0JBRUpBLGFBQWEsSUFBSSxDQUFDWixJQUFJLENBQUNhLGFBQWE7d0JBRXBDRCxhQUFhQSxXQUFXRSxHQUFHLENBQUMsU0FBQ0M7NEJBQzNCLElBQU1DLGdCQUFnQkQsVUFBVUUsT0FBTzs0QkFFdkNGLFlBQVksTUFBS2pCLFdBQVcsQ0FBQ29CLGtCQUFrQixDQUFDRjs0QkFFaEQsT0FBT0Q7d0JBQ1Q7d0JBRUEsSUFBSSxDQUFDZixJQUFJLENBQUNtQixhQUFhLENBQUNQO3dCQUV4QixJQUFJLENBQUNkLFdBQVcsQ0FBQ3NCLE9BQU8sQ0FBQyxJQUFJLENBQUNwQixJQUFJO3dCQUVsQ0ssV0FBVztvQkFDYjtnQkFDRjtnQkFFQSxJQUFJQSxVQUFVO29CQUNaLElBQUksQ0FBQ1AsV0FBVyxDQUFDdUIsS0FBSyxDQUFDLEFBQUMsb0JBQXlDLE9BQXRCZix1QkFBc0I7Z0JBQ25FO2dCQUVBLE9BQU9EO1lBQ1Q7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSUQsZUFBZTtnQkFFbkIsSUFBTWMsV0FBVyxJQUFJLENBQUN0QixJQUFJLENBQUNpQixPQUFPO2dCQUVsQyxJQUFJLENBQUNuQixXQUFXLENBQUNTLEtBQUssQ0FBQyxBQUFDLGtCQUEwQixPQUFUZSxVQUFTO2dCQUVsRCxJQUFNQyxjQUFjLElBQUksQ0FBQ3pCLFdBQVcsQ0FBQzBCLHVCQUF1QixDQUFDRjtnQkFFN0QsSUFBSUMsYUFBYTtvQkFDZixJQUFJLENBQUN6QixXQUFXLENBQUN1QixLQUFLLENBQUMsQUFBQyxhQUFxQixPQUFUQyxVQUFTO2dCQUMvQyxPQUFPO29CQUNMZCxlQUFlO2dCQUNqQjtnQkFFQSxJQUFJQSxjQUFjO29CQUNoQixJQUFJLENBQUNWLFdBQVcsQ0FBQ3VCLEtBQUssQ0FBQyxBQUFDLG9CQUE0QixPQUFUQyxVQUFTO2dCQUN0RDtnQkFFQSxPQUFPZDtZQUNUOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBOztnQkFDRSxJQUFJRCxxQkFBcUI7Z0JBRXpCLElBQU1FLGFBQWEsSUFBSSxDQUFDWixJQUFJLENBQUNhLGFBQWEsSUFDcENZLG1CQUFtQjlCLCtCQUErQmlCO2dCQUV4RCxJQUFJYSxxQkFBcUIsTUFBTTtvQkFDN0IsSUFBTUgsV0FBVyxJQUFJLENBQUN0QixJQUFJLENBQUNFLFNBQVM7b0JBRXBDLElBQUksQ0FBQ0osV0FBVyxDQUFDUyxLQUFLLENBQUMsQUFBQyxrQkFBcUNrQixPQUFwQkgsVUFBUyxhQUE0QixPQUFqQkcsa0JBQWlCO29CQUU5RWYscUJBQXFCRSxXQUFXYyxLQUFLLENBQUMsU0FBQ1g7d0JBQ3JDLElBQU1DLGdCQUFnQkQsVUFBVUUsT0FBTyxJQUNqQ1UsbUJBQW1CLE1BQUs3QixXQUFXLENBQUMwQix1QkFBdUIsQ0FBQ1I7d0JBRWxFLElBQUlXLGtCQUFrQjs0QkFDcEIsT0FBTzt3QkFDVDtvQkFDRjtvQkFFQSxJQUFJakIsb0JBQW9CO3dCQUN0QixJQUFJLENBQUNaLFdBQVcsQ0FBQ3VCLEtBQUssQ0FBQyxBQUFDLG9CQUF1Q0ksT0FBcEJILFVBQVMsYUFBNEIsT0FBakJHLGtCQUFpQjtvQkFDbEY7Z0JBQ0Y7Z0JBRUEsT0FBT2Y7WUFDVDs7OztZQUlPa0IsS0FBQUE7bUJBQVAsU0FBT0Esd0JBQXdCQyxtQkFBbUIsRUFBRS9CLFdBQVc7Z0JBQzdELElBQU0sQUFBRWdDLE9BQVNDLFlBQUcsQ0FBWkQsTUFDRjlCLE9BQU84QixLQUFLRix1QkFBdUIsQ0FBQ0MscUJBQXFCL0IsY0FDekRrQyxPQUFPSCxxQkFDUDlCLFNBQVNELFlBQVltQyxZQUFZLENBQUNELE9BQ2xDRSxrQkFBa0IsSUFBSXJDLGdCQUFnQkMsYUFBYUMsUUFBUUM7Z0JBRWpFLE9BQU9rQztZQUNUOzs7O0tBVkEsbUNBQU9DLFFBQU87QUFhVCxTQUFTeEMsK0JBQStCaUIsVUFBVTtJQUN2RCxJQUFNYSxtQkFBbUJiLFdBQVd3QixNQUFNLENBQUMsU0FBQ1gsa0JBQWtCVjtRQUM1RCxJQUFJQSxjQUFjc0IsZ0JBQVUsRUFBRTtZQUM1QixJQUFNckIsZ0JBQWdCRCxVQUFVRSxPQUFPO1lBRXZDUSxtQkFBbUIsQUFBQ0EscUJBQXFCLE9BQ3JCLEFBQUMsSUFBaUIsT0FBZFQsZUFBYyxPQUNoQixBQUFDLEdBQXdCQSxPQUF0QlMsa0JBQWlCLE9BQW1CLE9BQWRULGVBQWM7UUFDL0Q7UUFFQSxPQUFPUztJQUNULEdBQUc7SUFFSCxPQUFPQTtBQUNUIn0=
package/lib/dom/type.js CHANGED
@@ -23,6 +23,7 @@ var _typeNames = require("../typeNames");
23
23
  var _name = require("../utilities/name");
24
24
  var _query = require("../utilities/query");
25
25
  var _json = require("../utilities/json");
26
+ var _object = /*#__PURE__*/ _interop_require_default(require("occam-furtle/lib/dom/assignment/object"));
26
27
  function _assert_this_initialized(self) {
27
28
  if (self === void 0) {
28
29
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -84,6 +85,11 @@ function _inherits(subClass, superClass) {
84
85
  });
85
86
  if (superClass) _set_prototype_of(subClass, superClass);
86
87
  }
88
+ function _interop_require_default(obj) {
89
+ return obj && obj.__esModule ? obj : {
90
+ default: obj
91
+ };
92
+ }
87
93
  function _getRequireWildcardCache(nodeInterop) {
88
94
  if (typeof WeakMap !== "function") return null;
89
95
  var cacheBabelInterop = new WeakMap();
@@ -151,7 +157,7 @@ function _is_native_reflect_construct() {
151
157
  })();
152
158
  }
153
159
  var push = _necessary.arrayUtilities.push;
154
- var typeDeclarationTypeNodeQuery = (0, _query.nodeQuery)("/typeDeclaration|complexTypeDeclaration/type[0]"), propertyDeclarationNodesQuery = (0, _query.nodesQuery)("/complexTypeDeclaration/propertyDeclaration"), propertyDeclarationTypeNodeQuery = (0, _query.nodeQuery)("/propertyDeclaration/type"), typeDeclarationSuperTypeNodesQuery = (0, _query.nodesQuery)("/typeDeclaration|complexTypeDeclaration/type[1]"), firstPrimaryKeywordTerminalNodeQuery = (0, _query.nodeQuery)("/typeDeclaration|complexTypeDeclaration/@primary-keyword[0]"), variableDeclarationSuperTypeNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/type");
160
+ var typeDeclarationTypeNodeQuery = (0, _query.nodeQuery)("/typeDeclaration|complexTypeDeclaration/type"), propertyDeclarationNodesQuery = (0, _query.nodesQuery)("/complexTypeDeclaration/propertyDeclaration"), propertyDeclarationTypeNodeQuery = (0, _query.nodeQuery)("/propertyDeclaration/type"), typeDeclarationSuperTypeNodesQuery = (0, _query.nodesQuery)("/typeDeclaration|complexTypeDeclaration/types/type"), firstPrimaryKeywordTerminalNodeQuery = (0, _query.nodeQuery)("/typeDeclaration|complexTypeDeclaration/@primary-keyword[0]"), variableDeclarationSuperTypeNodeQuery = (0, _query.nodeQuery)("/variableDeclaration/type");
155
161
  var Type = /*#__PURE__*/ function() {
156
162
  function Type(string, name, superTypes, properties, provisional) {
157
163
  _class_call_check(this, Type);
@@ -231,18 +237,6 @@ var Type = /*#__PURE__*/ function() {
231
237
  this.provisional = provisional;
232
238
  }
233
239
  },
234
- {
235
- key: "resetSuperTypes",
236
- value: function resetSuperTypes() {
237
- this.superTypes = [];
238
- }
239
- },
240
- {
241
- key: "addSuperTypes",
242
- value: function addSuperTypes(superType) {
243
- this.superTypes.push(superType);
244
- }
245
- },
246
240
  {
247
241
  key: "isEqualTo",
248
242
  value: function isEqualTo(type) {
@@ -404,15 +398,9 @@ _define_property(Type, "name", "Type");
404
398
  var _default = (0, _dom.domAssigned)(Type);
405
399
  function stringFromNameAndSuperTypes(name, superTypes) {
406
400
  var string = name; ///
407
- var superTypesString = superTypes.reduce(function(superTypesString, superType) {
408
- if (superType !== objectType) {
409
- var superTypeName = superType.getName();
410
- superTypesString = superTypesString === null ? superTypeName : "".concat(superTypesString, ", ").concat(superTypeName);
411
- }
412
- return superTypesString;
413
- }, null);
401
+ var superTypesString = superTypesStringFromSuperTypes(superTypes);
414
402
  if (superTypesString !== null) {
415
- string = "".concat(string, ":").concat(superTypeString);
403
+ string = "".concat(string, ":").concat(superTypesString);
416
404
  }
417
405
  return string;
418
406
  }
@@ -420,6 +408,16 @@ function nameFromTypeDeclarationNode(typeDeclarationNode, fileContext) {
420
408
  var typeDeclarationTypeNode = typeDeclarationTypeNodeQuery(typeDeclarationNode), typeNode = typeDeclarationTypeNode, typeName = (0, _name.typeNameFromTypeNode)(typeNode), name = typeName; ///
421
409
  return name;
422
410
  }
411
+ function superTypesStringFromSuperTypes(superTypes) {
412
+ var superTypesString = superTypes.reduce(function(superTypesString, superType) {
413
+ if (superType !== objectType) {
414
+ var superTypeName = superType.getName();
415
+ superTypesString = superTypesString === null ? superTypeName : "".concat(superTypesString, ", ").concat(superTypeName);
416
+ }
417
+ return superTypesString;
418
+ }, null);
419
+ return superTypesString;
420
+ }
423
421
  function superTypesFromTypeDeclarationNode(typeDeclarationNode, fileContext) {
424
422
  var typeDeclarationSuperTypeNodes = typeDeclarationSuperTypeNodesQuery(typeDeclarationNode), superTypes = typeDeclarationSuperTypeNodes.map(function(typeDeclarationSuperTypeNode) {
425
423
  var superTypeNode = typeDeclarationSuperTypeNode, superType = Type.fromTypeNode(superTypeNode);
@@ -439,7 +437,10 @@ function superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, fi
439
437
  var typeDeclarationSuperTypeNodes = typeDeclarationSuperTypeNodesQuery(complexTypeDeclarationNode), superTypes = typeDeclarationSuperTypeNodes.map(function(typeDeclarationSuperTypeNode) {
440
438
  var superTypeNode = typeDeclarationSuperTypeNode, superType = Type.fromTypeNode(superTypeNode);
441
439
  return superType;
442
- });
440
+ }), superTypesLength = superTypes.length;
441
+ if (superTypesLength === 0) {
442
+ superTypes.push(objectType);
443
+ }
443
444
  return superTypes;
444
445
  }
445
446
  function propertiesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, fileContext) {
@@ -488,4 +489,4 @@ var ObjectType = /*#__PURE__*/ function(Type) {
488
489
  }(Type);
489
490
  var objectType = ObjectType.fromNothing();
490
491
 
491
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uL2RvbVwiO1xuXG5pbXBvcnQgeyBQUk9WSVNJT05BTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uL2RvbVwiO1xuaW1wb3J0IHsgT0JKRUNUX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIG5vZGVzUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBzdXBlclR5cGVzRnJvbUpTT04sIHByb3BlcnRpZXNGcm9tSlNPTiwgc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04sIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdHlwZURlY2xhcmF0aW9ufGNvbXBsZXhUeXBlRGVjbGFyYXRpb24vdHlwZVswXVwiKSxcbiAgICAgIHByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9jb21wbGV4VHlwZURlY2xhcmF0aW9uL3Byb3BlcnR5RGVjbGFyYXRpb25cIiksXG4gICAgICBwcm9wZXJ0eURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcm9wZXJ0eURlY2xhcmF0aW9uL3R5cGVcIiksXG4gICAgICB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi90eXBlRGVjbGFyYXRpb258Y29tcGxleFR5cGVEZWNsYXJhdGlvbi90eXBlWzFdXCIpLFxuICAgICAgZmlyc3RQcmltYXJ5S2V5d29yZFRlcm1pbmFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVEZWNsYXJhdGlvbnxjb21wbGV4VHlwZURlY2xhcmF0aW9uL0BwcmltYXJ5LWtleXdvcmRbMF1cIiksXG4gICAgICB2YXJpYWJsZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ZhcmlhYmxlRGVjbGFyYXRpb24vdHlwZVwiKTtcblxuY2xhc3MgVHlwZSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXM7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0U3VwZXJUeXBlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlclR5cGVzO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcyhpbmNsdWRlU3VwZXJUeXBlcyA9IHRydWUpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gW107XG5cbiAgICBwdXNoKHByb3BlcnRpZXMsIHRoaXMucHJvcGVydGllcyk7XG5cbiAgICBpZiAoaW5jbHVkZVN1cGVyVHlwZXMpIHtcbiAgICAgIHRoaXMuc3VwZXJUeXBlcy5mb3JFYWNoKChzdXBlclR5cGUpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlUHJvcGVydGllcyA9IHN1cGVyVHlwZS5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgcHVzaChwcm9wZXJ0aWVzLCBzdXBlclR5cGVQcm9wZXJ0aWVzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgaXNQcm92aXNpb25hbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aXNpb25hbDtcbiAgfVxuXG4gIHNldFN0cmluZyhzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRTdXBlclR5cGVzKHN1cGVyVHlwZXMpIHtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICB9XG5cbiAgc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgfVxuXG4gIHNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgcmVzZXRTdXBlclR5cGVzKCkge1xuICAgIHRoaXMuc3VwZXJUeXBlcyA9IFtdO1xuICB9XG5cbiAgYWRkU3VwZXJUeXBlcyhzdXBlclR5cGUpIHtcbiAgICB0aGlzLnN1cGVyVHlwZXMucHVzaChzdXBlclR5cGUpO1xuICB9XG5cbiAgaXNFcXVhbFRvKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gKHRoaXMgPT09IHR5cGUpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBpc1N1YlR5cGVPZih0eXBlKSB7XG4gICAgbGV0IHN1YlR5cGVPZjtcblxuICAgIGlmICh0aGlzID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBzdWJUeXBlT2YgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3ViVHlwZU9mID0gdGhpcy5zdXBlclR5cGVzLnNvbWUoKHN1cGVyVHlwZSkgPT4geyAvLy9cbiAgICAgICAgaWYgKHN1cGVyVHlwZSA9PT0gdHlwZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlU3ViVHlwZU9mVHlwZSA9IHN1cGVyVHlwZS5pc1N1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAoc3VwZXJUeXBlU3ViVHlwZU9mVHlwZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBzdWJUeXBlT2Y7XG4gIH1cblxuICBpc1N1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBzdWJUeXBlT2YgPSB0eXBlLmlzU3ViVHlwZU9mKHRoaXMpLFxuICAgICAgICAgIHN1cGVyVHlwZU9mID0gc3ViVHlwZU9mOyAgLy8vXG5cbiAgICByZXR1cm4gc3VwZXJUeXBlT2Y7XG4gIH1cblxuICBpc0NvbXBhcmFibGVUbyh0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1YlR5cGVPZiA9IHRoaXMuaXNTdWJUeXBlT2YodHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSB0aGlzLmlzU3VwZXJUeXBlT2YodHlwZSksXG4gICAgICAgICAgY29tcGFyYWJsZVRvID0gKGVxdWFsVG8gfHwgc3ViVHlwZU9mIHx8IHN1cGVyVHlwZU9mKTtcblxuICAgIHJldHVybiBjb21wYXJhYmxlVG87XG4gIH1cblxuICBpc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1YlR5cGVPZiA9IHRoaXMuaXNTdWJUeXBlT2YodHlwZSksXG4gICAgICAgICAgZXF1YWxUb09yU3ViVHlwZU9mID0gKGVxdWFsVG8gfHwgc3ViVHlwZU9mKTtcblxuICAgIHJldHVybiBlcXVhbFRvT3JTdWJUeXBlT2Y7XG4gIH1cblxuICBpc0VxdWFsVG9PclN1cGVyVHlwZU9mKHR5cGUpIHtcbiAgICBjb25zdCBlcXVhbFRvID0gdGhpcy5pc0VxdWFsVG8odHlwZSksXG4gICAgICAgICAgc3VwZXJUeXBlT2YgPSB0aGlzLmlzU3VwZXJUeXBlT2YodHlwZSksXG4gICAgICAgICAgZXF1YWxUb09yU3VwZXJUeXBlT2YgPSAoZXF1YWxUbyB8fCBzdXBlclR5cGVPZik7XG5cbiAgICByZXR1cm4gZXF1YWxUb09yU3VwZXJUeXBlT2Y7XG4gIH1cblxuICBtYXRjaE5hbWUobmFtZSkge1xuICAgIGNvbnN0IG5vZGVNYXRjaGVzID0gKHRoaXMubmFtZSA9PT0gbmFtZSk7XG5cbiAgICByZXR1cm4gbm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFR5cGVOYW1lKHR5cGVOYW1lKSB7XG4gICAgY29uc3QgdHlwZU5hbWVNYXRjaGVzID0gKHRoaXMubmFtZSA9PT0gdHlwZU5hbWUpO1xuXG4gICAgcmV0dXJuIHR5cGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzSlNPTiA9IHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OKHRoaXMucHJvcGVydGllcyksXG4gICAgICAgICAgc3VwZXJUeXBlc0pTT04gPSBzdXBlclR5cGVzVG9TdXBlclR5cGVzSlNPTih0aGlzLnN1cGVyVHlwZXMpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsID0gdGhpcy5wcm92aXNpb25hbCxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0pTT04sICAvLy9cbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0pTT04sICAvLy9cbiAgICAgICAgICBuYW1lID0gdGhpcy5uYW1lLFxuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3VwZXJUeXBlcyxcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICBwcm92aXNpb25hbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgeyBuYW1lLCBwcm92aXNpb25hbCB9ID0ganNvbixcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTmFtZUFuZFN1cGVyVHlwZXMobmFtZSwgc3VwZXJUeXBlcyksXG4gICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVOb2RlKHR5cGVOb2RlKSB7XG4gICAgbGV0IHR5cGU7XG5cbiAgICBpZiAodHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBvYmplY3RUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgICAgc3RyaW5nID0gbmFtZSwgIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlQW5kUHJvdmlzaW9uYWwodHlwZSwgcHJvdmlzaW9uYWwsIGNvbnRleHQpIHtcbiAgICBjb25zdCBuYW1lID0gdHlwZS5nZXROYW1lKCksXG4gICAgICAgICAgc3VwZXJUeXBlID0gdHlwZSwgLy8vXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IFtcbiAgICAgICAgICAgIHN1cGVyVHlwZVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbU5hbWVBbmRTdXBlclR5cGVzKG5hbWUsIHN1cGVyVHlwZXMpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSB0eXBlLmdldFByb3BlcnRpZXMoKTtcblxuICAgIHR5cGUgPSBuZXcgVHlwZShzdHJpbmcsIG5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTsgIC8vL1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIG5hbWUgPSBuYW1lRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21OYW1lQW5kU3VwZXJUeXBlcyhuYW1lLCBzdXBlclR5cGVzKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGxldCB0eXBlO1xuXG4gICAgY29uc3QgcHJvcGVydHlEZWNsYXJhdGlvblR5cGVOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvblR5cGVOb2RlUXVlcnkocHJvcGVydHlEZWNsYXJhdGlvbk5vZGUpO1xuXG4gICAgaWYgKHByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZSA9IG9iamVjdFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOb2RlID0gcHJvcGVydHlEZWNsYXJhdGlvblR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgICBzdXBlclR5cGVzID0gbnVsbCxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBudWxsLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gICAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGxldCB0eXBlO1xuXG4gICAgY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUgPSB2YXJpYWJsZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZVF1ZXJ5KHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKTtcblxuICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZSA9PT0gbnVsbCkge1xuICAgICAgdHlwZSA9IG9iamVjdFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgbmFtZSA9IHR5cGVOYW1lLCAgLy8vXG4gICAgICAgICAgICBzdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgICAgICBzdXBlclR5cGVzID0gbnVsbCxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBudWxsLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBudWxsO1xuXG4gICAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21OYW1lQW5kU3VwZXJUeXBlcyhuYW1lLCBzdXBlclR5cGVzKSxcbiAgICAgICAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChUeXBlKTtcblxuZnVuY3Rpb24gc3RyaW5nRnJvbU5hbWVBbmRTdXBlclR5cGVzKG5hbWUsIHN1cGVyVHlwZXMpIHtcbiAgbGV0IHN0cmluZyA9IG5hbWU7ICAvLy9cblxuICBjb25zdCBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlclR5cGVOYW1lIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAke3N1cGVyVHlwZU5hbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgaWYgKHN1cGVyVHlwZXNTdHJpbmcgIT09IG51bGwpIHtcbiAgICBzdHJpbmcgPSBgJHtzdHJpbmd9OiR7c3VwZXJUeXBlU3RyaW5nfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBuYW1lRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uVHlwZU5vZGUgPSB0eXBlRGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5KHR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlLCAvLy9cbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXMgPSB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2Rlc1F1ZXJ5KHR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICBzdXBlclR5cGVzID0gdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXMubWFwKCh0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VwZXJUeXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHN1cGVyVHlwZSA9IFR5cGUuZnJvbVR5cGVOb2RlKHN1cGVyVHlwZU5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmZ1bmN0aW9uIHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgZmlyc3RQcmltYXJ5S2V5d29yZFRlcm1pbmFsTm9kZSA9IGZpcnN0UHJpbWFyeUtleXdvcmRUZXJtaW5hbE5vZGVRdWVyeSh0eXBlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgY29udGVudCA9IGZpcnN0UHJpbWFyeUtleXdvcmRUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICBjb250ZW50UHJvdmlzaW9uYWwgPSAoY29udGVudCA9PT0gUFJPVklTSU9OQUwpLFxuICAgICAgICBwcm92aXNpb25hbCA9IGNvbnRlbnRQcm92aXNpb25hbDsgLy8vXG5cbiAgcmV0dXJuIHByb3Zpc2lvbmFsO1xufVxuXG5mdW5jdGlvbiBuYW1lRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCB0eXBlRGVjbGFyYXRpb25UeXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlUXVlcnkoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlLCAvLy9cbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlcyA9IHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVzUXVlcnkoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICBzdXBlclR5cGVzID0gdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXMubWFwKCh0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VwZXJUeXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIHN1cGVyVHlwZSA9IFR5cGUuZnJvbVR5cGVOb2RlKHN1cGVyVHlwZU5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyVHlwZTtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5KGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZG9tLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5jbGFzcyBPYmplY3RUeXBlIGV4dGVuZHMgVHlwZSB7XG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHRoaXMucHJvdmlzaW9uYWwsXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdXBlclR5cGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPQkpFQ1RfVFlQRV9OQU1FLFxuICAgICAgICAgIHN0cmluZyA9IG5hbWUsICAvL1xuICAgICAgICAgIHN1cGVyVHlwZXMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBmYWxzZSxcbiAgICAgICAgICBvYmplY3RUeXBlID0gbmV3IE9iamVjdFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG5cbiAgICByZXR1cm4gb2JqZWN0VHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgb2JqZWN0VHlwZSA9IE9iamVjdFR5cGUuZnJvbU5vdGhpbmcoKTtcbiJdLCJuYW1lcyI6WyJvYmplY3RUeXBlIiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwidHlwZURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5IiwidHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXNRdWVyeSIsImZpcnN0UHJpbWFyeUtleXdvcmRUZXJtaW5hbE5vZGVRdWVyeSIsInZhcmlhYmxlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlUXVlcnkiLCJUeXBlIiwic3RyaW5nIiwibmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJnZXRTdHJpbmciLCJnZXROYW1lIiwiZ2V0U3VwZXJUeXBlcyIsImdldFByb3BlcnRpZXMiLCJpbmNsdWRlU3VwZXJUeXBlcyIsImZvckVhY2giLCJzdXBlclR5cGUiLCJzdXBlclR5cGVQcm9wZXJ0aWVzIiwiaXNQcm92aXNpb25hbCIsInNldFN0cmluZyIsInNldE5hbWUiLCJzZXRTdXBlclR5cGVzIiwic2V0UHJvcGVydGllcyIsInNldFByb3Zpc2lvbmFsIiwicmVzZXRTdXBlclR5cGVzIiwiYWRkU3VwZXJUeXBlcyIsImlzRXF1YWxUbyIsInR5cGUiLCJlcXVhbFRvIiwiaXNTdWJUeXBlT2YiLCJzdWJUeXBlT2YiLCJzb21lIiwic3VwZXJUeXBlU3ViVHlwZU9mVHlwZSIsImlzU3VwZXJUeXBlT2YiLCJzdXBlclR5cGVPZiIsImlzQ29tcGFyYWJsZVRvIiwiY29tcGFyYWJsZVRvIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJlcXVhbFRvT3JTdWJUeXBlT2YiLCJpc0VxdWFsVG9PclN1cGVyVHlwZU9mIiwiZXF1YWxUb09yU3VwZXJUeXBlT2YiLCJtYXRjaE5hbWUiLCJub2RlTWF0Y2hlcyIsIm1hdGNoVHlwZU5hbWUiLCJ0eXBlTmFtZSIsInR5cGVOYW1lTWF0Y2hlcyIsInRvSlNPTiIsInByb3BlcnRpZXNKU09OIiwicHJvcGVydGllc1RvUHJvcGVydGllc0pTT04iLCJzdXBlclR5cGVzSlNPTiIsInN1cGVyVHlwZXNUb1N1cGVyVHlwZXNKU09OIiwianNvbiIsImZyb21KU09OIiwiZmlsZUNvbnRleHQiLCJwcm9wZXJ0aWVzRnJvbUpTT04iLCJzdXBlclR5cGVzRnJvbUpTT04iLCJzdHJpbmdGcm9tTmFtZUFuZFN1cGVyVHlwZXMiLCJmcm9tVHlwZU5vZGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lRnJvbVR5cGVOb2RlIiwiZnJvbVR5cGVBbmRQcm92aXNpb25hbCIsImNvbnRleHQiLCJmcm9tVHlwZURlY2xhcmF0aW9uTm9kZSIsInR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwibmFtZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwiZnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlIiwicHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uVHlwZU5vZGUiLCJmcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlIiwiZnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0aWVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwic3VwZXJUeXBlc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsIm5hbWVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJkb21Bc3NpZ25lZCIsInN1cGVyVHlwZXNTdHJpbmciLCJyZWR1Y2UiLCJzdXBlclR5cGVOYW1lIiwic3VwZXJUeXBlU3RyaW5nIiwidHlwZURlY2xhcmF0aW9uVHlwZU5vZGUiLCJ0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlcyIsIm1hcCIsInR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUiLCJzdXBlclR5cGVOb2RlIiwiZmlyc3RQcmltYXJ5S2V5d29yZFRlcm1pbmFsTm9kZSIsImNvbnRlbnQiLCJnZXRDb250ZW50IiwiY29udGVudFByb3Zpc2lvbmFsIiwiUFJPVklTSU9OQUwiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJQcm9wZXJ0eSIsImRvbSIsInByb3BlcnR5IiwiT2JqZWN0VHlwZSIsImZyb21Ob3RoaW5nIiwiT0JKRUNUX1RZUEVfTkFNRSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBb1NBLE9BQWlDO2VBQWpDOztJQXlIYUEsVUFBVTtlQUFWQTs7O3lCQTNaa0I7MkRBRWY7eUJBRVk7eUJBRUs7b0JBQ0k7cUJBQ0M7b0JBQ3lFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvRyxJQUFNLEFBQUVDLE9BQVNDLHlCQUFjLENBQXZCRDtBQUVSLElBQU1FLCtCQUErQkMsSUFBQUEsZ0JBQVMsRUFBQyxvREFDekNDLGdDQUFnQ0MsSUFBQUEsaUJBQVUsRUFBQyxnREFDM0NDLG1DQUFtQ0gsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDN0NJLHFDQUFxQ0YsSUFBQUEsaUJBQVUsRUFBQyxvREFDaERHLHVDQUF1Q0wsSUFBQUEsZ0JBQVMsRUFBQyxnRUFDakRNLHdDQUF3Q04sSUFBQUEsZ0JBQVMsRUFBQztBQUV4RCxJQUFBLEFBQU1PLHFCQUFOO2FBQU1BLEtBQ1FDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVztnQ0FEekRMO1FBRUYsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtRQUNsQixJQUFJLENBQUNDLFdBQVcsR0FBR0E7O2tCQU5qQkw7O1lBU0pNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsTUFBTTtZQUNwQjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsSUFBSTtZQUNsQjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0wsVUFBVTtZQUN4Qjs7O1lBRUFNLEtBQUFBO21CQUFBQSxTQUFBQTtvQkFBY0Msb0JBQUFBLGlFQUFvQjtnQkFDaEMsSUFBTU4sYUFBYSxFQUFFO2dCQUVyQmQsS0FBS2MsWUFBWSxJQUFJLENBQUNBLFVBQVU7Z0JBRWhDLElBQUlNLG1CQUFtQjtvQkFDckIsSUFBSSxDQUFDUCxVQUFVLENBQUNRLE9BQU8sQ0FBQyxTQUFDQzt3QkFDdkIsSUFBTUMsc0JBQXNCRCxVQUFVSCxhQUFhO3dCQUVuRG5CLEtBQUtjLFlBQVlTO29CQUNuQjtnQkFDRjtnQkFFQSxPQUFPVDtZQUNUOzs7WUFFQVUsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDVCxXQUFXO1lBQ3pCOzs7WUFFQVUsS0FBQUE7bUJBQUFBLFNBQUFBLFVBQVVkLE1BQU07Z0JBQ2QsSUFBSSxDQUFDQSxNQUFNLEdBQUdBO1lBQ2hCOzs7WUFFQWUsS0FBQUE7bUJBQUFBLFNBQUFBLFFBQVFkLElBQUk7Z0JBQ1YsSUFBSSxDQUFDQSxJQUFJLEdBQUdBO1lBQ2Q7OztZQUVBZSxLQUFBQTttQkFBQUEsU0FBQUEsY0FBY2QsVUFBVTtnQkFDdEIsSUFBSSxDQUFDQSxVQUFVLEdBQUdBO1lBQ3BCOzs7WUFFQWUsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNkLFVBQVU7Z0JBQ3RCLElBQUksQ0FBQ0EsVUFBVSxHQUFHQTtZQUNwQjs7O1lBRUFlLEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlZCxXQUFXO2dCQUN4QixJQUFJLENBQUNBLFdBQVcsR0FBR0E7WUFDckI7OztZQUVBZSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBSSxDQUFDakIsVUFBVSxHQUFHLEVBQUU7WUFDdEI7OztZQUVBa0IsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNULFNBQVM7Z0JBQ3JCLElBQUksQ0FBQ1QsVUFBVSxDQUFDYixJQUFJLENBQUNzQjtZQUN2Qjs7O1lBRUFVLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVQyxJQUFJO2dCQUNaLElBQU1DLFVBQVcsSUFBSSxLQUFLRDtnQkFFMUIsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZRixJQUFJO2dCQUNkLElBQUlHO2dCQUVKLElBQUksSUFBSSxLQUFLckMsWUFBWTtvQkFDdkJxQyxZQUFZO2dCQUNkLE9BQU87b0JBQ0xBLFlBQVksSUFBSSxDQUFDdkIsVUFBVSxDQUFDd0IsSUFBSSxDQUFDLFNBQUNmO3dCQUNoQyxJQUFJQSxjQUFjVyxNQUFNOzRCQUN0QixPQUFPO3dCQUNUO3dCQUVBLElBQU1LLHlCQUF5QmhCLFVBQVVhLFdBQVcsQ0FBQ0Y7d0JBRXJELElBQUlLLHdCQUF3Qjs0QkFDMUIsT0FBTzt3QkFDVDtvQkFDRjtnQkFDRjtnQkFFQSxPQUFPRjtZQUNUOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNOLElBQUk7Z0JBQ2hCLElBQU1HLFlBQVlILEtBQUtFLFdBQVcsQ0FBQyxJQUFJLEdBQ2pDSyxjQUFjSixXQUFZLEdBQUc7Z0JBRW5DLE9BQU9JO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsZUFBZVIsSUFBSTtnQkFDakIsSUFBTUMsVUFBVSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0MsT0FDekJHLFlBQVksSUFBSSxDQUFDRCxXQUFXLENBQUNGLE9BQzdCTyxjQUFjLElBQUksQ0FBQ0QsYUFBYSxDQUFDTixPQUNqQ1MsZUFBZ0JSLFdBQVdFLGFBQWFJO2dCQUU5QyxPQUFPRTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHFCQUFxQlYsSUFBSTtnQkFDdkIsSUFBTUMsVUFBVSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0MsT0FDekJHLFlBQVksSUFBSSxDQUFDRCxXQUFXLENBQUNGLE9BQzdCVyxxQkFBc0JWLFdBQVdFO2dCQUV2QyxPQUFPUTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHVCQUF1QlosSUFBSTtnQkFDekIsSUFBTUMsVUFBVSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0MsT0FDekJPLGNBQWMsSUFBSSxDQUFDRCxhQUFhLENBQUNOLE9BQ2pDYSx1QkFBd0JaLFdBQVdNO2dCQUV6QyxPQUFPTTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLFVBQVVuQyxJQUFJO2dCQUNaLElBQU1vQyxjQUFlLElBQUksQ0FBQ3BDLElBQUksS0FBS0E7Z0JBRW5DLE9BQU9vQztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNDLFFBQVE7Z0JBQ3BCLElBQU1DLGtCQUFtQixJQUFJLENBQUN2QyxJQUFJLEtBQUtzQztnQkFFdkMsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxpQkFBaUJDLElBQUFBLGdDQUEwQixFQUFDLElBQUksQ0FBQ3hDLFVBQVUsR0FDM0R5QyxpQkFBaUJDLElBQUFBLGdDQUEwQixFQUFDLElBQUksQ0FBQzNDLFVBQVUsR0FDM0RFLGNBQWMsSUFBSSxDQUFDQSxXQUFXLEVBQzlCRCxhQUFhdUMsZ0JBQ2J4QyxhQUFhMEMsZ0JBQ2IzQyxPQUFPLElBQUksQ0FBQ0EsSUFBSSxFQUNoQjZDLE9BQU87b0JBQ0w3QyxNQUFBQTtvQkFDQUMsWUFBQUE7b0JBQ0FDLFlBQUFBO29CQUNBQyxhQUFBQTtnQkFDRjtnQkFFTixPQUFPMEM7WUFDVDs7OztZQUlPQyxLQUFBQTttQkFBUCxTQUFPQSxTQUFTRCxJQUFJLEVBQUVFLFdBQVc7Z0JBQy9CLElBQVEvQyxPQUFzQjZDLEtBQXRCN0MsTUFBTUcsY0FBZ0IwQyxLQUFoQjFDLGFBQ1JELGFBQWE4QyxJQUFBQSx3QkFBa0IsRUFBQ0gsTUFBTUUsY0FDdEM5QyxhQUFhZ0QsSUFBQUEsd0JBQWtCLEVBQUNKLE1BQU1FLGNBQ3RDaEQsU0FBU21ELDRCQUE0QmxELE1BQU1DLGFBQzNDb0IsT0FBTyxJQXJLWHZCLEtBcUtvQkMsUUFBUUMsTUFBTUMsWUFBWUMsWUFBWUM7Z0JBRTVELE9BQU9rQjtZQUNUOzs7WUFFTzhCLEtBQUFBO21CQUFQLFNBQU9BLGFBQWFDLFFBQVE7Z0JBQzFCLElBQUkvQjtnQkFFSixJQUFJK0IsYUFBYSxNQUFNO29CQUNyQi9CLE9BQU9sQztnQkFDVCxPQUFPO29CQUNMLElBQU1tRCxXQUFXZSxJQUFBQSwwQkFBb0IsRUFBQ0QsV0FDaENwRCxPQUFPc0MsVUFDUHZDLFNBQVNDLE1BQ1RDLGFBQWEsTUFDYkMsYUFBYSxNQUNiQyxjQUFjO29CQUVwQmtCLE9BQU8sSUF2TFB2QixLQXVMZ0JDLFFBQVFDLE1BQU1DLFlBQVlDLFlBQVlDO2dCQUN4RDtnQkFFQSxPQUFPa0I7WUFDVDs7O1lBRU9pQyxLQUFBQTttQkFBUCxTQUFPQSx1QkFBdUJqQyxJQUFJLEVBQUVsQixXQUFXLEVBQUVvRCxPQUFPO2dCQUN0RCxJQUFNdkQsT0FBT3FCLEtBQUtoQixPQUFPLElBQ25CSyxZQUFZVyxNQUNacEIsYUFBYTtvQkFDWFM7aUJBQ0QsRUFDRFgsU0FBU21ELDRCQUE0QmxELE1BQU1DLGFBQzNDQyxhQUFhbUIsS0FBS2QsYUFBYTtnQkFFckNjLE9BQU8sSUF0TUx2QixLQXNNY0MsUUFBUUMsTUFBTUMsWUFBWUMsWUFBWUMsY0FBZSxHQUFHO2dCQUV4RSxPQUFPa0I7WUFDVDs7O1lBRU9tQyxLQUFBQTttQkFBUCxTQUFPQSx3QkFBd0JDLG1CQUFtQixFQUFFVixXQUFXO2dCQUM3RCxJQUFNNUMsY0FBY3VELG1DQUFtQ0QscUJBQXFCVixjQUN0RTlDLGFBQWEwRCxrQ0FBa0NGLHFCQUFxQlYsY0FDcEUvQyxPQUFPNEQsNEJBQTRCSCxxQkFBcUJWLGNBQ3hEaEQsU0FBU21ELDRCQUE0QmxELE1BQU1DLGFBQzNDQyxhQUFhLEVBQUUsRUFDZm1CLE9BQU8sSUFqTlh2QixLQWlOb0JDLFFBQVFDLE1BQU1DLFlBQVlDLFlBQVlDO2dCQUU1RCxPQUFPa0I7WUFDVDs7O1lBRU93QyxLQUFBQTttQkFBUCxTQUFPQSw0QkFBNEJDLHVCQUF1QixFQUFFZixXQUFXO2dCQUNyRSxJQUFJMUI7Z0JBRUosSUFBTTBDLDhCQUE4QnJFLGlDQUFpQ29FO2dCQUVyRSxJQUFJQyxnQ0FBZ0MsTUFBTTtvQkFDeEMxQyxPQUFPbEM7Z0JBQ1QsT0FBTztvQkFDTCxJQUFNaUUsV0FBV1csNkJBQ1h6QixXQUFXZSxJQUFBQSwwQkFBb0IsRUFBQ0QsV0FDaENwRCxPQUFPc0MsVUFDUHZDLFNBQVNDLE1BQ1RDLGFBQWEsTUFDYkMsYUFBYSxNQUNiQyxjQUFjO29CQUVwQmtCLE9BQU8sSUF0T1B2QixLQXNPZ0JDLFFBQVFDLE1BQU1DLFlBQVlDLFlBQVlDO2dCQUN4RDtnQkFFQSxPQUFPa0I7WUFDVDs7O1lBRU8yQyxLQUFBQTttQkFBUCxTQUFPQSw0QkFBNEJDLHVCQUF1QixFQUFFbEIsV0FBVztnQkFDckUsSUFBSTFCO2dCQUVKLElBQU02QyxtQ0FBbUNyRSxzQ0FBc0NvRTtnQkFFL0UsSUFBSUMscUNBQXFDLE1BQU07b0JBQzdDN0MsT0FBT2xDO2dCQUNULE9BQU87b0JBQ0wsSUFBTWlFLFdBQVdjLGtDQUNYNUIsV0FBV2UsSUFBQUEsMEJBQW9CLEVBQUNELFdBQ2hDcEQsT0FBT3NDLFVBQ1B2QyxTQUFTQyxNQUNUQyxhQUFhLE1BQ2JDLGFBQWEsTUFDYkMsY0FBYztvQkFFcEJrQixPQUFPLElBNVBQdkIsS0E0UGdCQyxRQUFRQyxNQUFNQyxZQUFZQyxZQUFZQztnQkFDeEQ7Z0JBRUEsT0FBT2tCO1lBQ1Q7OztZQUVPOEMsS0FBQUE7bUJBQVAsU0FBT0EsK0JBQStCQywwQkFBMEIsRUFBRXJCLFdBQVc7Z0JBQzNFLElBQU01QyxjQUFjdUQsbUNBQW1DVSw0QkFBNEJyQixjQUM3RTdDLGFBQWFtRSx5Q0FBeUNELDRCQUE0QnJCLGNBQ2xGOUMsYUFBYXFFLHlDQUF5Q0YsNEJBQTRCckIsY0FDbEYvQyxPQUFPdUUsbUNBQW1DSCw0QkFBNEJyQixjQUN0RWhELFNBQVNtRCw0QkFBNEJsRCxNQUFNQyxhQUMzQ29CLE9BQU8sSUF4UVh2QixLQXdRb0JDLFFBQVFDLE1BQU1DLFlBQVlDLFlBQVlDO2dCQUU1RCxPQUFPa0I7WUFDVDs7O1dBM1FJdkI7O0FBOEpKLGlCQTlKSUEsTUE4SkdFLFFBQU87SUFnSGhCLFdBQWV3RSxJQUFBQSxnQkFBVyxFQUFDMUU7QUFFM0IsU0FBU29ELDRCQUE0QmxELElBQUksRUFBRUMsVUFBVTtJQUNuRCxJQUFJRixTQUFTQyxNQUFPLEdBQUc7SUFFdkIsSUFBTXlFLG1CQUFtQnhFLFdBQVd5RSxNQUFNLENBQUMsU0FBQ0Qsa0JBQWtCL0Q7UUFDNUQsSUFBSUEsY0FBY3ZCLFlBQVk7WUFDNUIsSUFBTXdGLGdCQUFnQmpFLFVBQVVMLE9BQU87WUFFdkNvRSxtQkFBbUIsQUFBQ0EscUJBQXFCLE9BQ25CRSxnQkFDRSxBQUFDLEdBQXVCQSxPQUFyQkYsa0JBQWlCLE1BQWtCLE9BQWRFO1FBQ2xEO1FBRUEsT0FBT0Y7SUFDVCxHQUFHO0lBRUgsSUFBSUEscUJBQXFCLE1BQU07UUFDN0IxRSxTQUFTLEFBQUMsR0FBWTZFLE9BQVY3RSxRQUFPLEtBQW1CLE9BQWhCNkU7SUFDeEI7SUFFQSxPQUFPN0U7QUFDVDtBQUVBLFNBQVM2RCw0QkFBNEJILG1CQUFtQixFQUFFVixXQUFXO0lBQ25FLElBQU04QiwwQkFBMEJ2Riw2QkFBNkJtRSxzQkFDdkRMLFdBQVd5Qix5QkFDWHZDLFdBQVdlLElBQUFBLDBCQUFvQixFQUFDRCxXQUNoQ3BELE9BQU9zQyxVQUFXLEdBQUc7SUFFM0IsT0FBT3RDO0FBQ1Q7QUFFQSxTQUFTMkQsa0NBQWtDRixtQkFBbUIsRUFBRVYsV0FBVztJQUN6RSxJQUFNK0IsZ0NBQWdDbkYsbUNBQW1DOEQsc0JBQ25FeEQsYUFBYTZFLDhCQUE4QkMsR0FBRyxDQUFDLFNBQUNDO1FBQzlDLElBQU1DLGdCQUFnQkQsOEJBQ2hCdEUsWUFBWVosS0FBS3FELFlBQVksQ0FBQzhCO1FBRXBDLE9BQU92RTtJQUNUO0lBRU4sT0FBT1Q7QUFDVDtBQUVBLFNBQVN5RCxtQ0FBbUNELG1CQUFtQixFQUFFVixXQUFXO0lBQzFFLElBQU1tQyxrQ0FBa0N0RixxQ0FBcUM2RCxzQkFDdkUwQixVQUFVRCxnQ0FBZ0NFLFVBQVUsSUFDcERDLHFCQUFzQkYsWUFBWUcsc0JBQVcsRUFDN0NuRixjQUFja0Ysb0JBQW9CLEdBQUc7SUFFM0MsT0FBT2xGO0FBQ1Q7QUFFQSxTQUFTb0UsbUNBQW1DSCwwQkFBMEIsRUFBRXJCLFdBQVc7SUFDakYsSUFBTThCLDBCQUEwQnZGLDZCQUE2QjhFLDZCQUN2RGhCLFdBQVd5Qix5QkFDWHZDLFdBQVdlLElBQUFBLDBCQUFvQixFQUFDRCxXQUNoQ3BELE9BQU9zQyxVQUFXLEdBQUc7SUFFM0IsT0FBT3RDO0FBQ1Q7QUFFQSxTQUFTc0UseUNBQXlDRiwwQkFBMEIsRUFBRXJCLFdBQVc7SUFDdkYsSUFBTStCLGdDQUFnQ25GLG1DQUFtQ3lFLDZCQUNuRW5FLGFBQWE2RSw4QkFBOEJDLEdBQUcsQ0FBQyxTQUFDQztRQUM5QyxJQUFNQyxnQkFBZ0JELDhCQUNoQnRFLFlBQVlaLEtBQUtxRCxZQUFZLENBQUM4QjtRQUVwQyxPQUFPdkU7SUFDVDtJQUVOLE9BQU9UO0FBQ1Q7QUFFQSxTQUFTb0UseUNBQXlDRCwwQkFBMEIsRUFBRXJCLFdBQVc7SUFDdkYsSUFBTXdDLDJCQUEyQi9GLDhCQUE4QjRFLDZCQUN6RGxFLGFBQWFxRix5QkFBeUJSLEdBQUcsQ0FBQyxTQUFDakI7UUFDekMsSUFBTSxBQUFFMEIsV0FBYUMsWUFBRyxDQUFoQkQsVUFDRkUsV0FBV0YsU0FBUzNCLDJCQUEyQixDQUFDQyx5QkFBeUJmO1FBRS9FLE9BQU8yQztJQUNUO0lBRU4sT0FBT3hGO0FBQ1Q7QUFFQSxJQUFBLEFBQU15RiwyQkFBTjtjQUFNQTthQUFBQTtnQ0FBQUE7ZUFBTixrQkFBTUE7O2tCQUFBQTs7WUFDSnBGLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNTCxhQUFhLEVBQUU7Z0JBRXJCLE9BQU9BO1lBQ1Q7OztZQUVBc0MsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU14QyxPQUFPLElBQUksQ0FBQ0EsSUFBSSxFQUNoQkMsYUFBYSxFQUFFLEVBQ2ZDLGFBQWEsSUFBSSxDQUFDQSxVQUFVLEVBQzVCQyxjQUFjLElBQUksQ0FBQ0EsV0FBVyxFQUM5QjBDLE9BQU87b0JBQ0w3QyxNQUFBQTtvQkFDQUMsWUFBQUE7b0JBQ0FDLFlBQUFBO29CQUNBQyxhQUFBQTtnQkFDRjtnQkFFTixPQUFPMEM7WUFDVDs7OztZQUVPK0MsS0FBQUE7bUJBQVAsU0FBT0E7Z0JBQ0wsSUFBTTVGLE9BQU82RiwyQkFBZ0IsRUFDdkI5RixTQUFTQyxNQUNUQyxhQUFhLEVBQUUsRUFDZkMsYUFBYSxFQUFFLEVBQ2ZDLGNBQWMsT0FDZGhCLGFBQWEsSUE1QmpCd0csV0E0QmdDNUYsUUFBUUMsTUFBTUMsWUFBWUMsWUFBWUM7Z0JBRXhFLE9BQU9oQjtZQUNUOzs7V0EvQkl3RztFQUFtQjdGO0FBa0NsQixJQUFNWCxhQUFhd0csV0FBV0MsV0FBVyJ9
492
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uL2RvbVwiO1xuXG5pbXBvcnQgeyBQUk9WSVNJT05BTCB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRvbUFzc2lnbmVkIH0gZnJvbSBcIi4uL2RvbVwiO1xuaW1wb3J0IHsgT0JKRUNUX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9uYW1lXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIG5vZGVzUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBzdXBlclR5cGVzRnJvbUpTT04sIHByb3BlcnRpZXNGcm9tSlNPTiwgc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04sIHByb3BlcnRpZXNUb1Byb3BlcnRpZXNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgb2JqZWN0IGZyb20gXCJvY2NhbS1mdXJ0bGUvbGliL2RvbS9hc3NpZ25tZW50L29iamVjdFwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jb25zdCB0eXBlRGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVEZWNsYXJhdGlvbnxjb21wbGV4VHlwZURlY2xhcmF0aW9uL3R5cGVcIiksXG4gICAgICBwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvY29tcGxleFR5cGVEZWNsYXJhdGlvbi9wcm9wZXJ0eURlY2xhcmF0aW9uXCIpLFxuICAgICAgcHJvcGVydHlEZWNsYXJhdGlvblR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcHJvcGVydHlEZWNsYXJhdGlvbi90eXBlXCIpLFxuICAgICAgdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvdHlwZURlY2xhcmF0aW9ufGNvbXBsZXhUeXBlRGVjbGFyYXRpb24vdHlwZXMvdHlwZVwiKSxcbiAgICAgIGZpcnN0UHJpbWFyeUtleXdvcmRUZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlRGVjbGFyYXRpb258Y29tcGxleFR5cGVEZWNsYXJhdGlvbi9AcHJpbWFyeS1rZXl3b3JkWzBdXCIpLFxuICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi92YXJpYWJsZURlY2xhcmF0aW9uL3R5cGVcIik7XG5cbmNsYXNzIFR5cGUge1xuICBjb25zdHJ1Y3RvcihzdHJpbmcsIG5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy5wcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoaW5jbHVkZVN1cGVyVHlwZXMgPSB0cnVlKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcHVzaChwcm9wZXJ0aWVzLCB0aGlzLnByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGluY2x1ZGVTdXBlclR5cGVzKSB7XG4gICAgICB0aGlzLnN1cGVyVHlwZXMuZm9yRWFjaCgoc3VwZXJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1cGVyVHlwZVByb3BlcnRpZXMgPSBzdXBlclR5cGUuZ2V0UHJvcGVydGllcygpO1xuXG4gICAgICAgIHB1c2gocHJvcGVydGllcywgc3VwZXJUeXBlUHJvcGVydGllcyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBzZXRTdHJpbmcoc3RyaW5nKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKSB7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gIH1cblxuICBzZXRQcm92aXNpb25hbChwcm92aXNpb25hbCkge1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9ICh0aGlzID09PSB0eXBlKTtcblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNTdWJUeXBlT2YodHlwZSkge1xuICAgIGxldCBzdWJUeXBlT2Y7XG5cbiAgICBpZiAodGhpcyA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgc3ViVHlwZU9mID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YlR5cGVPZiA9IHRoaXMuc3VwZXJUeXBlcy5zb21lKChzdXBlclR5cGUpID0+IHsgLy8vXG4gICAgICAgIGlmIChzdXBlclR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1cGVyVHlwZVN1YlR5cGVPZlR5cGUgPSBzdXBlclR5cGUuaXNTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHN1cGVyVHlwZVN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gc3ViVHlwZU9mO1xuICB9XG5cbiAgaXNTdXBlclR5cGVPZih0eXBlKSB7XG4gICAgY29uc3Qgc3ViVHlwZU9mID0gdHlwZS5pc1N1YlR5cGVPZih0aGlzKSxcbiAgICAgICAgICBzdXBlclR5cGVPZiA9IHN1YlR5cGVPZjsgIC8vL1xuXG4gICAgcmV0dXJuIHN1cGVyVHlwZU9mO1xuICB9XG5cbiAgaXNDb21wYXJhYmxlVG8odHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdWJUeXBlT2YgPSB0aGlzLmlzU3ViVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIHN1cGVyVHlwZU9mID0gdGhpcy5pc1N1cGVyVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGNvbXBhcmFibGVUbyA9IChlcXVhbFRvIHx8IHN1YlR5cGVPZiB8fCBzdXBlclR5cGVPZik7XG5cbiAgICByZXR1cm4gY29tcGFyYWJsZVRvO1xuICB9XG5cbiAgaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSkge1xuICAgIGNvbnN0IGVxdWFsVG8gPSB0aGlzLmlzRXF1YWxUbyh0eXBlKSxcbiAgICAgICAgICBzdWJUeXBlT2YgPSB0aGlzLmlzU3ViVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGVxdWFsVG9PclN1YlR5cGVPZiA9IChlcXVhbFRvIHx8IHN1YlR5cGVPZik7XG5cbiAgICByZXR1cm4gZXF1YWxUb09yU3ViVHlwZU9mO1xuICB9XG5cbiAgaXNFcXVhbFRvT3JTdXBlclR5cGVPZih0eXBlKSB7XG4gICAgY29uc3QgZXF1YWxUbyA9IHRoaXMuaXNFcXVhbFRvKHR5cGUpLFxuICAgICAgICAgIHN1cGVyVHlwZU9mID0gdGhpcy5pc1N1cGVyVHlwZU9mKHR5cGUpLFxuICAgICAgICAgIGVxdWFsVG9PclN1cGVyVHlwZU9mID0gKGVxdWFsVG8gfHwgc3VwZXJUeXBlT2YpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG9PclN1cGVyVHlwZU9mO1xuICB9XG5cbiAgbWF0Y2hOYW1lKG5hbWUpIHtcbiAgICBjb25zdCBub2RlTWF0Y2hlcyA9ICh0aGlzLm5hbWUgPT09IG5hbWUpO1xuXG4gICAgcmV0dXJuIG5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hUeXBlTmFtZSh0eXBlTmFtZSkge1xuICAgIGNvbnN0IHR5cGVOYW1lTWF0Y2hlcyA9ICh0aGlzLm5hbWUgPT09IHR5cGVOYW1lKTtcblxuICAgIHJldHVybiB0eXBlTmFtZU1hdGNoZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgcHJvcGVydGllc0pTT04gPSBwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTih0aGlzLnByb3BlcnRpZXMpLFxuICAgICAgICAgIHN1cGVyVHlwZXNKU09OID0gc3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04odGhpcy5zdXBlclR5cGVzKSxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHRoaXMucHJvdmlzaW9uYWwsXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNKU09OLCAgLy8vXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNKU09OLCAgLy8vXG4gICAgICAgICAgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHN1cGVyVHlwZXMsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWxcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVHlwZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgbmFtZSwgcHJvdmlzaW9uYWwgfSA9IGpzb24sXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3VwZXJUeXBlcyA9IHN1cGVyVHlwZXNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbU5hbWVBbmRTdXBlclR5cGVzKG5hbWUsIHN1cGVyVHlwZXMpLFxuICAgICAgICAgIHR5cGUgPSBuZXcgVHlwZShzdHJpbmcsIG5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlTm9kZSh0eXBlTm9kZSkge1xuICAgIGxldCB0eXBlO1xuXG4gICAgaWYgKHR5cGVOb2RlID09PSBudWxsKSB7XG4gICAgICB0eXBlID0gb2JqZWN0VHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgICAgICBuYW1lID0gdHlwZU5hbWUsICAvLy9cbiAgICAgICAgICAgIHN0cmluZyA9IG5hbWUsICAvLy9cbiAgICAgICAgICAgIHN1cGVyVHlwZXMgPSBudWxsLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IG51bGwsXG4gICAgICAgICAgICBwcm92aXNpb25hbCA9IG51bGw7XG5cbiAgICAgIHR5cGUgPSBuZXcgVHlwZShzdHJpbmcsIG5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHlwZUFuZFByb3Zpc2lvbmFsKHR5cGUsIHByb3Zpc2lvbmFsLCBjb250ZXh0KSB7XG4gICAgY29uc3QgbmFtZSA9IHR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN1cGVyVHlwZSA9IHR5cGUsIC8vL1xuICAgICAgICAgIHN1cGVyVHlwZXMgPSBbXG4gICAgICAgICAgICBzdXBlclR5cGVcbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0cmluZyA9IHN0cmluZ0Zyb21OYW1lQW5kU3VwZXJUeXBlcyhuYW1lLCBzdXBlclR5cGVzKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gdHlwZS5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgICB0eXBlID0gbmV3IFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7ICAvLy9cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gc3VwZXJUeXBlc0Zyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBuYW1lID0gbmFtZUZyb21UeXBlRGVjbGFyYXRpb25Ob2RlKHR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTmFtZUFuZFN1cGVyVHlwZXMobmFtZSwgc3VwZXJUeXBlcyksXG4gICAgICAgICAgcHJvcGVydGllcyA9IFtdLFxuICAgICAgICAgIHR5cGUgPSBuZXcgVHlwZShzdHJpbmcsIG5hbWUsIHN1cGVyVHlwZXMsIHByb3BlcnRpZXMsIHByb3Zpc2lvbmFsKTtcblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Qcm9wZXJ0eURlY2xhcmF0aW9uTm9kZShwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5KHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKTtcblxuICAgIGlmIChwcm9wZXJ0eURlY2xhcmF0aW9uVHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBvYmplY3RUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IHByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgICAgc3RyaW5nID0gbmFtZSwgIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBsZXQgdHlwZTtcblxuICAgIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlID0gdmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVRdWVyeSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSk7XG5cbiAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBvYmplY3RUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlTm9kZSA9IHZhcmlhYmxlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlLCAgLy8vXG4gICAgICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgICAgIG5hbWUgPSB0eXBlTmFtZSwgIC8vL1xuICAgICAgICAgICAgc3RyaW5nID0gbmFtZSwgIC8vL1xuICAgICAgICAgICAgc3VwZXJUeXBlcyA9IG51bGwsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbnVsbCxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gbnVsbDtcblxuICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgICBjb25zdCBwcm92aXNpb25hbCA9IHByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc0Zyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1cGVyVHlwZXMgPSBzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgbmFtZSA9IG5hbWVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTmFtZUFuZFN1cGVyVHlwZXMobmFtZSwgc3VwZXJUeXBlcyksXG4gICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKHN0cmluZywgbmFtZSwgc3VwZXJUeXBlcywgcHJvcGVydGllcywgcHJvdmlzaW9uYWwpO1xuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZG9tQXNzaWduZWQoVHlwZSk7XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21OYW1lQW5kU3VwZXJUeXBlcyhuYW1lLCBzdXBlclR5cGVzKSB7XG4gIGxldCBzdHJpbmcgPSBuYW1lOyAgLy8vXG5cbiAgY29uc3Qgc3VwZXJUeXBlc1N0cmluZyA9IHN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICBpZiAoc3VwZXJUeXBlc1N0cmluZyAhPT0gbnVsbCkge1xuICAgIHN0cmluZyA9IGAke3N0cmluZ306JHtzdXBlclR5cGVzU3RyaW5nfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBuYW1lRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUodHlwZURlY2xhcmF0aW9uTm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgdHlwZURlY2xhcmF0aW9uVHlwZU5vZGUgPSB0eXBlRGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5KHR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICB0eXBlTm9kZSA9IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlLCAvLy9cbiAgICAgICAgdHlwZU5hbWUgPSB0eXBlTmFtZUZyb21UeXBlTm9kZSh0eXBlTm9kZSksXG4gICAgICAgIG5hbWUgPSB0eXBlTmFtZTsgIC8vL1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiBzdXBlclR5cGVzU3RyaW5nRnJvbVN1cGVyVHlwZXMoc3VwZXJUeXBlcykge1xuICBjb25zdCBzdXBlclR5cGVzU3RyaW5nID0gc3VwZXJUeXBlcy5yZWR1Y2UoKHN1cGVyVHlwZXNTdHJpbmcsIHN1cGVyVHlwZSkgPT4ge1xuICAgIGlmIChzdXBlclR5cGUgIT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGNvbnN0IHN1cGVyVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0TmFtZSgpO1xuXG4gICAgICBzdXBlclR5cGVzU3RyaW5nID0gKHN1cGVyVHlwZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyVHlwZU5hbWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3N1cGVyVHlwZXNTdHJpbmd9LCAke3N1cGVyVHlwZU5hbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1N0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlcyA9IHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVzUXVlcnkodHlwZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgIHN1cGVyVHlwZXMgPSB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2Rlcy5tYXAoKHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBlclR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gVHlwZS5mcm9tVHlwZU5vZGUoc3VwZXJUeXBlTm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3VwZXJUeXBlcztcbn1cblxuZnVuY3Rpb24gcHJvdmlzaW9uYWxGcm9tVHlwZURlY2xhcmF0aW9uTm9kZSh0eXBlRGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCBmaXJzdFByaW1hcnlLZXl3b3JkVGVybWluYWxOb2RlID0gZmlyc3RQcmltYXJ5S2V5d29yZFRlcm1pbmFsTm9kZVF1ZXJ5KHR5cGVEZWNsYXJhdGlvbk5vZGUpLFxuICAgICAgICBjb250ZW50ID0gZmlyc3RQcmltYXJ5S2V5d29yZFRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgIGNvbnRlbnRQcm92aXNpb25hbCA9IChjb250ZW50ID09PSBQUk9WSVNJT05BTCksXG4gICAgICAgIHByb3Zpc2lvbmFsID0gY29udGVudFByb3Zpc2lvbmFsOyAvLy9cblxuICByZXR1cm4gcHJvdmlzaW9uYWw7XG59XG5cbmZ1bmN0aW9uIG5hbWVGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvblR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgIHR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uVHlwZU5vZGUsIC8vL1xuICAgICAgICB0eXBlTmFtZSA9IHR5cGVOYW1lRnJvbVR5cGVOb2RlKHR5cGVOb2RlKSxcbiAgICAgICAgbmFtZSA9IHR5cGVOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIG5hbWU7XG59XG5cbmZ1bmN0aW9uIHN1cGVyVHlwZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVzID0gdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXNRdWVyeShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSksXG4gICAgICAgIHN1cGVyVHlwZXMgPSB0eXBlRGVjbGFyYXRpb25TdXBlclR5cGVOb2Rlcy5tYXAoKHR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBlclR5cGVOb2RlID0gdHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgc3VwZXJUeXBlID0gVHlwZS5mcm9tVHlwZU5vZGUoc3VwZXJUeXBlTm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gc3VwZXJUeXBlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgc3VwZXJUeXBlcy5wdXNoKG9iamVjdFR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIHN1cGVyVHlwZXM7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlcyA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5KGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlKSxcbiAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlcy5tYXAoKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBQcm9wZXJ0eSB9ID0gZG9tLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gUHJvcGVydHkuZnJvbVByb3BlcnR5RGVjbGFyYXRpb25Ob2RlKHByb3BlcnR5RGVjbGFyYXRpb25Ob2RlLCBmaWxlQ29udGV4dCk7XG5cbiAgICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBwcm9wZXJ0aWVzO1xufVxuXG5jbGFzcyBPYmplY3RUeXBlIGV4dGVuZHMgVHlwZSB7XG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZSxcbiAgICAgICAgICBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBwcm92aXNpb25hbCA9IHRoaXMucHJvdmlzaW9uYWwsXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzdXBlclR5cGVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IG5hbWUgPSBPQkpFQ1RfVFlQRV9OQU1FLFxuICAgICAgICAgIHN0cmluZyA9IG5hbWUsICAvL1xuICAgICAgICAgIHN1cGVyVHlwZXMgPSBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gW10sXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBmYWxzZSxcbiAgICAgICAgICBvYmplY3RUeXBlID0gbmV3IE9iamVjdFR5cGUoc3RyaW5nLCBuYW1lLCBzdXBlclR5cGVzLCBwcm9wZXJ0aWVzLCBwcm92aXNpb25hbCk7XG5cbiAgICByZXR1cm4gb2JqZWN0VHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgb2JqZWN0VHlwZSA9IE9iamVjdFR5cGUuZnJvbU5vdGhpbmcoKTtcbiJdLCJuYW1lcyI6WyJvYmplY3RUeXBlIiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwidHlwZURlY2xhcmF0aW9uVHlwZU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInByb3BlcnR5RGVjbGFyYXRpb25Ob2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZVF1ZXJ5IiwidHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZXNRdWVyeSIsImZpcnN0UHJpbWFyeUtleXdvcmRUZXJtaW5hbE5vZGVRdWVyeSIsInZhcmlhYmxlRGVjbGFyYXRpb25TdXBlclR5cGVOb2RlUXVlcnkiLCJUeXBlIiwic3RyaW5nIiwibmFtZSIsInN1cGVyVHlwZXMiLCJwcm9wZXJ0aWVzIiwicHJvdmlzaW9uYWwiLCJnZXRTdHJpbmciLCJnZXROYW1lIiwiZ2V0U3VwZXJUeXBlcyIsImdldFByb3BlcnRpZXMiLCJpbmNsdWRlU3VwZXJUeXBlcyIsImZvckVhY2giLCJzdXBlclR5cGUiLCJzdXBlclR5cGVQcm9wZXJ0aWVzIiwiaXNQcm92aXNpb25hbCIsInNldFN0cmluZyIsInNldE5hbWUiLCJzZXRTdXBlclR5cGVzIiwic2V0UHJvcGVydGllcyIsInNldFByb3Zpc2lvbmFsIiwiaXNFcXVhbFRvIiwidHlwZSIsImVxdWFsVG8iLCJpc1N1YlR5cGVPZiIsInN1YlR5cGVPZiIsInNvbWUiLCJzdXBlclR5cGVTdWJUeXBlT2ZUeXBlIiwiaXNTdXBlclR5cGVPZiIsInN1cGVyVHlwZU9mIiwiaXNDb21wYXJhYmxlVG8iLCJjb21wYXJhYmxlVG8iLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsImVxdWFsVG9PclN1YlR5cGVPZiIsImlzRXF1YWxUb09yU3VwZXJUeXBlT2YiLCJlcXVhbFRvT3JTdXBlclR5cGVPZiIsIm1hdGNoTmFtZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hUeXBlTmFtZSIsInR5cGVOYW1lIiwidHlwZU5hbWVNYXRjaGVzIiwidG9KU09OIiwicHJvcGVydGllc0pTT04iLCJwcm9wZXJ0aWVzVG9Qcm9wZXJ0aWVzSlNPTiIsInN1cGVyVHlwZXNKU09OIiwic3VwZXJUeXBlc1RvU3VwZXJUeXBlc0pTT04iLCJqc29uIiwiZnJvbUpTT04iLCJmaWxlQ29udGV4dCIsInByb3BlcnRpZXNGcm9tSlNPTiIsInN1cGVyVHlwZXNGcm9tSlNPTiIsInN0cmluZ0Zyb21OYW1lQW5kU3VwZXJUeXBlcyIsImZyb21UeXBlTm9kZSIsInR5cGVOb2RlIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJmcm9tVHlwZUFuZFByb3Zpc2lvbmFsIiwiY29udGV4dCIsImZyb21UeXBlRGVjbGFyYXRpb25Ob2RlIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3Zpc2lvbmFsRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJuYW1lRnJvbVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJmcm9tUHJvcGVydHlEZWNsYXJhdGlvbk5vZGUiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnR5RGVjbGFyYXRpb25UeXBlTm9kZSIsImZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGUiLCJmcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsInByb3BlcnRpZXNGcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzdXBlclR5cGVzRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlIiwibmFtZUZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImRvbUFzc2lnbmVkIiwic3VwZXJUeXBlc1N0cmluZyIsInN1cGVyVHlwZXNTdHJpbmdGcm9tU3VwZXJUeXBlcyIsInR5cGVEZWNsYXJhdGlvblR5cGVOb2RlIiwicmVkdWNlIiwic3VwZXJUeXBlTmFtZSIsInR5cGVEZWNsYXJhdGlvblN1cGVyVHlwZU5vZGVzIiwibWFwIiwidHlwZURlY2xhcmF0aW9uU3VwZXJUeXBlTm9kZSIsInN1cGVyVHlwZU5vZGUiLCJmaXJzdFByaW1hcnlLZXl3b3JkVGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJjb250ZW50UHJvdmlzaW9uYWwiLCJQUk9WSVNJT05BTCIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJwcm9wZXJ0eURlY2xhcmF0aW9uTm9kZXMiLCJQcm9wZXJ0eSIsImRvbSIsInByb3BlcnR5IiwiT2JqZWN0VHlwZSIsImZyb21Ob3RoaW5nIiwiT0JKRUNUX1RZUEVfTkFNRSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBNlJBLE9BQWlDO2VBQWpDOztJQW9JYUEsVUFBVTtlQUFWQTs7O3lCQS9aa0I7MkRBRWY7eUJBRVk7eUJBRUs7b0JBQ0k7cUJBQ0M7b0JBQ3lFOzZEQUM1Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuQixJQUFNLEFBQUVDLE9BQVNDLHlCQUFjLENBQXZCRDtBQUVSLElBQU1FLCtCQUErQkMsSUFBQUEsZ0JBQVMsRUFBQyxpREFDekNDLGdDQUFnQ0MsSUFBQUEsaUJBQVUsRUFBQyxnREFDM0NDLG1DQUFtQ0gsSUFBQUEsZ0JBQVMsRUFBQyw4QkFDN0NJLHFDQUFxQ0YsSUFBQUEsaUJBQVUsRUFBQyx1REFDaERHLHVDQUF1Q0wsSUFBQUEsZ0JBQVMsRUFBQyxnRUFDakRNLHdDQUF3Q04sSUFBQUEsZ0JBQVMsRUFBQztBQUV4RCxJQUFBLEFBQU1PLHFCQUFOO2FBQU1BLEtBQ1FDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFVBQVUsRUFBRUMsV0FBVztnQ0FEekRMO1FBRUYsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFD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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.45",
4
+ "version": "1.0.47",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -12,10 +12,10 @@
12
12
  "dependencies": {
13
13
  "argumentative": "^2.0.32",
14
14
  "necessary": "^14.2.1",
15
- "occam-custom-grammars": "^5.0.1070",
16
- "occam-entities": "^1.0.282",
17
- "occam-file-system": "^6.0.304",
18
- "occam-furtle": "^2.0.54",
15
+ "occam-custom-grammars": "^5.0.1071",
16
+ "occam-entities": "^1.0.283",
17
+ "occam-file-system": "^6.0.305",
18
+ "occam-furtle": "^2.0.57",
19
19
  "occam-grammar-utilities": "^8.0.250",
20
20
  "occam-lexers": "^23.0.37",
21
21
  "occam-parsers": "^23.0.42",
@@ -4,6 +4,7 @@ import dom from "../../dom";
4
4
 
5
5
  import { objectType } from "../type";
6
6
  import { domAssigned } from "../../dom";
7
+ import { superTypesStringFromSuperTypes } from "../declaration/type";
7
8
 
8
9
  export default domAssigned(class ComplexTypeDeclaration {
9
10
  constructor(fileContext, string, type) {
@@ -34,14 +35,32 @@ export default domAssigned(class ComplexTypeDeclaration {
34
35
  const typeVerified = this.verifyType();
35
36
 
36
37
  if (typeVerified) {
37
- const includeSuperTypes = false,
38
- properties = this.type.getProperties(includeSuperTypes),
39
- propertiesVerified = this.verifyProperties(properties);
38
+ const superTypesVerified = this.verifySuperTypes();
40
39
 
41
- if (propertiesVerified) {
42
- this.fileContext.addType(this.type);
40
+ if (superTypesVerified) {
41
+ const includeSuperTypes = false,
42
+ properties = this.type.getProperties(includeSuperTypes),
43
+ propertiesVerified = this.verifyProperties(properties);
44
+
45
+ if (propertiesVerified) {
46
+ let superTypes;
47
+
48
+ superTypes = this.type.getSuperTypes();
49
+
50
+ superTypes = superTypes.map((superType) => {
51
+ const superTypeName = superType.getName();
52
+
53
+ superType = this.fileContext.findTypeByTypeName(superTypeName);
54
+
55
+ return superType;
56
+ });
43
57
 
44
- verified = true;
58
+ this.type.setSuperTypes(superTypes);
59
+
60
+ this.fileContext.addType(this.type);
61
+
62
+ verified = true;
63
+ }
45
64
  }
46
65
  }
47
66
 
@@ -55,39 +74,20 @@ export default domAssigned(class ComplexTypeDeclaration {
55
74
  verifyType() {
56
75
  let typeVerified = false;
57
76
 
58
- const typeString = this.type.getString(); ///
77
+ const typeName = this.type.getName();
59
78
 
60
- this.fileContext.trace(`Verifying the '${typeString}' type...`);
79
+ this.fileContext.trace(`Verifying the '${typeName}' type...`);
61
80
 
62
- const typeName = this.type.getName(),
63
- typePresent = this.fileContext.isTypePresentByTypeName(typeName);
81
+ const typePresent = this.fileContext.isTypePresentByTypeName(typeName);
64
82
 
65
83
  if (typePresent) {
66
- const typeString = this.type.getString();
67
-
68
- this.fileContext.debug(`The '${typeString}' type is already present.`);
84
+ this.fileContext.debug(`The type '${typeName}' is already present.`);
69
85
  } else {
70
- let superType;
71
-
72
- superType = this.type.getSuperType();
73
-
74
- const superTypeName = superType.getName();
75
-
76
- superType = this.fileContext.findTypeByTypeName(superTypeName);
77
-
78
- if (superType === null) {
79
- const superTypeString = superType.getString();
80
-
81
- this.fileContext.debug(`The super-type '${superTypeString}' is not present.`);
82
- } else {
83
- this.type.setSuperType(superType);
84
-
85
- typeVerified = true;
86
- }
86
+ typeVerified = true;
87
87
  }
88
88
 
89
89
  if (typeVerified) {
90
- this.fileContext.debug(`...verified the '${typeString}' type.`);
90
+ this.fileContext.debug(`...verified the '${typeName}' type.`);
91
91
  }
92
92
 
93
93
  return typeVerified;
@@ -157,13 +157,19 @@ export default domAssigned(class ComplexTypeDeclaration {
157
157
  verifyProperties(properties) {
158
158
  let propertiesVerified;
159
159
 
160
- const superType = this.type.getSuperType(),
161
- superTypeProperties = superType.getProperties();
160
+ const superTypes = this.type.getSuperTypes();
161
+
162
+ propertiesVerified = superTypes.every((superType) => {
163
+ const superTypeProperties = superType.getProperties(),
164
+ propertiesVerified = properties.every((property) => {
165
+ const propertyVerified = this.verifyProperty(property, properties, superTypeProperties);
162
166
 
163
- propertiesVerified = properties.every((property) => {
164
- const propertyVerified = this.verifyProperty(property, properties, superTypeProperties);
167
+ if (propertyVerified) {
168
+ return true;
169
+ }
170
+ });
165
171
 
166
- if (propertyVerified) {
172
+ if (propertiesVerified) {
167
173
  return true;
168
174
  }
169
175
  });
@@ -171,29 +177,63 @@ export default domAssigned(class ComplexTypeDeclaration {
171
177
  return propertiesVerified;
172
178
  }
173
179
 
180
+ verifySuperTypes() {
181
+ let superTypesVerified = true;
182
+
183
+ const superTypes = this.type.getSuperTypes(),
184
+ superTypesString = superTypesStringFromSuperTypes(superTypes);
185
+
186
+ if (superTypesString !== null) {
187
+ const typeName = this.type.getString();
188
+
189
+ this.fileContext.trace(`Verifying the '${typeName}' type's ${superTypesString} super types...`);
190
+
191
+ superTypesVerified = superTypes.every((superType) => {
192
+ const superTypeName = superType.getName(),
193
+ superTypePresent = this.fileContext.isTypePresentByTypeName(superTypeName);
194
+
195
+ if (superTypePresent) {
196
+ return true;
197
+ }
198
+ });
199
+
200
+ if (superTypesVerified) {
201
+ this.fileContext.debug(`...verified the '${typeName}' type's ${superTypesString} super types.`);
202
+ }
203
+ }
204
+
205
+ return superTypesVerified;
206
+ }
207
+
174
208
  verifyPropertyType(propertyType) {
175
209
  let propertyTypeVerified = false;
176
210
 
177
211
  if (propertyType === objectType) {
178
212
  propertyTypeVerified = true;
179
213
  } else {
180
- const propertyTypeString = propertyType.getString(); ///
214
+ const typeName = this.type.getName(),
215
+ propertyTypeName = propertyType.getName();
181
216
 
182
- this.fileContext.trace(`Verifying the '${propertyTypeString}' property type...`);
217
+ if (typeName === propertyTypeName) {
218
+ propertyTypeVerified = true;
219
+ } else {
220
+ const propertyTypeString = propertyType.getString(); ///
183
221
 
184
- const propertyTypeName = propertyType.getName(),
185
- propertyTypePresent = this.fileContext.isTypePresentByTypeName(propertyTypeName);
222
+ this.fileContext.trace(`Verifying the '${propertyTypeString}' property type...`);
186
223
 
187
- if (!propertyTypePresent) {
188
- const propertyTypeString = propertyType.getString();
224
+ const propertyTypePresent = this.fileContext.isTypePresentByTypeName(propertyTypeName);
189
225
 
190
- this.fileContext.debug(`The '${propertyTypeString}' property type is not present.`);
191
- } else {
192
- propertyTypeVerified = true;
193
- }
226
+ if (!propertyTypePresent) {
227
+ const propertyTypeString = propertyType.getString();
228
+
229
+ this.fileContext.debug(`The '${propertyTypeString}' property type is not present.`);
230
+ } else {
231
+ propertyTypeVerified = true;
232
+ }
194
233
 
195
- if (propertyTypeVerified) {
196
- this.fileContext.debug(`...verified the '${propertyTypeString}' property type.`);
234
+ if (propertyTypeVerified) {
235
+ this.fileContext.debug(`...verified the '${propertyTypeString}' property type.`);
236
+ }
197
237
  }
198
238
  }
199
239
 
@@ -3,6 +3,7 @@
3
3
  import dom from "../../dom";
4
4
 
5
5
  import { domAssigned } from "../../dom";
6
+ import {objectType} from "../type";
6
7
 
7
8
  export default domAssigned(class TypeDeclaration {
8
9
  constructor(fileContext, string, type) {
@@ -33,9 +34,27 @@ export default domAssigned(class TypeDeclaration {
33
34
  const typeVerified = this.verifyType();
34
35
 
35
36
  if (typeVerified) {
36
- this.fileContext.addType(this.type);
37
+ const superTypesVerified = this.verifySuperTypes();
37
38
 
38
- verified = true;
39
+ if (superTypesVerified) {
40
+ let superTypes;
41
+
42
+ superTypes = this.type.getSuperTypes();
43
+
44
+ superTypes = superTypes.map((superType) => {
45
+ const superTypeName = superType.getName();
46
+
47
+ superType = this.fileContext.findTypeByTypeName(superTypeName);
48
+
49
+ return superType;
50
+ });
51
+
52
+ this.type.setSuperTypes(superTypes);
53
+
54
+ this.fileContext.addType(this.type);
55
+
56
+ verified = true;
57
+ }
39
58
  }
40
59
 
41
60
  if (verified) {
@@ -55,32 +74,44 @@ export default domAssigned(class TypeDeclaration {
55
74
  const typePresent = this.fileContext.isTypePresentByTypeName(typeName);
56
75
 
57
76
  if (typePresent) {
58
- this.fileContext.debug(`The type '${typeName}' is not present.`);
77
+ this.fileContext.debug(`The type '${typeName}' is already present.`);
59
78
  } else {
60
- const superTypes = this.type.getSuperTypes();
79
+ typeVerified = true;
80
+ }
81
+
82
+ if (typeVerified) {
83
+ this.fileContext.debug(`...verified the '${typeName}' type.`);
84
+ }
85
+
86
+ return typeVerified;
87
+ }
88
+
89
+ verifySuperTypes() {
90
+ let superTypesVerified = true;
61
91
 
62
- this.type.resetSuperTypes();
92
+ const superTypes = this.type.getSuperTypes(),
93
+ superTypesString = superTypesStringFromSuperTypes(superTypes);
63
94
 
64
- typeVerified = superTypes.every((superType) => {
65
- const superTypeName = superTypes.getName();
95
+ if (superTypesString !== null) {
96
+ const typeName = this.type.getString();
66
97
 
67
- superType = this.fileContext.findTypeByTypeName(superTypeName);
98
+ this.fileContext.trace(`Verifying the '${typeName}' type's ${superTypesString} super types...`);
68
99
 
69
- if (superType === null) {
70
- this.fileContext.debug(`The super-type '${superTypeName}' is not present.`);
71
- } else {
72
- this.type.addSuperType(superType);
100
+ superTypesVerified = superTypes.every((superType) => {
101
+ const superTypeName = superType.getName(),
102
+ superTypePresent = this.fileContext.isTypePresentByTypeName(superTypeName);
73
103
 
104
+ if (superTypePresent) {
74
105
  return true;
75
106
  }
76
107
  });
77
- }
78
108
 
79
- if (typeVerified) {
80
- this.fileContext.debug(`...typeVerified the '${typeName}' type.`);
109
+ if (superTypesVerified) {
110
+ this.fileContext.debug(`...verified the '${typeName}' type's ${superTypesString} super types.`);
111
+ }
81
112
  }
82
113
 
83
- return typeVerified;
114
+ return superTypesVerified;
84
115
  }
85
116
 
86
117
  static name = "TypeDeclaration";
@@ -95,3 +126,20 @@ export default domAssigned(class TypeDeclaration {
95
126
  return typeDeclaration;
96
127
  }
97
128
  });
129
+
130
+ export function superTypesStringFromSuperTypes(superTypes) {
131
+ const superTypesString = superTypes.reduce((superTypesString, superType) => {
132
+ if (superType !== objectType) {
133
+ const superTypeName = superType.getName();
134
+
135
+ superTypesString = (superTypesString === null) ?
136
+ `'${superTypeName}'` :
137
+ `${superTypesString}, '${superTypeName}'`;
138
+ }
139
+
140
+ return superTypesString;
141
+ }, null);
142
+
143
+ return superTypesString;
144
+ }
145
+
package/src/dom/type.js CHANGED
@@ -10,13 +10,14 @@ import { OBJECT_TYPE_NAME } from "../typeNames";
10
10
  import { typeNameFromTypeNode } from "../utilities/name";
11
11
  import { nodeQuery, nodesQuery } from "../utilities/query";
12
12
  import { superTypesFromJSON, propertiesFromJSON, superTypesToSuperTypesJSON, propertiesToPropertiesJSON } from "../utilities/json";
13
+ import object from "occam-furtle/lib/dom/assignment/object";
13
14
 
14
15
  const { push } = arrayUtilities;
15
16
 
16
- const typeDeclarationTypeNodeQuery = nodeQuery("/typeDeclaration|complexTypeDeclaration/type[0]"),
17
+ const typeDeclarationTypeNodeQuery = nodeQuery("/typeDeclaration|complexTypeDeclaration/type"),
17
18
  propertyDeclarationNodesQuery = nodesQuery("/complexTypeDeclaration/propertyDeclaration"),
18
19
  propertyDeclarationTypeNodeQuery = nodeQuery("/propertyDeclaration/type"),
19
- typeDeclarationSuperTypeNodesQuery = nodesQuery("/typeDeclaration|complexTypeDeclaration/type[1]"),
20
+ typeDeclarationSuperTypeNodesQuery = nodesQuery("/typeDeclaration|complexTypeDeclaration/types/type"),
20
21
  firstPrimaryKeywordTerminalNodeQuery = nodeQuery("/typeDeclaration|complexTypeDeclaration/@primary-keyword[0]"),
21
22
  variableDeclarationSuperTypeNodeQuery = nodeQuery("/variableDeclaration/type");
22
23
 
@@ -81,14 +82,6 @@ class Type {
81
82
  this.provisional = provisional;
82
83
  }
83
84
 
84
- resetSuperTypes() {
85
- this.superTypes = [];
86
- }
87
-
88
- addSuperTypes(superType) {
89
- this.superTypes.push(superType);
90
- }
91
-
92
85
  isEqualTo(type) {
93
86
  const equalTo = (this === type);
94
87
 
@@ -295,20 +288,10 @@ export default domAssigned(Type);
295
288
  function stringFromNameAndSuperTypes(name, superTypes) {
296
289
  let string = name; ///
297
290
 
298
- const superTypesString = superTypes.reduce((superTypesString, superType) => {
299
- if (superType !== objectType) {
300
- const superTypeName = superType.getName();
301
-
302
- superTypesString = (superTypesString === null) ?
303
- superTypeName :
304
- `${superTypesString}, ${superTypeName}`;
305
- }
306
-
307
- return superTypesString;
308
- }, null);
291
+ const superTypesString = superTypesStringFromSuperTypes(superTypes);
309
292
 
310
293
  if (superTypesString !== null) {
311
- string = `${string}:${superTypeString}`;
294
+ string = `${string}:${superTypesString}`;
312
295
  }
313
296
 
314
297
  return string;
@@ -323,6 +306,22 @@ function nameFromTypeDeclarationNode(typeDeclarationNode, fileContext) {
323
306
  return name;
324
307
  }
325
308
 
309
+ function superTypesStringFromSuperTypes(superTypes) {
310
+ const superTypesString = superTypes.reduce((superTypesString, superType) => {
311
+ if (superType !== objectType) {
312
+ const superTypeName = superType.getName();
313
+
314
+ superTypesString = (superTypesString === null) ?
315
+ superTypeName :
316
+ `${superTypesString}, ${superTypeName}`;
317
+ }
318
+
319
+ return superTypesString;
320
+ }, null);
321
+
322
+ return superTypesString;
323
+ }
324
+
326
325
  function superTypesFromTypeDeclarationNode(typeDeclarationNode, fileContext) {
327
326
  const typeDeclarationSuperTypeNodes = typeDeclarationSuperTypeNodesQuery(typeDeclarationNode),
328
327
  superTypes = typeDeclarationSuperTypeNodes.map((typeDeclarationSuperTypeNode) => {
@@ -360,7 +359,12 @@ function superTypesFromComplexTypeDeclarationNode(complexTypeDeclarationNode, fi
360
359
  superType = Type.fromTypeNode(superTypeNode);
361
360
 
362
361
  return superType;
363
- });
362
+ }),
363
+ superTypesLength = superTypes.length;
364
+
365
+ if (superTypesLength === 0) {
366
+ superTypes.push(objectType);
367
+ }
364
368
 
365
369
  return superTypes;
366
370
  }