occam-nominal 1.0.309 → 1.0.310

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.
Files changed (37) hide show
  1. package/lib/context/file/nominal.js +2 -2
  2. package/lib/element/assertion/subproof.js +4 -4
  3. package/lib/element/derivation.js +3 -3
  4. package/lib/element/frame.js +3 -3
  5. package/lib/element/procedureCall.js +25 -25
  6. package/lib/element/proofAssertion/premise.js +26 -19
  7. package/lib/element/proofAssertion/step.js +4 -4
  8. package/lib/element/proofAssertion/supposition.js +4 -5
  9. package/lib/element/rule.js +12 -12
  10. package/lib/element/subDerivation.js +3 -3
  11. package/lib/element/subproof.js +5 -5
  12. package/lib/element/topLevelAssertion.js +5 -5
  13. package/lib/pass/continuationZip.js +2 -2
  14. package/lib/process/unify.js +9 -9
  15. package/lib/process/validate.js +9 -9
  16. package/lib/process/validation.js +4 -4
  17. package/lib/process/verify.js +18 -18
  18. package/lib/utilities/continuation.js +5 -5
  19. package/package.json +3 -3
  20. package/src/context/file/nominal.js +1 -1
  21. package/src/element/assertion/subproof.js +3 -3
  22. package/src/element/derivation.js +2 -2
  23. package/src/element/frame.js +2 -2
  24. package/src/element/procedureCall.js +28 -29
  25. package/src/element/proofAssertion/premise.js +32 -23
  26. package/src/element/proofAssertion/step.js +3 -3
  27. package/src/element/proofAssertion/supposition.js +5 -5
  28. package/src/element/rule.js +11 -11
  29. package/src/element/subDerivation.js +2 -2
  30. package/src/element/subproof.js +4 -4
  31. package/src/element/topLevelAssertion.js +4 -4
  32. package/src/pass/continuationZip.js +1 -1
  33. package/src/process/unify.js +8 -8
  34. package/src/process/validate.js +8 -8
  35. package/src/process/validation.js +3 -3
  36. package/src/process/verify.js +17 -17
  37. package/src/utilities/continuation.js +4 -4
@@ -150,8 +150,8 @@ const _default = (0, _elements.define)(class Frame extends _occamlanguages.Eleme
150
150
  const frameString = this.getString();
151
151
  context.trace(`Validating the '${frameString}' frame's assumptions...`);
152
152
  const assumptions = [];
153
- every(this.assumptions, (assumption)=>{
154
- this.validateAssumption(assumption, assumptions, context, continuation);
153
+ return every(this.assumptions, (assumption)=>{
154
+ return this.validateAssumption(assumption, assumptions, context, continuation);
155
155
  }, (assumptionsValidate)=>{
156
156
  if (assumptionsValidate) {
157
157
  this.assumptions = assumptions;
@@ -248,4 +248,4 @@ function assumptionsFromFrameNode(frameNode, context) {
248
248
  return assumptions;
249
249
  }
250
250
 
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0RnJhbWVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5hbWUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBmcmFtZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzSW1wbGljaXQoKSB7XG4gICAgY29uc3QgaW1wbGljaXQgPSAodGhpcy5tZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gZnJhbWVOb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVCID0gdGhpcy5tZXRhdmFyaWFibGUsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIG1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFZhbGlkRnJhbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgdmFsaWRGcmFtZSA9IGZyYW1lOyAvLy9cblxuICAgIHJldHVybiB2YWxpZEZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEZyYW1lID0gdGhpcy5maW5kVmFsaWRGcmFtZShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHZhbGlkRnJhbWU7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0TWV0YXZhcmlhYmxlID0gdGhpcy52YWxpZGF0TWV0YXZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9ucyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgYWxsKFtcbiAgICAgIHZhbGlkYXRNZXRhdmFyaWFibGUsXG4gICAgICB2YWxpZGF0ZUFzc3VtcHRpb25zXG4gICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGZyYW1lID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEZyYW1lKGZyYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgYXNzdW1wdGlvbi52YWxpZGF0ZShjb250ZXh0LCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgbGV0IGFzc3VtcHRpb25WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgYXNzdW1wdGlvbnMucHVzaChhc3N1bXB0aW9uKTtcblxuICAgICAgICBhc3N1bXB0aW9uVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzc3VtcHRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvblZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUFzc3VtcHRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBhc3N1bXB0aW9ucy4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIGV2ZXJ5KHRoaXMuYXNzdW1wdGlvbnMsIChhc3N1bXB0aW9uKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlQXNzdW1wdGlvbihhc3N1bXB0aW9uLCBhc3N1bXB0aW9ucywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoYXNzdW1wdGlvbnNWYWxpZGF0ZSkgPT4ge1xuICAgICAgaWYgKGFzc3VtcHRpb25zVmFsaWRhdGUpIHtcbiAgICAgICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIGFzc3VtcHRpb25zLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGFzc3VtcHRpb25zVmFsaWRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdE1ldGF2YXJpYWJsZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy5tZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRydWU7IC8vL1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKG1ldGF2YXJpYWJsZVZhbGlkYXRlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIHRoaXMubWV0YXZhcmlhYmxlLnZhbGlkYXRlKGNvbnRleHQsIChtZXRhdmFyaWFibGUpID0+IHtcbiAgICAgIGxldCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBtZXRhVHlwZU5hbWUgPSBGUkFNRV9NRVRBX1RZUEVfTkFNRSxcbiAgICAgICAgICAgICAgZnJhbWVNZXRhVHlwZSA9IGNvbnRleHQuZmluZE1ldGFUeXBlQnlNZXRhVHlwZU5hbWUobWV0YVR5cGVOYW1lKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSA9IG1ldGF2YXJpYWJsZS5pc01ldGFUeXBlRXF1YWxUbyhmcmFtZU1ldGFUeXBlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSkge1xuICAgICAgICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlOyAvLy9cblxuICAgICAgICAgIG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBtZXRhdmFyaWFibGUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obWV0YXZhcmlhYmxlVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkO1xuXG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZS4uLmApO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmICghc2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke2ZyYW1lU3RyaW5nfScgc3RhdGVkIGZyYW1lIG11c3QgYmUgc2luZ3VsYXIuYCk7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVzV2hlblN0YXRlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIHN0YXRlZCBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBkZXJpdmVkIGZyYW1lLi4uYCk7XG5cbiAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGRlcml2ZWQgZnJhbWUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiRnJhbWVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBmcmFtZU5vZGUgPSBpbnN0YW50aWF0ZUZyYW1lKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gZnJhbWVOb2RlLCAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBhc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgRnJhbWUoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBhc3N1bXB0aW9ucywgbWV0YXZhcmlhYmxlKTtcblxuICAgICAgcmV0dXJuIGZyYW1lO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBhc3N1bXB0aW9uTm9kZXMgPSBmcmFtZU5vZGUuZ2V0QXNzdW1wdGlvbk5vZGVzKCksXG4gICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbk5vZGVzLm1hcCgoYXNzdW1wdGlvbk5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCBhc3N1bXB0aW9uID0gY29udGV4dC5maW5kQXNzdW1wdGlvbkJ5QXNzdW1wdGlvbk5vZGUoYXNzdW1wdGlvbk5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIGFzc3VtcHRpb247XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiBhc3N1bXB0aW9ucztcbn1cbiJdLCJuYW1lcyI6WyJldmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkZyYW1lIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsImFzc3VtcHRpb25zIiwibWV0YXZhcmlhYmxlIiwiZ2V0QXNzdW1wdGlvbnMiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRGcmFtZU5vZGUiLCJnZXROb2RlIiwiZnJhbWVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsInNpbmd1bGFyIiwiaXNTaW5ndWxhciIsImdldE5hbWUiLCJpc0VxdWFsVG8iLCJmcmFtZSIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsImVxdWFsVG8iLCJpc0ltcGxpY2l0IiwiaW1wbGljaXQiLCJpc01ldGF2YXJpYWJsZURlZmluZWQiLCJtZXRhdmFyaWFibGVEZWZpbmVkIiwibWV0YXZhcmlhYmxlQSIsIm1ldGF2YXJpYWJsZUIiLCJtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlck5hbWUiLCJmaW5kVmFsaWRGcmFtZSIsImZpbmRGcmFtZUJ5RnJhbWVOb2RlIiwidmFsaWRGcmFtZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwiZnJhbWVTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdE1ldGF2YXJpYWJsZSIsImJpbmQiLCJ2YWxpZGF0ZUFzc3VtcHRpb25zIiwiYWxsIiwidmFsaWRhdGVzIiwidmFsaWRhdGVzV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlc1doZW5EZXJpdmVkIiwidmFsaWRhdGVXaGVuRGVyaXZlZCIsImV4aXN0cyIsImFkZEZyYW1lIiwidmFsaWRhdGVBc3N1bXB0aW9uIiwiYXNzdW1wdGlvbiIsImFzc3VtcHRpb25TdHJpbmciLCJhc3N1bXB0aW9uVmFsaWRhdGVzIiwicHVzaCIsImFzc3VtcHRpb25zVmFsaWRhdGUiLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXMiLCJtZXRhVHlwZU5hbWUiLCJGUkFNRV9NRVRBX1RZUEVfTkFNRSIsImZyYW1lTWV0YVR5cGUiLCJmaW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZSIsIm1ldGF2YXJpYWJsZU1ldGFUeXBlRXF1YWxUb0ZyYW1lTWV0YVR5cGUiLCJpc01ldGFUeXBlRXF1YWxUbyIsInN0YXRlZCIsImlzU3RhdGVkIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVGcmFtZSIsImFzc3VtcHRpb25zRnJvbUZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZUZyb21GcmFtZU5vZGUiLCJhc3N1bXB0aW9uTm9kZXMiLCJnZXRBc3N1bXB0aW9uTm9kZXMiLCJtYXAiLCJhc3N1bXB0aW9uTm9kZSIsImZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWm9FOzBCQUU3Qzt5QkFDSzs4QkFDQTs2QkFDSzsrQkFDSTt5QkFDSztBQUUxQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5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
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2ZyYW1lLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGFsbCwgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlRnJhbWUgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUgfSBmcm9tIFwiLi4vbWV0YVR5cGVOYW1lc1wiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBGcmFtZSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5hc3N1bXB0aW9ucyA9IGFzc3VtcHRpb25zO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0QXNzdW1wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXNzdW1wdGlvbnM7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0RnJhbWVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgbGV0IG1ldGF2YXJpYWJsZU5hbWUgPSBudWxsO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhmcmFtZSkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lLmdldE5vZGUoKSxcbiAgICAgICAgICBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBmcmFtZU5vZGVNYXRjaGVzOyAgLy8vXG5cbiAgICByZXR1cm4gZXF1YWxUbztcbiAgfVxuXG4gIGlzSW1wbGljaXQoKSB7XG4gICAgY29uc3QgaW1wbGljaXQgPSAodGhpcy5tZXRhdmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIGltcGxpY2l0O1xuICB9XG5cbiAgaXNTaW5ndWxhcigpIHtcbiAgICBjb25zdCBmcmFtZU5vZGUgPSB0aGlzLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gZnJhbWVOb2RlLmlzU2luZ3VsYXIoKTtcblxuICAgIHJldHVybiBzaW5ndWxhcjtcbiAgfVxuXG4gIGlzTWV0YXZhcmlhYmxlRGVmaW5lZChtZXRhdmFyaWFibGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMubWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVBID0gbWV0YXZhcmlhYmxlLCAgLy8vXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVCID0gdGhpcy5tZXRhdmFyaWFibGUsXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVBRXF1YWxUb01ldGF2YXJpYWJsZUIgPSBtZXRhdmFyaWFibGVBLmlzRXF1YWxUbyhtZXRhdmFyaWFibGVCKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQikge1xuICAgICAgICBtZXRhdmFyaWFibGVEZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIG1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgIG5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE5vZGUobm9kZSksXG4gICAgICAgICAgZnJhbWVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpbmd1bGFyID0gdGhpcy5pc1Npbmd1bGFyKCk7XG5cbiAgICBpZiAoc2luZ3VsYXIpIHtcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlci5nZXROYW1lKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICBpZiAocGFyYW1ldGVyTmFtZSA9PT0gbWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFZhbGlkRnJhbWUoY29udGV4dCkge1xuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHRoaXMuZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgdmFsaWRGcmFtZSA9IGZyYW1lOyAvLy9cblxuICAgIHJldHVybiB2YWxpZEZyYW1lO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZEZyYW1lID0gdGhpcy5maW5kVmFsaWRGcmFtZShjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZEZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHZhbGlkRnJhbWU7IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi50aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0TWV0YXZhcmlhYmxlID0gdGhpcy52YWxpZGF0TWV0YXZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVBc3N1bXB0aW9ucyA9IHRoaXMudmFsaWRhdGVBc3N1bXB0aW9ucy5iaW5kKHRoaXMpO1xuXG4gICAgYWxsKFtcbiAgICAgIHZhbGlkYXRNZXRhdmFyaWFibGUsXG4gICAgICB2YWxpZGF0ZUFzc3VtcHRpb25zXG4gICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBudWxsO1xuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24oZnJhbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIGV4aXN0cyhbXG4gICAgICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQsXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCBmcmFtZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGZyYW1lID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZEZyYW1lKGZyYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGZyYW1lKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGFzc3VtcHRpb25TdHJpbmcgPSBhc3N1bXB0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzICcke2Fzc3VtcHRpb25TdHJpbmd9JyBhc3N1bXB0aW9uLmApO1xuXG4gICAgYXNzdW1wdGlvbi52YWxpZGF0ZShjb250ZXh0LCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgbGV0IGFzc3VtcHRpb25WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGFzc3VtcHRpb24gIT09IG51bGwpIHtcbiAgICAgICAgYXNzdW1wdGlvbnMucHVzaChhc3N1bXB0aW9uKTtcblxuICAgICAgICBhc3N1bXB0aW9uVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzc3VtcHRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgJyR7YXNzdW1wdGlvblN0cmluZ30nIGFzc3VtcHRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvblZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUFzc3VtcHRpb25zKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgZnJhbWUncyBhc3N1bXB0aW9ucy4uLmApO1xuXG4gICAgY29uc3QgYXNzdW1wdGlvbnMgPSBbXTtcblxuICAgIHJldHVybiBldmVyeSh0aGlzLmFzc3VtcHRpb25zLCAoYXNzdW1wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBc3N1bXB0aW9uKGFzc3VtcHRpb24sIGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0sIChhc3N1bXB0aW9uc1ZhbGlkYXRlKSA9PiB7XG4gICAgICBpZiAoYXNzdW1wdGlvbnNWYWxpZGF0ZSkge1xuICAgICAgICB0aGlzLmFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnM7XG5cbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lJ3MgYXNzdW1wdGlvbnMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oYXNzdW1wdGlvbnNWYWxpZGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0TWV0YXZhcmlhYmxlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLm1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obWV0YXZhcmlhYmxlVmFsaWRhdGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgdGhpcy5tZXRhdmFyaWFibGUudmFsaWRhdGUoY29udGV4dCwgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgICAgbGV0IG1ldGF2YXJpYWJsZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTmFtZSA9IEZSQU1FX01FVEFfVFlQRV9OQU1FLFxuICAgICAgICAgICAgICBmcmFtZU1ldGFUeXBlID0gY29udGV4dC5maW5kTWV0YVR5cGVCeU1ldGFUeXBlTmFtZShtZXRhVHlwZU5hbWUpLFxuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9GcmFtZU1ldGFUeXBlID0gbWV0YXZhcmlhYmxlLmlzTWV0YVR5cGVFcXVhbFRvKGZyYW1lTWV0YVR5cGUpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVNZXRhVHlwZUVxdWFsVG9GcmFtZU1ldGFUeXBlKSB7XG4gICAgICAgICAgdGhpcy5tZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGU7IC8vL1xuXG4gICAgICAgICAgbWV0YXZhcmlhYmxlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSdzIG1ldGF2YXJpYWJsZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihtZXRhdmFyaWFibGVWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmICghc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG5cbiAgICBjb25zdCBmcmFtZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2ZyYW1lU3RyaW5nfScgc3RhdGVkIGZyYW1lLi4uYCk7XG5cbiAgICBjb25zdCBzaW5ndWxhciA9IHRoaXMuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCFzaW5ndWxhcikge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZnJhbWVTdHJpbmd9JyBzdGF0ZWQgZnJhbWUgbXVzdCBiZSBzaW5ndWxhci5gKTtcblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuU3RhdGVkKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuU3RhdGVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgc3RhdGVkIGZyYW1lLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlZCA9IGNvbnRleHQuaXNTdGF0ZWQoKTtcblxuICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtmcmFtZVN0cmluZ30nIGRlcml2ZWQgZnJhbWUuLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2ZyYW1lU3RyaW5nfScgZGVyaXZlZCBmcmFtZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJGcmFtZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIGZyYW1lTm9kZSA9IGluc3RhbnRpYXRlRnJhbWUoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgIG5vZGUgPSBmcmFtZU5vZGUsIC8vL1xuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICAgIGFzc3VtcHRpb25zID0gYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBGcmFtZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGFzc3VtcHRpb25zLCBtZXRhdmFyaWFibGUpO1xuXG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBhc3N1bXB0aW9uc0Zyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IGFzc3VtcHRpb25Ob2RlcyA9IGZyYW1lTm9kZS5nZXRBc3N1bXB0aW9uTm9kZXMoKSxcbiAgICAgICAgYXNzdW1wdGlvbnMgPSBhc3N1bXB0aW9uTm9kZXMubWFwKChhc3N1bXB0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc3VtcHRpb24gPSBjb250ZXh0LmZpbmRBc3N1bXB0aW9uQnlBc3N1bXB0aW9uTm9kZShhc3N1bXB0aW9uTm9kZSk7XG5cbiAgICAgICAgICByZXR1cm4gYXNzdW1wdGlvbjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIGFzc3VtcHRpb25zO1xufVxuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiRnJhbWUiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwiYXNzdW1wdGlvbnMiLCJtZXRhdmFyaWFibGUiLCJnZXRBc3N1bXB0aW9ucyIsImdldE1ldGF2YXJpYWJsZSIsImdldEZyYW1lTm9kZSIsImdldE5vZGUiLCJmcmFtZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwic2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwiZ2V0TmFtZSIsImlzRXF1YWxUbyIsImZyYW1lIiwiZnJhbWVOb2RlTWF0Y2hlcyIsIm1hdGNoRnJhbWVOb2RlIiwiZXF1YWxUbyIsImlzSW1wbGljaXQiLCJpbXBsaWNpdCIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZURlZmluZWQiLCJtZXRhdmFyaWFibGVBIiwibWV0YXZhcmlhYmxlQiIsIm1ldGF2YXJpYWJsZUFFcXVhbFRvTWV0YXZhcmlhYmxlQiIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwicGFyYW1ldGVyTmFtZSIsImZpbmRWYWxpZEZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJ2YWxpZEZyYW1lIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJmcmFtZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJ2YWxpZGF0TWV0YXZhcmlhYmxlIiwiYmluZCIsInZhbGlkYXRlQXNzdW1wdGlvbnMiLCJhbGwiLCJ2YWxpZGF0ZXMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwiYWRkRnJhbWUiLCJ2YWxpZGF0ZUFzc3VtcHRpb24iLCJhc3N1bXB0aW9uIiwiYXNzdW1wdGlvblN0cmluZyIsImFzc3VtcHRpb25WYWxpZGF0ZXMiLCJwdXNoIiwiYXNzdW1wdGlvbnNWYWxpZGF0ZSIsIm1ldGF2YXJpYWJsZVZhbGlkYXRlcyIsIm1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVNZXRhVHlwZSIsImZpbmRNZXRhVHlwZUJ5TWV0YVR5cGVOYW1lIiwibWV0YXZhcmlhYmxlTWV0YVR5cGVFcXVhbFRvRnJhbWVNZXRhVHlwZSIsImlzTWV0YVR5cGVFcXVhbFRvIiwic3RhdGVkIiwiaXNTdGF0ZWQiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUZyYW1lIiwiYXNzdW1wdGlvbnNGcm9tRnJhbWVOb2RlIiwibWV0YXZhcmlhYmxlRnJvbUZyYW1lTm9kZSIsImFzc3VtcHRpb25Ob2RlcyIsImdldEFzc3VtcHRpb25Ob2RlcyIsIm1hcCIsImFzc3VtcHRpb25Ob2RlIiwiZmluZEFzc3VtcHRpb25CeUFzc3VtcHRpb25Ob2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0Fab0U7MEJBRTdDO3lCQUNLOzhCQUNBOzZCQUNLOytCQUNJO3lCQUNLO0FBRTFDLE1BQU0sRUFBRUEsS0FBSyxFQUFFLEdBQUdDLHFDQUFxQixFQUNqQyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FB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
@@ -19,7 +19,7 @@ function _interop_require_default(obj) {
19
19
  default: obj
20
20
  };
21
21
  }
22
- const { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
22
+ const { breakable, breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
23
23
  const _default = (0, _elements.define)(class ProcedureCall extends _occamlanguages.Element {
24
24
  constructor(context, string, node, breakPoint, parameters, procedureReference){
25
25
  super(context, string, node, breakPoint);
@@ -44,7 +44,7 @@ const _default = (0, _elements.define)(class ProcedureCall extends _occamlanguag
44
44
  return unary;
45
45
  }
46
46
  findValues(context) {
47
- const substitutions = context.getSubstitutions(), values = this.parameters.map((parameter)=>{
47
+ const derivedSubstitutions = context.getDerivedSubstitutions(), substitutions = derivedSubstitutions, values = this.parameters.map((parameter)=>{
48
48
  const value = parameter.findValue(substitutions);
49
49
  return value;
50
50
  });
@@ -70,35 +70,35 @@ const _default = (0, _elements.define)(class ProcedureCall extends _occamlanguag
70
70
  }
71
71
  continuation(validates);
72
72
  }
73
- async unifyIndependently(context) {
74
- let unifiesIndependently = false;
73
+ unifyIndependently = breakable(function(context, continuation) {
75
74
  const procedureCallString = this.getString(); ///
76
75
  context.trace(`Unifying the '${procedureCallString}' procedure call independently...`);
77
76
  const procedureName = this.getProcedureName(), procedure = context.findProcedureByProcedureName(procedureName), values = this.findValues(context);
78
- let term = null;
79
77
  try {
80
- term = await procedure.callNominally(values);
78
+ return procedure.callNominally(values, (term)=>{
79
+ let unifiesIndependently = false;
80
+ if (term !== null) {
81
+ const boolean = term.isBoolean();
82
+ if (!boolean) {
83
+ context.info(`The '${procedureCallString}' procedure call did not return a boolean.`);
84
+ } else {
85
+ const primitiveValue = term.getPrimitiveValue();
86
+ if (primitiveValue) {
87
+ unifiesIndependently = true;
88
+ }
89
+ }
90
+ }
91
+ if (unifiesIndependently) {
92
+ context.debug(`...unified the '${procedureCallString}' procedure call independently.`);
93
+ }
94
+ return continuation(unifiesIndependently);
95
+ });
81
96
  } catch (exception) {
82
97
  const message = exception.getMessage();
83
98
  context.info(message);
84
99
  }
85
- if (term !== null) {
86
- const boolean = term.isBoolean();
87
- if (!boolean) {
88
- context.info(`The '${procedureCallString}' procedure call did not return a boolean.`);
89
- } else {
90
- const primitiveValue = term.getPrimitiveValue();
91
- if (primitiveValue) {
92
- unifiesIndependently = true;
93
- }
94
- }
95
- }
96
- if (unifiesIndependently) {
97
- context.debug(`...unified the '${procedureCallString}' procedure call independently.`);
98
- }
99
- return unifiesIndependently;
100
- }
101
- async dischargeGivenTerm(term, context) {
100
+ });
101
+ dischargeGivenTerm(term, context) {
102
102
  let dischargedGivenTerm = false;
103
103
  const termString = term.getString(), procedureCallString = this.getString(); ///
104
104
  context.trace(`Discharging the '${procedureCallString}' procedure call given the '${termString}' term...`);
@@ -109,7 +109,7 @@ const _default = (0, _elements.define)(class ProcedureCall extends _occamlanguag
109
109
  ];
110
110
  term = null;
111
111
  try {
112
- term = await procedure.callNominally(values);
112
+ term = procedure.callNominally(values);
113
113
  } catch (exception) {
114
114
  const message = exception.getMessage();
115
115
  context.info(message);
@@ -156,4 +156,4 @@ const _default = (0, _elements.define)(class ProcedureCall extends _occamlanguag
156
156
  }
157
157
  });
158
158
 
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb2NlZHVyZUNhbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBWYWx1ZSBmcm9tIFwiLi4vdmFsdWVcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcm9jZWR1cmVDYWxsIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUsIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBQcm9jZWR1cmVDYWxsIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgcGFyYW1ldGVycywgcHJvY2VkdXJlUmVmZXJlbmNlKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMucGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnM7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlQ2FsbE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGxOb2RlID0gbm9kZTtcblxuICAgIHJldHVybiBwcm9jZWR1cmVDYWxsTm9kZTtcbiAgfVxuXG4gIGdldFByb2NlZHVyZU5hbWUoKSB7IHJldHVybiB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZS5nZXRQcm9jZWR1cmVOYW1lKCk7IH1cblxuICBpc1VuYXJ5KCkge1xuICAgIGNvbnN0IHBhcmFtZXRlcnNMZW5ndGggPSB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoLFxuICAgICAgICAgIHVuYXJ5ID0gKHBhcmFtZXRlcnNMZW5ndGggPT09IDEpO1xuXG4gICAgcmV0dXJuIHVuYXJ5O1xuICB9XG5cbiAgZmluZFZhbHVlcyhjb250ZXh0KSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIHZhbHVlcyA9IHRoaXMucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIuZmluZFZhbHVlKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgaWYgKHByb2NlZHVyZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvY2VkdXJlQm9vbGVhbiA9IHByb2NlZHVyZS5pc0Jvb2xlYW4oKTtcblxuICAgICAgaWYgKHByb2NlZHVyZUJvb2xlYW4pIHtcbiAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGlzIG5vdCBib29sZWFuLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbC5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzKTtcbiAgfVxuXG4gIGFzeW5jIHVuaWZ5SW5kZXBlbmRlbnRseShjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVDYWxsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHByb2NlZHVyZU5hbWUgPSB0aGlzLmdldFByb2NlZHVyZU5hbWUoKSxcbiAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgdmFsdWVzID0gdGhpcy5maW5kVmFsdWVzKGNvbnRleHQpO1xuXG4gICAgbGV0IHRlcm0gPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRlcm0gPSBhd2FpdCBwcm9jZWR1cmUuY2FsbE5vbWluYWxseSh2YWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCk7XG5cbiAgICAgIGNvbnRleHQuaW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9vbGVhbiA9IHRlcm0uaXNCb29sZWFuKCk7XG5cbiAgICAgIGlmICghYm9vbGVhbikge1xuICAgICAgICBjb250ZXh0LmluZm8oYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJpbWl0aXZlVmFsdWUgPSB0ZXJtLmdldFByaW1pdGl2ZVZhbHVlKCk7XG5cbiAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgaW5kZXBlbmRlbnRseS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pZmllc0luZGVwZW5kZW50bHk7XG4gIH1cblxuICBhc3luYyBkaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCkge1xuICAgIGxldCBkaXNjaGFyZ2VkR2l2ZW5UZXJtID0gZmFsc2U7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBEaXNjaGFyZ2luZyB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIGdpdmVuIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgY29uc3QgdW5hcnkgPSB0aGlzLmlzVW5hcnkoKTtcblxuICAgIGlmICghdW5hcnkpIHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZU5hbWUgPSB0aGlzLmdldFByb2NlZHVyZU5hbWUoKSxcbiAgICAgICAgICAgIHByb2NlZHVyZSA9IGNvbnRleHQuZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZShwcm9jZWR1cmVOYW1lKSxcbiAgICAgICAgICAgIHZhbHVlID0gVmFsdWUuZnJvbVRlcm0odGVybSwgY29udGV4dCksXG4gICAgICAgICAgICB2YWx1ZXMgPSBbXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICBdO1xuXG4gICAgICB0ZXJtID0gbnVsbDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGVybSA9IGF3YWl0IHByb2NlZHVyZS5jYWxsTm9taW5hbGx5KHZhbHVlcyk7XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCk7XG5cbiAgICAgICAgY29udGV4dC5pbmZvKG1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBib29sZWFuID0gdGVybS5pc0Jvb2xlYW4oKTtcblxuICAgICAgICBpZiAoIWJvb2xlYW4pIHtcbiAgICAgICAgICBjb250ZXh0LmluZm8oYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByaW1pdGl2ZVZhbHVlID0gdGVybS5nZXRQcmltaXRpdmVWYWx1ZSgpO1xuXG4gICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICBkaXNjaGFyZ2VkR2l2ZW5UZXJtID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBpcyBub3QgdW5hcnkuYCk7XG4gICAgfVxuXG4gICAgaWYgKGRpc2NoYXJnZWRHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc2NoYXJnZWRHaXZlblRlcm07XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJvY2VkdXJlQ2FsbFwiO1xuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBqc29uID0ge1xuICAgICAgc3RyaW5nLFxuICAgICAgYnJlYWtQb2ludFxuICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGxOb2RlID0gaW5zdGFudGlhdGVQcm9jZWR1cmVDYWxsKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gcHJvY2VkdXJlQ2FsbE5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVyc0Zyb21Qcm9jZWR1cmVDYWxsTm9kZShqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZShqc29uLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIGNvbnN0IHByb2NlZHVyZUNhbGwgPSBuZXcgUHJvY2VkdXJlQ2FsbChjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHBhcmFtZXRlcnMsIHByb2NlZHVyZVJlZmVyZW5jZSk7XG5cbiAgICAgIHJldHVybiBwcm9jZWR1cmVDYWxsO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJQcm9jZWR1cmVDYWxsIiwiRWxlbWVudCIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInBhcmFtZXRlcnMiLCJwcm9jZWR1cmVSZWZlcmVuY2UiLCJnZXRQYXJhbWV0ZXJzIiwiZ2V0UHJvY2VkdXJlUmVmZXJlbmNlIiwiZ2V0UHJvY2VkdXJlQ2FsbE5vZGUiLCJnZXROb2RlIiwicHJvY2VkdXJlQ2FsbE5vZGUiLCJnZXRQcm9jZWR1cmVOYW1lIiwiaXNVbmFyeSIsInBhcmFtZXRlcnNMZW5ndGgiLCJsZW5ndGgiLCJ1bmFyeSIsImZpbmRWYWx1ZXMiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsInZhbHVlcyIsIm1hcCIsInBhcmFtZXRlciIsInZhbHVlIiwiZmluZFZhbHVlIiwidmFsaWRhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJwcm9jZWR1cmVDYWxsU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJwcm9jZWR1cmVOYW1lIiwicHJvY2VkdXJlIiwiZmluZFByb2NlZHVyZUJ5UHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZUJvb2xlYW4iLCJpc0Jvb2xlYW4iLCJkZWJ1ZyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwidGVybSIsImNhbGxOb21pbmFsbHkiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiZ2V0TWVzc2FnZSIsImluZm8iLCJib29sZWFuIiwicHJpbWl0aXZlVmFsdWUiLCJnZXRQcmltaXRpdmVWYWx1ZSIsImRpc2NoYXJnZUdpdmVuVGVybSIsImRpc2NoYXJnZWRHaXZlblRlcm0iLCJ0ZXJtU3RyaW5nIiwiVmFsdWUiLCJmcm9tVGVybSIsIm5hbWUiLCJ0b0pTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlUHJvY2VkdXJlQ2FsbCIsInBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUiLCJwcm9jZWR1cmVDYWxsIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFhQTs7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
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Byb2NlZHVyZUNhbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IEVsZW1lbnQsIGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBWYWx1ZSBmcm9tIFwiLi4vdmFsdWVcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVQcm9jZWR1cmVDYWxsIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUsIHByb2NlZHVyZVJlZmVyZW5jZUZyb21Qcm9jZWR1cmVDYWxsTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSwgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByb2NlZHVyZUNhbGwgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB0aGlzLnByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZVJlZmVyZW5jZTtcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycztcbiAgfVxuXG4gIGdldFByb2NlZHVyZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmVSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRQcm9jZWR1cmVDYWxsTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbE5vZGUgPSBub2RlO1xuXG4gICAgcmV0dXJuIHByb2NlZHVyZUNhbGxOb2RlO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlTmFtZSgpIHsgcmV0dXJuIHRoaXMucHJvY2VkdXJlUmVmZXJlbmNlLmdldFByb2NlZHVyZU5hbWUoKTsgfVxuXG4gIGlzVW5hcnkoKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyc0xlbmd0aCA9IHRoaXMucGFyYW1ldGVycy5sZW5ndGgsXG4gICAgICAgICAgdW5hcnkgPSAocGFyYW1ldGVyc0xlbmd0aCA9PT0gMSk7XG5cbiAgICByZXR1cm4gdW5hcnk7XG4gIH1cblxuICBmaW5kVmFsdWVzKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gZGVyaXZlZFN1YnN0aXR1dGlvbnMsIC8vL1xuICAgICAgICAgIHZhbHVlcyA9IHRoaXMucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIuZmluZFZhbHVlKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsLi4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpO1xuXG4gICAgaWYgKHByb2NlZHVyZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvY2VkdXJlQm9vbGVhbiA9IHByb2NlZHVyZS5pc0Jvb2xlYW4oKTtcblxuICAgICAgaWYgKHByb2NlZHVyZUJvb2xlYW4pIHtcbiAgICAgICAgdmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGlzIG5vdCBib29sZWFuLmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBpcyBub3QgcHJlc2VudC5gKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbC5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzKTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgcHJvY2VkdXJlID0gY29udGV4dC5maW5kUHJvY2VkdXJlQnlQcm9jZWR1cmVOYW1lKHByb2NlZHVyZU5hbWUpLFxuICAgICAgICAgIHZhbHVlcyA9IHRoaXMuZmluZFZhbHVlcyhjb250ZXh0KTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcHJvY2VkdXJlLmNhbGxOb21pbmFsbHkodmFsdWVzLCAodGVybSkgPT4ge1xuICAgICAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGJvb2xlYW4gPSB0ZXJtLmlzQm9vbGVhbigpO1xuXG4gICAgICAgICAgaWYgKCFib29sZWFuKSB7XG4gICAgICAgICAgICBjb250ZXh0LmluZm8oYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZGlkIG5vdCByZXR1cm4gYSBib29sZWFuLmApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcmltaXRpdmVWYWx1ZSA9IHRlcm0uZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgaW5kZXBlbmRlbnRseS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odW5pZmllc0luZGVwZW5kZW50bHkpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uLmdldE1lc3NhZ2UoKTtcblxuICAgICAgY29udGV4dC5pbmZvKG1lc3NhZ2UpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGlzY2hhcmdlR2l2ZW5UZXJtKHRlcm0sIGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlZEdpdmVuVGVybSA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmdpbmcgdGhlICcke3Byb2NlZHVyZUNhbGxTdHJpbmd9JyBwcm9jZWR1cmUgY2FsbCBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGNvbnN0IHVuYXJ5ID0gdGhpcy5pc1VuYXJ5KCk7XG5cbiAgICBpZiAoIXVuYXJ5KSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVOYW1lID0gdGhpcy5nZXRQcm9jZWR1cmVOYW1lKCksXG4gICAgICAgICAgICBwcm9jZWR1cmUgPSBjb250ZXh0LmZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUocHJvY2VkdXJlTmFtZSksXG4gICAgICAgICAgICB2YWx1ZSA9IFZhbHVlLmZyb21UZXJtKHRlcm0sIGNvbnRleHQpLFxuICAgICAgICAgICAgdmFsdWVzID0gW1xuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgXTtcblxuICAgICAgdGVybSA9IG51bGw7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRlcm0gPSBwcm9jZWR1cmUuY2FsbE5vbWluYWxseSh2YWx1ZXMpO1xuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24uZ2V0TWVzc2FnZSgpO1xuXG4gICAgICAgIGNvbnRleHQuaW5mbyhtZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgYm9vbGVhbiA9IHRlcm0uaXNCb29sZWFuKCk7XG5cbiAgICAgICAgaWYgKCFib29sZWFuKSB7XG4gICAgICAgICAgY29udGV4dC5pbmZvKGBUaGUgJyR7cHJvY2VkdXJlQ2FsbFN0cmluZ30nIHByb2NlZHVyZSBjYWxsIGRpZCBub3QgcmV0dXJuIGEgYm9vbGVhbi5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwcmltaXRpdmVWYWx1ZSA9IHRlcm0uZ2V0UHJpbWl0aXZlVmFsdWUoKTtcblxuICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgZGlzY2hhcmdlZEdpdmVuVGVybSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgaXMgbm90IHVuYXJ5LmApO1xuICAgIH1cblxuICAgIGlmIChkaXNjaGFyZ2VkR2l2ZW5UZXJtKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi5kaXNjaGFyZ2VkIHRoZSAnJHtwcm9jZWR1cmVDYWxsU3RyaW5nfScgcHJvY2VkdXJlIGNhbGwgZ2l2ZW4gdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNjaGFyZ2VkR2l2ZW5UZXJtO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlByb2NlZHVyZUNhbGxcIjtcblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QganNvbiA9IHtcbiAgICAgIHN0cmluZyxcbiAgICAgIGJyZWFrUG9pbnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIHJldHVybiBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICBwcm9jZWR1cmVDYWxsTm9kZSA9IGluc3RhbnRpYXRlUHJvY2VkdXJlQ2FsbChzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHByb2NlZHVyZUNhbGxOb2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgcGFyYW1ldGVycyA9IHBhcmFtZXRlcnNGcm9tUHJvY2VkdXJlQ2FsbE5vZGUoanNvbiwgY29udGV4dCksXG4gICAgICAgICAgICBwcm9jZWR1cmVSZWZlcmVuY2UgPSBwcm9jZWR1cmVSZWZlcmVuY2VGcm9tUHJvY2VkdXJlQ2FsbE5vZGUoanNvbiwgY29udGV4dCk7XG5cbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsID0gbmV3IFByb2NlZHVyZUNhbGwoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwYXJhbWV0ZXJzLCBwcm9jZWR1cmVSZWZlcmVuY2UpO1xuXG4gICAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbDtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJvY2VkdXJlQ2FsbCIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJwYXJhbWV0ZXJzIiwicHJvY2VkdXJlUmVmZXJlbmNlIiwiZ2V0UGFyYW1ldGVycyIsImdldFByb2NlZHVyZVJlZmVyZW5jZSIsImdldFByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0Tm9kZSIsInByb2NlZHVyZUNhbGxOb2RlIiwiZ2V0UHJvY2VkdXJlTmFtZSIsImlzVW5hcnkiLCJwYXJhbWV0ZXJzTGVuZ3RoIiwibGVuZ3RoIiwidW5hcnkiLCJmaW5kVmFsdWVzIiwiZGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyIsInN1YnN0aXR1dGlvbnMiLCJ2YWx1ZXMiLCJtYXAiLCJwYXJhbWV0ZXIiLCJ2YWx1ZSIsImZpbmRWYWx1ZSIsInZhbGlkYXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwicHJvY2VkdXJlQ2FsbFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwicHJvY2VkdXJlTmFtZSIsInByb2NlZHVyZSIsImZpbmRQcm9jZWR1cmVCeVByb2NlZHVyZU5hbWUiLCJwcm9jZWR1cmVCb29sZWFuIiwiaXNCb29sZWFuIiwiZGVidWciLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJjYWxsTm9taW5hbGx5IiwidGVybSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwiYm9vbGVhbiIsImluZm8iLCJwcmltaXRpdmVWYWx1ZSIsImdldFByaW1pdGl2ZVZhbHVlIiwiZXhjZXB0aW9uIiwibWVzc2FnZSIsImdldE1lc3NhZ2UiLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJkaXNjaGFyZ2VkR2l2ZW5UZXJtIiwidGVybVN0cmluZyIsIlZhbHVlIiwiZnJvbVRlcm0iLCJuYW1lIiwidG9KU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVByb2NlZHVyZUNhbGwiLCJwYXJhbWV0ZXJzRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlUmVmZXJlbmNlRnJvbVByb2NlZHVyZUNhbGxOb2RlIiwicHJvY2VkdXJlQ2FsbCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7Z0NBWDZDOzhEQUUzQjswQkFFSzt5QkFDSzs2QkFDYTt5QkFDZ0Q7Ozs7OztBQUV6RixNQUFNLEVBQUVBLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUV6RixXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHNCQUFzQkMsdUJBQU87SUFDdkQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUVDLGtCQUFrQixDQUFFO1FBQzdFLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUdBO0lBQzVCO0lBRUFDLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixVQUFVO0lBQ3hCO0lBRUFHLHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQ0Ysa0JBQWtCO0lBQ2hDO0lBRUFHLHVCQUF1QjtRQUNyQixNQUFNTixPQUFPLElBQUksQ0FBQ08sT0FBTyxJQUNuQkMsb0JBQW9CUjtRQUUxQixPQUFPUTtJQUNUO0lBRUFDLG1CQUFtQjtRQUFFLE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ00sZ0JBQWdCO0lBQUk7SUFFeEVDLFVBQVU7UUFDUixNQUFNQyxtQkFBbUIsSUFBSSxDQUFDVCxVQUFVLENBQUNVLE1BQU0sRUFDekNDLFFBQVNGLHFCQUFxQjtRQUVwQyxPQUFPRTtJQUNUO0lBRUFDLFdBQVdoQixPQUFPLEVBQUU7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
@@ -131,29 +131,37 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
131
131
  continuation(procedureCallValidates);
132
132
  });
133
133
  }
134
- unifyIndependently(context) {
135
- let unifiesIndependently = false;
134
+ unifyIndependently(context, continuation) {
136
135
  const premiseString = this.getString(); ///
137
136
  context.trace(`Unifying the '${premiseString}' premise independently...`);
138
137
  (0, _context.reconcile)((context)=>{
139
138
  const statement = this.getStatement(), procedureCall = this.getProcedureCall();
140
139
  if (statement !== null) {
141
- const premiseContext = this.getContext(), generalContext = premiseContext, specificContext = context, statementUnifiesIndependently = statement.unifyIndependently(generalContext, specificContext);
142
- if (statementUnifiesIndependently) {
143
- unifiesIndependently = true;
144
- }
140
+ const premiseContext = this.getContext(), generalContext = premiseContext, specificContext = context; ///
141
+ return statement.unifyIndependently(generalContext, specificContext, (statementUnifiesIndependently)=>{
142
+ let unifiesIndependently = false;
143
+ if (statementUnifiesIndependently) {
144
+ unifiesIndependently = true;
145
+ }
146
+ if (unifiesIndependently) {
147
+ context.debug(`...unified the '${premiseString}' premise independently.`);
148
+ }
149
+ return continuation(unifiesIndependently);
150
+ });
145
151
  }
146
152
  if (procedureCall !== null) {
147
- const procedureCallResolvedIndependently = procedureCall.unifyIndependently(context);
148
- if (procedureCallResolvedIndependently) {
149
- unifiesIndependently = true;
150
- }
153
+ return procedureCall.unifyIndependently(context, (procedureCallResolvedIndependently)=>{
154
+ let unifiesIndependently = false;
155
+ if (procedureCallResolvedIndependently) {
156
+ unifiesIndependently = true;
157
+ }
158
+ if (unifiesIndependently) {
159
+ context.debug(`...unified the '${premiseString}' premise independently.`);
160
+ }
161
+ return continuation(unifiesIndependently);
162
+ });
151
163
  }
152
164
  }, context);
153
- if (unifiesIndependently) {
154
- context.debug(`...unified the '${premiseString}' premise independently.`);
155
- }
156
- return unifiesIndependently;
157
165
  }
158
166
  unifySubproof(subproof, context, continuation) {
159
167
  const premiseString = this.getString(), subproofString = subproof.getString();
@@ -200,11 +208,10 @@ const _default = (0, _elements.define)(class Premise extends _proofAssertion.def
200
208
  const subproofOrProofAssertionProofAssertion = subproofOrProofAssertion.isProofAssertion();
201
209
  if (subproofOrProofAssertionProofAssertion) {
202
210
  const proofAssertion = subproofOrProofAssertion; ///
203
- this.unifyProofAssertion(proofAssertion, context, continuation);
204
- } else {
205
- const subproof = subproofOrProofAssertion; ///
206
- this.unifySubproof(subproof, context, continuation);
211
+ return this.unifyProofAssertion(proofAssertion, context, continuation);
207
212
  }
213
+ const subproof = subproofOrProofAssertion; ///
214
+ return this.unifySubproof(subproof, context, continuation);
208
215
  }
209
216
  toJSON() {
210
217
  const context = this.getContext();
@@ -239,4 +246,4 @@ function statementFromPremiseNode(premiseNode, context) {
239
246
  return statement;
240
247
  }
241
248
 
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFByb29mQXNzZXJ0aW9uIGZyb20gXCIuLi9wcm9vZkFzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByZW1pc2UgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgYXR0ZW1wdCwgcmVjb25jaWxlLCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSwgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByZW1pc2UgZXh0ZW5kcyBQcm9vZkFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByZW1pc2VOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcmVtaXNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHRoaXMuZ2V0UHJlbWlzZU5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oKSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCksXG4gICAgICAgICAgbm9uc2Vuc2ljYWwgPSAoKHN0YXRlbWVudCA9PT0gbnVsbCkgJiYgKHByb2NlZHVyZUNhbGwgPT09IG51bGwpKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBub25zZW5zaWNhbCA9IHRoaXMuaXNOb25zZW5zaWNhbCgpO1xuXG4gICAgaWYgKG5vbnNlbnNpY2FsKSB7XG4gICAgICBjb25zdCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuXG4gICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwgPSB0aGlzLnZhbGlkYXRlUHJvY2VkdXJlQ2FsbC5iaW5kKHRoaXMpO1xuXG4gICAgICBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKHZhbGlkYXRlcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdHNlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgIGlmIChwcm9jZWR1cmVDYWxsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdHRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3MgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIHRoaXMucHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0LCAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIHByb2NlZHVyZSBjYWxsLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCkge1xuICAgIGxldCB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5ID0gc3RhdGVtZW50LnVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSA9IHByb2NlZHVyZUNhbGwudW5pZnlJbmRlcGVuZGVudGx5KGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgdW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHN1YnByb29mU3RyaW5nID0gc3VicHJvb2YuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSB0aGlzLmZpbmRTdWJwcm9vZkFzc2VydGlvbigpO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZlVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IHByZW1pc2VDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgc3VicHJvb2ZBc3NlcnRpb24udW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN1YnByb29mVW5pZmllcykgPT4ge1xuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJwcm9vZlVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdWJwcm9vZlN0cmluZ30nIHN1YnByb29mIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKHN1YnByb29mVW5pZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5UHJvb2ZBc3NlcnRpb24ocHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBwcm9vZkFzc2VydGlvblN0cmluZyA9IHByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3Byb29mQXNzZXJ0aW9uU3RyaW5nfScgcHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBwcm9vZkFzc2VydGlvbkNvbnRleHQgPSBwcm9vZkFzc2VydGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gcHJvb2ZBc3NlcnRpb25Db250ZXh0OyAgLy8vXG5cbiAgICByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gcHJvb2ZBc3NlcnRpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICAgIHRoaXMudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICBsZXQgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBwcm9vZkFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9vZkFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIHByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbihwcm9vZkFzc2VydGlvblVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uaXNQcm9vZkFzc2VydGlvbigpO1xuXG4gICAgaWYgKHN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbjsgIC8vL1xuXG4gICAgICB0aGlzLnVuaWZ5UHJvb2ZBc3NlcnRpb24ocHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN1YnByb29mID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIHRoaXMudW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYnJlYWtQb2ludFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGpzb247XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiUHJlbWlzZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHByZW1pc2U7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHByZW1pc2VOb2RlID0gaW5zdGFudGlhdGVQcmVtaXNlKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBwcmVtaXNlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdGF0ZW1lbnRGcm9tUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb2RlLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnQ7XG59XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiUHJlbWlzZSIsIlByb29mQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicHJvY2VkdXJlQ2FsbCIsImdldFByb2NlZHVyZUNhbGwiLCJnZXRQcmVtaXNlTm9kZSIsImdldE5vZGUiLCJwcmVtaXNlTm9kZSIsImdldFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZFN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRTdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJnZXRDb250ZXh0IiwiZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZSIsImlzTm9uc2Vuc2ljYWwiLCJnZXRTdGF0ZW1lbnQiLCJub25zZW5zaWNhbCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInByZW1pc2VTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmaWVzIiwiZGVidWciLCJkZWNsYXJlIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZXMiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJiaW5kIiwidmFsaWRhdGVQcm9jZWR1cmVDYWxsIiwiZXhpc3RzIiwiY29tbWl0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwicHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyIsInVuaWZ5SW5kZXBlbmRlbnRseSIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwicmVjb25jaWxlIiwicHJlbWlzZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5IiwicHJvY2VkdXJlQ2FsbFJlc29sdmVkSW5kZXBlbmRlbnRseSIsInVuaWZ5U3VicHJvb2YiLCJzdWJwcm9vZiIsInN1YnByb29mU3RyaW5nIiwic3VicHJvb2ZVbmlmaWVzIiwidW5pZnlQcm9vZkFzc2VydGlvbiIsInByb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJwcm9vZkFzc2VydGlvbkNvbnRleHQiLCJ1bmlmeVN0YXRlbWVudCIsInN0YXRlbWVudFVuaWZpZXMiLCJwcm9vZkFzc2VydGlvblVuaWZpZXMiLCJ1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uIiwiaXNQcm9vZkFzc2VydGlvbiIsInRvSlNPTiIsInNlcmlhbGlzZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJwcmVtaXNlIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlUHJlbWlzZSIsInN0YXRlbWVudEZyb21QcmVtaXNlTm9kZSIsInByb2NlZHVyZUNhbGxGcm9tUHJlbWlzZU5vZGUiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFjQTs7O2VBQUE7OztnQ0FaMkQ7dUVBRWhDOzBCQUVKOzhCQUNBOzZCQUNZO3lCQUNVO3lCQUNvQzs7Ozs7O0FBRWpGLE1BQU0sRUFBRUEsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBC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
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3ByZW1pc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFByb29mQXNzZXJ0aW9uIGZyb20gXCIuLi9wcm9vZkFzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVByZW1pc2UgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgcHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgZGVjbGFyZSwgYXR0ZW1wdCwgcmVjb25jaWxlLCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGJyZWFrYWJsZSwgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFByZW1pc2UgZXh0ZW5kcyBQcm9vZkFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgc3RhdGVtZW50LCBwcm9jZWR1cmVDYWxsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldFByZW1pc2VOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBwcmVtaXNlTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHByZW1pc2VOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHRoaXMuZ2V0UHJlbWlzZU5vZGUoKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBmaW5kU3VicHJvb2ZBc3NlcnRpb24oKSB7XG4gICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSgpO1xuXG4gICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IGNvbnRleHQuZmluZEFzc2VydGlvbkJ5QXNzZXJ0aW9uTm9kZShzdWJwcm9vZkFzc2VydGlvbk5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9jZWR1cmVDYWxsID0gdGhpcy5nZXRQcm9jZWR1cmVDYWxsKCksXG4gICAgICAgICAgbm9uc2Vuc2ljYWwgPSAoKHN0YXRlbWVudCA9PT0gbnVsbCkgJiYgKHByb2NlZHVyZUNhbGwgPT09IG51bGwpKTtcblxuICAgIHJldHVybiBub25zZW5zaWNhbDtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLi4uYCk7XG5cbiAgICBjb25zdCBub25zZW5zaWNhbCA9IHRoaXMuaXNOb25zZW5zaWNhbCgpO1xuXG4gICAgaWYgKG5vbnNlbnNpY2FsKSB7XG4gICAgICBjb25zdCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuXG4gICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVjbGFyZSgoY29udGV4dCkgPT4ge1xuICAgICAgdGhpcy52YWxpZGF0ZShjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH0pO1xuXG4gIHZhbGlkYXRlKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXR0aW5nIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVByb2NlZHVyZUNhbGwgPSB0aGlzLnZhbGlkYXRlUHJvY2VkdXJlQ2FsbC5iaW5kKHRoaXMpO1xuXG4gICAgICBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVN0YXRlbWVudCxcbiAgICAgICAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsXG4gICAgICBdLCBjb250ZXh0LCAodmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKHZhbGlkYXRlcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3Mgc3RhdHNlbWVudC4uLmApO1xuXG4gICAgc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9jZWR1cmVDYWxsKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgIGlmIChwcm9jZWR1cmVDYWxsID09PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9jZWR1cmVDYWxsVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihwcm9jZWR1cmVDYWxsVmFsaWRhdGVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdHRpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlJ3MgcHJvY2VkdXJlIGNhbGwuLi5gKTtcblxuICAgIHRoaXMucHJvY2VkdXJlQ2FsbC52YWxpZGF0ZShjb250ZXh0LCAocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcykgPT4ge1xuICAgICAgaWYgKHByb2NlZHVyZUNhbGxWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSdzIHByb2NlZHVyZSBjYWxsLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocHJvY2VkdXJlQ2FsbFZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgcHJlbWlzZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSB0aGlzLmdldFByb2NlZHVyZUNhbGwoKTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcmVtaXNlQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAgLy8vXG5cbiAgICAgICAgcmV0dXJuIHN0YXRlbWVudC51bmlmeUluZGVwZW5kZW50bHkoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5KSA9PiB7XG4gICAgICAgICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3ByZW1pc2VTdHJpbmd9JyBwcmVtaXNlIGluZGVwZW5kZW50bHkuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih1bmlmaWVzSW5kZXBlbmRlbnRseSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJvY2VkdXJlQ2FsbC51bmlmeUluZGVwZW5kZW50bHkoY29udGV4dCwgKHByb2NlZHVyZUNhbGxSZXNvbHZlZEluZGVwZW5kZW50bHkpID0+IHtcbiAgICAgICAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZSBpbmRlcGVuZGVudGx5LmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24odW5pZmllc0luZGVwZW5kZW50bHkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHByZW1pc2VTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzdWJwcm9vZlN0cmluZyA9IHN1YnByb29mLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mU3RyaW5nfScgc3VicHJvb2Ygd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uID0gdGhpcy5maW5kU3VicHJvb2ZBc3NlcnRpb24oKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3VicHJvb2ZVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJlbWlzZUNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBwcmVtaXNlQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHN1YnByb29mQXNzZXJ0aW9uLnVuaWZ5U3VicHJvb2Yoc3VicHJvb2YsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdWJwcm9vZlVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKHN1YnByb29mVW5pZmllcykge1xuICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZVbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZTdHJpbmd9JyBzdWJwcm9vZiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbihzdWJwcm9vZlVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVByb29mQXNzZXJ0aW9uKHByb29mQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBwcmVtaXNlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBwcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtwcm9vZkFzc2VydGlvblN0cmluZ30nIHByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtwcmVtaXNlU3RyaW5nfScgcHJlbWlzZS4uLmApO1xuXG4gICAgY29uc3QgcHJvb2ZBc3NlcnRpb25Db250ZXh0ID0gcHJvb2ZBc3NlcnRpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHByZW1pc2VDb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCksIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gcHJlbWlzZUNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHByb29mQXNzZXJ0aW9uQ29udGV4dDsgIC8vL1xuXG4gICAgcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHByb29mQXNzZXJ0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgbGV0IHByb29mQXNzZXJ0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgcHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gdHJ1ZTtcblxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7cHJlbWlzZVN0cmluZ30nIHByZW1pc2UuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51YXRpb24ocHJvb2ZBc3NlcnRpb25VbmlmaWVzKTtcbiAgICAgIH0pO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1YnByb29mT3JQcm9vZkFzc2VydGlvbihzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvblByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uLmlzUHJvb2ZBc3NlcnRpb24oKTtcblxuICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Qcm9vZkFzc2VydGlvbikge1xuICAgICAgY29uc3QgcHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb247ICAvLy9cblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlQcm9vZkFzc2VydGlvbihwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJwcm9vZiA9IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbjsgIC8vL1xuXG4gICAgcmV0dXJuIHRoaXMudW5pZnlTdWJwcm9vZihzdWJwcm9vZiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcmVtaXNlXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgcHJlbWlzZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgcHJlbWlzZU5vZGUgPSBpbnN0YW50aWF0ZVByZW1pc2Uoc3RyaW5nLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbm9kZSA9IHByZW1pc2VOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSBwcm9jZWR1cmVDYWxsRnJvbVByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBzdGF0ZW1lbnQsIHByb2NlZHVyZUNhbGwpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHN0YXRlbWVudEZyb21QcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vZGUuZ2V0U3RhdGVtZW50Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnQgPSBjb250ZXh0LmZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudDtcbn1cbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJQcmVtaXNlIiwiUHJvb2ZBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJzdGF0ZW1lbnQiLCJwcm9jZWR1cmVDYWxsIiwiZ2V0UHJvY2VkdXJlQ2FsbCIsImdldFByZW1pc2VOb2RlIiwiZ2V0Tm9kZSIsInByZW1pc2VOb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJmaW5kU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldFN1YnByb29mQXNzZXJ0aW9uTm9kZSIsImdldENvbnRleHQiLCJmaW5kQXNzZXJ0aW9uQnlBc3NlcnRpb25Ob2RlIiwiaXNOb25zZW5zaWNhbCIsImdldFN0YXRlbWVudCIsIm5vbnNlbnNpY2FsIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwicHJlbWlzZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZpZXMiLCJkZWJ1ZyIsImRlY2xhcmUiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlcyIsImF0dGVtcHQiLCJ2YWxpZGF0ZVN0YXRlbWVudCIsImJpbmQiLCJ2YWxpZGF0ZVByb2NlZHVyZUNhbGwiLCJleGlzdHMiLCJjb21taXQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJwcm9jZWR1cmVDYWxsVmFsaWRhdGVzIiwidW5pZnlJbmRlcGVuZGVudGx5IiwicmVjb25jaWxlIiwicHJlbWlzZUNvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZXNJbmRlcGVuZGVudGx5IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJwcm9jZWR1cmVDYWxsUmVzb2x2ZWRJbmRlcGVuZGVudGx5IiwidW5pZnlTdWJwcm9vZiIsInN1YnByb29mIiwic3VicHJvb2ZTdHJpbmciLCJzdWJwcm9vZlVuaWZpZXMiLCJ1bmlmeVByb29mQXNzZXJ0aW9uIiwicHJvb2ZBc3NlcnRpb24iLCJwcm9vZkFzc2VydGlvblN0cmluZyIsInByb29mQXNzZXJ0aW9uQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsInByb29mQXNzZXJ0aW9uVW5pZmllcyIsInVuaWZ5U3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uUHJvb2ZBc3NlcnRpb24iLCJpc1Byb29mQXNzZXJ0aW9uIiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsInByZW1pc2UiLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVQcmVtaXNlIiwic3RhdGVtZW50RnJvbVByZW1pc2VOb2RlIiwicHJvY2VkdXJlQ2FsbEZyb21QcmVtaXNlTm9kZSIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWNBOzs7ZUFBQTs7O2dDQVoyRDt1RUFFaEM7MEJBRUo7OEJBQ0E7NkJBQ1k7eUJBQ1U7eUJBQ29DOzs7Ozs7QUFFakYsTUFBTSxFQUFFQSxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFekYsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxnQkFBZ0JDLHVCQUFjO0lBQ3hELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLENBQUU7UUFDdkUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQztRQUV6QyxJQUFJLENBQUNDLGFBQWEsR0FBR0E7SUFDdkI7SUFFQUMsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxDQUFDRCxhQUFhO0lBQzNCO0lBRUFFLGlCQUFpQjtRQUNmLE1BQU1MLE9BQU8sSUFBSSxDQUFDTSxPQUFPLElBQ25CQyxjQUFjUCxNQUFNLEdBQUc7UUFFN0IsT0FBT087SUFDVDtJQUVBQyxtQkFBbUI7UUFDakIsTUFBTUQsY0FBYyxJQUFJLENBQUNGLGNBQWMsSUFDakNJLGdCQUFnQkYsWUFBWUMsZ0JBQWdCO1FBRWxELE9BQU9DO0lBQ1Q7SUFFQUMsd0JBQXdCO1FBQ3RCLElBQUlDLG9CQUFvQjtRQUV4QixNQUFNRixnQkFBZ0IsSUFBSSxDQUFDRCxnQkFBZ0I7UUFFM0MsSUFBSUMsa0JBQWtCLE1BQU07WUFDMUIsTUFBTUcsd0JBQXdCSCxjQUFjSSx3QkFBd0I7WUFFcEUsSUFBSUQsMEJBQTBCLE1BQU07Z0JBQ2xDLE1BQU1kLFVBQVUsSUFBSSxDQUFDZ0IsVUFBVTtnQkFFL0JILG9CQUFvQmIsUUFBUWlCLDRCQUE0QixDQUFDSDtZQUMzRDtRQUNGO1FBRUEsT0FBT0Q7SUFDVDtJQUVBSyxnQkFBZ0I7UUFDZCxNQUFNZCxZQUFZLElBQUksQ0FBQ2UsWUFBWSxJQUM3QmQsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLElBQ3JDYyxjQUFlLEFBQUNoQixjQUFjLFFBQVVDLGtCQUFrQjtRQUVoRSxPQUFPZTtJQUNUO0lBRUFDLFNBQVM1QixVQUFVLFNBQVVPLE9BQU8sRUFBRXNCLFlBQVk7UUFDaEQsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsU0FBUztRQUVwQ3hCLFFBQVF5QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLGNBQWMsWUFBWSxDQUFDO1FBRTNELE1BQU1ILGNBQWMsSUFBSSxDQUFDRixhQUFhO1FBRXRDLElBQUlFLGFBQWE7WUFDZixNQUFNTSxXQUFXO1lBRWpCMUIsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLHNCQUFzQixFQUFFSixjQUFjLGlDQUFpQyxDQUFDO1lBRXZGRCxhQUFhSTtZQUViO1FBQ0Y7UUFFQUUsSUFBQUEsZ0JBQU8sRUFBQyxDQUFDNUI7WUFDUCxJQUFJLENBQUM2QixRQUFRLENBQUM3QixTQUFTLENBQUM4QjtnQkFDdEIsSUFBSUosV0FBVztnQkFFZixJQUFJSSxXQUFXO29CQUNiSixXQUFXO2dCQUNiO2dCQUVBLElBQUlBLFVBQVU7b0JBQ1oxQixRQUFRMkIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVKLGNBQWMsVUFBVSxDQUFDO2dCQUM3RDtnQkFFQUQsYUFBYUk7WUFDZjtRQUNGLEdBQUcxQjtJQUNMLEdBQUc7SUFFSDZCLFNBQVM3QixPQUFPLEVBQUVzQixZQUFZLEVBQUU7UUFDOUIsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFM0N4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVGLGNBQWMsWUFBWSxDQUFDO1FBRTdEUSxJQUFBQSxnQkFBTyxFQUFDLENBQUMvQjtZQUNQLE1BQU1nQyxvQkFBb0IsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksR0FDcERDLHdCQUF3QixJQUFJLENBQUNBLHFCQUFxQixDQUFDRCxJQUFJLENBQUMsSUFBSTtZQUVsRUUsSUFBQUEsb0JBQU0sRUFBQztnQkFDTEg7Z0JBQ0FFO2FBQ0QsRUFBRWxDLFNBQVMsQ0FBQzhCO2dCQUNYLElBQUlBLFdBQVc7b0JBQ2IsSUFBSSxDQUFDTSxNQUFNLENBQUNwQztnQkFDZDtnQkFFQSxJQUFJOEIsV0FBVztvQkFDYjlCLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUosY0FBYyxVQUFVLENBQUM7Z0JBQzlEO2dCQUVBRCxhQUFhUTtZQUNmO1FBQ0YsR0FBRzlCO0lBQ0w7SUFFQWdDLGtCQUFrQmhDLE9BQU8sRUFBRXNCLFlBQVksRUFBRTtRQUN2QyxNQUFNbEIsWUFBWSxJQUFJLENBQUNlLFlBQVk7UUFFbkMsSUFBSWYsY0FBYyxNQUFNO1lBQ3RCLE1BQU1pQyxxQkFBcUI7WUFFM0JmLGFBQWFlO1lBRWI7UUFDRjtRQUVBLE1BQU1kLGdCQUFnQixJQUFJLENBQUNDLFNBQVM7UUFFcEN4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLGNBQWMseUJBQXlCLENBQUM7UUFFekVuQixVQUFVeUIsUUFBUSxDQUFDN0IsU0FBUyxDQUFDSTtZQUMzQixJQUFJaUMscUJBQXFCO1lBRXpCLElBQUlqQyxjQUFjLE1BQU07Z0JBQ3RCaUMscUJBQXFCO1lBQ3ZCO1lBRUEsSUFBSUEsb0JBQW9CO2dCQUN0QnJDLFFBQVEyQixLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRUosY0FBYyxzQkFBc0IsQ0FBQztZQUMxRTtZQUVBRCxhQUFhZTtRQUNmO0lBQ0Y7SUFFQUgsc0JBQXNCbEMsT0FBTyxFQUFFc0IsWUFBWSxFQUFFO1FBQzNDLE1BQU1qQixnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0I7UUFFM0MsSUFBSUQsa0JBQWtCLE1BQU07WUFDMUIsTUFBTWlDLHlCQUF5QjtZQUUvQmhCLGFBQWFnQjtZQUViO1FBQ0Y7UUFFQSxNQUFNZixnQkFBZ0IsSUFBSSxDQUFDQyxTQUFTO1FBRXBDeEIsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFRixjQUFjLDZCQUE2QixDQUFDO1FBRTlFLElBQUksQ0FBQ2xCLGFBQWEsQ0FBQ3dCLFFBQVEsQ0FBQzdCLFNBQVMsQ0FBQ3NDO1lBQ3BDLElBQUlBLHdCQUF3QjtnQkFDMUJ0QyxRQUFRMkIsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUVKLGNBQWMsMkJBQTJCLENBQUM7WUFDL0U7WUFFQUQsYUFBYWdCO1FBQ2Y7SUFDRjtJQUVBQyxtQkFBbUJ2QyxPQUFPLEVBQUVzQixZQUFZLEVBQUU7UUFDeEMsTUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFM0N4QixRQUFReUIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFRixjQUFjLDBCQUEwQixDQUFDO1FBRXhFaUIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDeEM7WUFDVCxNQUFNSSxZQUFZLElBQUksQ0FBQ2UsWUFBWSxJQUM3QmQsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCO1lBRTNDLElBQUlGLGNBQWMsTUFBTTtnQkFDdEIsTUFBTXFDLGlCQUFpQixJQUFJLENBQUN6QixVQUFVLElBQ2hDMEIsaUJBQWlCRCxnQkFDakJFLGtCQUFrQjNDLFNBQVUsR0FBRztnQkFFckMsT0FBT0ksVUFBVW1DLGtCQUFrQixDQUFDRyxnQkFBZ0JDLGlCQUFpQixDQUFDQztvQkFDcEUsSUFBSUMsdUJBQXVCO29CQUUzQixJQUFJRCwrQkFBK0I7d0JBQ2pDQyx1QkFBdUI7b0JBQ3pCO29CQUVBLElBQUlBLHNCQUFzQjt3QkFDeEI3QyxRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVKLGNBQWMsd0JBQXdCLENBQUM7b0JBQzFFO29CQUVBLE9BQU9ELGFBQWF1QjtnQkFDdEI7WUFDRjtZQUVBLElBQUl4QyxrQkFBa0IsTUFBTTtnQkFDMUIsT0FBT0EsY0FBY2tDLGtCQUFrQixDQUFDdkMsU0FBUyxDQUFDOEM7b0JBQ2hELElBQUlELHVCQUF1QjtvQkFFM0IsSUFBSUMsb0NBQW9DO3dCQUN0Q0QsdUJBQXVCO29CQUN6QjtvQkFFQSxJQUFJQSxzQkFBc0I7d0JBQ3hCN0MsUUFBUTJCLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFSixjQUFjLHdCQUF3QixDQUFDO29CQUMxRTtvQkFFQSxPQUFPRCxhQUFhdUI7Z0JBQ3RCO1lBQ0Y7UUFDRixHQUFHN0M7SUFDTDtJQUVBK0MsY0FBY0MsUUFBUSxFQUFFaEQsT0FBTyxFQUFFc0IsWUFBWSxFQUFFO1FBQzdDLE1BQU1DLGdCQUFnQixJQUFJLENBQUNDLFNBQVMsSUFDOUJ5QixpQkFBaUJELFNBQVN4QixTQUFTO1FBRXpDeEIsUUFBUXlCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRXdCLGVBQWUscUJBQXFCLEVBQUUxQixjQUFjLFlBQVksQ0FBQztRQUVoRyxNQUFNVixvQkFBb0IsSUFBSSxDQUFDRCxxQkFBcUI7UUFFcEQsSUFBSUMsc0JBQXNCLE1BQU07WUFDOUIsTUFBTXFDLGtCQUFrQjtZQUV4QjVCLGFBQWE0QjtZQUViO1FBQ0Y7UUFFQSxNQUFNVCxpQkFBaUIsSUFBSSxDQUFDekIsVUFBVSxJQUNoQzBCLGlCQUFpQkQsZ0JBQ2pCRSxrQkFBa0IzQyxTQUFTLEdBQUc7UUFFcEN3QyxJQUFBQSxrQkFBUyxFQUFDLENBQUN4QztZQUNUYSxrQkFBa0JrQyxhQUFhLENBQUNDLFVBQVVOLGdCQUFnQkMsaUJBQWlCLENBQUNPO2dCQUMxRSxJQUFJQSxpQkFBaUI7b0JBQ25CbEQsUUFBUW9DLE1BQU07Z0JBQ2hCO2dCQUVBLElBQUljLGlCQUFpQjtvQkFDbkJsRCxRQUFRMkIsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVzQixlQUFlLHFCQUFxQixFQUFFMUIsY0FBYyxVQUFVLENBQUM7Z0JBQ2xHO2dCQUVBRCxhQUFhNEI7WUFDZjtRQUNGLEdBQUdsRDtJQUNMO0lBRUFtRCxvQkFBb0JDLGNBQWMsRUFBRXBELE9BQU8sRUFBRXNCLFlBQVksRUFBRTtRQUN6RCxNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDQyxTQUFTLElBQzlCNkIsdUJBQXVCRCxlQUFlNUIsU0FBUztRQUVyRHhCLFFBQVF5QixLQUFLLENBQUMsQ0FBQyxjQUFjLEVBQUU0QixxQkFBcUIsNEJBQTRCLEVBQUU5QixjQUFjLFlBQVksQ0FBQztRQUU3RyxNQUFNK0Isd0JBQXdCRixlQUFlcEMsVUFBVSxJQUNqRHlCLGlCQUFpQixJQUFJLENBQUN6QixVQUFVLElBQ2hDMEIsaUJBQWlCRCxnQkFDakJFLGtCQUFrQlcsdUJBQXdCLEdBQUc7UUFFbkRkLElBQUFBLGtCQUFTLEVBQUMsQ0FBQ0c7WUFDVCxNQUFNdkMsWUFBWWdELGVBQWVqQyxZQUFZO1lBRTdDLElBQUksQ0FBQ29DLGNBQWMsQ0FBQ25ELFdBQVdzQyxnQkFBZ0JDLGlCQUFpQixDQUFDYTtnQkFDL0QsSUFBSUMsd0JBQXdCO2dCQUU1QixJQUFJRCxrQkFBa0I7b0JBQ3BCQyx3QkFBd0I7b0JBRXhCZCxnQkFBZ0JQLE1BQU0sQ0FBQ3BDO2dCQUN6QjtnQkFFQSxJQUFJeUQsdUJBQXVCO29CQUN6QnpELFFBQVEyQixLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRTBCLHFCQUFxQiw0QkFBNEIsRUFBRTlCLGNBQWMsVUFBVSxDQUFDO2dCQUMvRztnQkFFQUQsYUFBYW1DO1lBQ2Y7UUFDRixHQUFHZDtJQUNMO0lBRUFlLDhCQUE4QkMsd0JBQXdCLEVBQUUzRCxPQUFPLEVBQUVzQixZQUFZLEVBQUU7UUFDN0UsTUFBTXNDLHlDQUF5Q0QseUJBQXlCRSxnQkFBZ0I7UUFFeEYsSUFBSUQsd0NBQXdDO1lBQzFDLE1BQU1SLGlCQUFpQk8sMEJBQTJCLEdBQUc7WUFFckQsT0FBTyxJQUFJLENBQUNSLG1CQUFtQixDQUFDQyxnQkFBZ0JwRCxTQUFTc0I7UUFDM0Q7UUFFQSxNQUFNMEIsV0FBV1csMEJBQTJCLEdBQUc7UUFFL0MsT0FBTyxJQUFJLENBQUNaLGFBQWEsQ0FBQ0MsVUFBVWhELFNBQVNzQjtJQUMvQztJQUVBd0MsU0FBUztRQUNQLE1BQU05RCxVQUFVLElBQUksQ0FBQ2dCLFVBQVU7UUFFL0IsT0FBTytDLElBQUFBLGtCQUFTLEVBQUMsQ0FBQy9EO1lBQ2hCLE1BQU1DLFNBQVMsSUFBSSxDQUFDdUIsU0FBUztZQUU3QixJQUFJckI7WUFFSkEsYUFBYSxJQUFJLENBQUM2RCxhQUFhO1lBRS9CLE1BQU1DLGlCQUFpQnRFLDJCQUEyQlE7WUFFbERBLGFBQWE4RCxnQkFBaUIsR0FBRztZQUVqQyxNQUFNQyxPQUFPO2dCQUNYbEU7Z0JBQ0FDO2dCQUNBRTtZQUNGO1lBRUEsT0FBTytEO1FBQ1QsR0FBR2xFO0lBQ0w7SUFFQSxPQUFPbUUsT0FBTyxVQUFVO0lBRXhCLE9BQU9DLFNBQVNGLElBQUksRUFBRWxFLE9BQU8sRUFBRTtRQUM3QixJQUFJcUU7UUFFSkMsSUFBQUEsb0JBQVcsRUFBQyxDQUFDdEU7WUFDWHVFLElBQUFBLG9CQUFXLEVBQUMsQ0FBQ0wsTUFBTWxFO2dCQUNqQixNQUFNLEVBQUVDLE1BQU0sRUFBRSxHQUFHaUUsTUFDYnpELGNBQWMrRCxJQUFBQSwrQkFBa0IsRUFBQ3ZFLFFBQVFELFVBQ3pDRSxPQUFPTyxhQUNQTixhQUFhVCxtQkFBbUJ3RSxPQUNoQzlELFlBQVlxRSx5QkFBeUJoRSxhQUFhVCxVQUNsREssZ0JBQWdCcUUsSUFBQUEscUNBQTRCLEVBQUNqRSxhQUFhVDtnQkFFaEVxRSxVQUFVLElBQUl2RSxRQUFRRSxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZQyxXQUFXQztZQUN0RSxHQUFHNkQsTUFBTWxFO1FBQ1gsR0FBR0E7UUFFSCxPQUFPcUU7SUFDVDtBQUNGO0FBRUEsU0FBU0kseUJBQXlCaEUsV0FBVyxFQUFFVCxPQUFPO0lBQ3BELE1BQU1XLGdCQUFnQkYsWUFBWUMsZ0JBQWdCLElBQzVDTixZQUFZSixRQUFRMkUsNEJBQTRCLENBQUNoRTtJQUV2RCxPQUFPUDtBQUNUIn0=
@@ -234,18 +234,18 @@ const _default = (0, _elements.define)(class Step extends _proofAssertion.defaul
234
234
  const stepString = this.getString(); ///
235
235
  context.trace(`Unifying the '${stepString}' step...`);
236
236
  const step = this; ///
237
- some(_unification.unifySteps, (unifyStep, continuation)=>{
237
+ return some(_unification.unifySteps, (unifyStep, continuation)=>{
238
238
  (0, _context.reconcile)((context)=>{
239
- unifyStep(step, context, continuation);
239
+ return unifyStep(step, context, continuation);
240
240
  }, context);
241
241
  }, (unifies)=>{
242
242
  if (unifies) {
243
243
  context.debug(`...unified the '${stepString}' step.`);
244
244
  }
245
- continuation(unifies);
245
+ return continuation(unifies);
246
246
  });
247
247
  }
248
248
  static name = "Step";
249
249
  });
250
250
 
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N0ZXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgUHJvb2ZBc3NlcnRpb24gZnJvbSBcIi4uL3Byb29mQXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHVuaWZ5U3RlcHMgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy91bmlmaWNhdGlvblwiO1xuaW1wb3J0IHsgZGVyaXZlLCBkZWNsYXJlLCBhdHRlbXB0LCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBzb21lIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdGVwIGV4dGVuZHMgUHJvb2ZBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICBnZXRTaWduYXR1cmVBc3NlcnRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgZ2V0U3RlcE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0ZXBOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHN0ZXBOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBpc1N0ZXAoKSB7XG4gICAgY29uc3Qgc3RlcCA9IHRydWU7XG5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIGlzUXVhbGlmaWVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9ICgodGhpcy5yZWZlcmVuY2UgIT09IG51bGwpIHx8ICh0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkpO1xuXG4gICAgcmV0dXJuIHF1YWxpZmllZDtcbiAgfVxuXG4gIGlzVW5xdWFsaWZpZWQoKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkID0gdGhpcy5pc1F1YWxpZmllZCgpLFxuICAgICAgICAgIHVucXVhbGlmaWVkID0gIXF1YWxpZmllZDtcblxuICAgIHJldHVybiB1bnF1YWxpZmllZDtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG5vbnNlbnNpY2FsO1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVEZWZpbmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB1bnF1YWxpZmllZCA9IHRoaXMuaXNVbnF1YWxpZmllZCgpO1xuXG4gICAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGp1ZGdlbWVudC5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIGNvbXBhcmVKdWRnZW1lbnRzKGp1ZGdlbWVudHMsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb0p1ZGdlbWVudHM7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgLy8vXG5cbiAgICBjb21wYXJlc1RvSnVkZ2VtZW50cyA9IGJhY2t3YXJkc1NvbWUoanVkZ2VtZW50cywgKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgY29uc3QganVkZ2VtZW50Q29tcGFyZXNUb1N0YXRlbWVudCA9IGp1ZGdlbWVudC5jb21wYXJlU3RlcChzdGVwLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGp1ZGdlbWVudENvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb0p1ZGdlbWVudHM7XG4gIH1cblxuICBjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3Qgc3RlcCA9IHRoaXM7IC8vL1xuXG4gICAgY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Db21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBub25zZW5zaWNhbCA9IHRoaXMuaXNOb25zZW5zaWNhbCgpO1xuXG4gICAgaWYgKG5vbnNlbnNpY2FsKSB7XG4gICAgICBjb25zdCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuXG4gICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVhbGlmaWVkID0gdGhpcy5pc1F1YWxpZmllZCgpLFxuICAgICAgICAgIHN0YXRlZCA9IHF1YWxpZmllZDsgLy8vXG5cbiAgICAoc3RhdGVkID8gZGVjbGFyZSA6IGRlcml2ZSkoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZ5ID0gdGhpcy51bmlmeS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGUgPSB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGFsbChbXG4gICAgICAgIHZhbGlkYXRlLFxuICAgICAgICB1bmlmeVxuICAgICAgXSwgY29udGV4dCwgKHZlcmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVNpZ25hdHVyZUFzc2VydGlvbiA9IHRoaXMudmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24uYmluZCh0aGlzKTtcblxuICAgICAgYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlLFxuICAgICAgICB2YWxpZGF0ZVNpZ25hdHVyZUFzc2VydGlvblxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMucmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0cnVlOyAgLy8vXG5cbiAgICAgIGNvbnRpbnVhdGlvbihyZWZlcmVuY2VWYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLnJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0LCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocmVmZXJlbmNlVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdGhpcy5zaWduYXR1cmVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHNpZ25hdHVyZUFzc2VydGlvbikgPT4ge1xuICAgICAgbGV0IHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgIC8vL1xuXG4gICAgc29tZSh1bmlmeVN0ZXBzLCAodW5pZnlTdGVwLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgICB1bmlmeVN0ZXAoc3RlcCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sICh1bmlmaWVzKSA9PiB7XG4gICAgICBpZiAodW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWF0aW9uKHVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN0ZXBcIjtcbn0pO1xuIl0sIm5hbWVzIjpbInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiU3RlcCIsIlByb29mQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0U3RlcE5vZGUiLCJnZXROb2RlIiwic3RlcE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImlzU3RlcCIsInN0ZXAiLCJpc1F1YWxpZmllZCIsInF1YWxpZmllZCIsImlzVW5xdWFsaWZpZWQiLCJ1bnF1YWxpZmllZCIsImlzTm9uc2Vuc2ljYWwiLCJub25zZW5zaWNhbCIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZURlZmluZWQiLCJKdWRnZW1lbnQiLCJlbGVtZW50cyIsImp1ZGdlbWVudCIsImZyb21TdGF0ZW1lbnQiLCJjb21wYXJlSnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJjb21wYXJlc1RvSnVkZ2VtZW50cyIsImp1ZGdlbWVudENvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RlcCIsImNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uQ29tcGFyZXNUb1N0YXRlbWVudCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmaWVzIiwiZGVidWciLCJzdGF0ZWQiLCJkZWNsYXJlIiwiZGVyaXZlIiwidW5pZnkiLCJiaW5kIiwidmFsaWRhdGUiLCJhbGwiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIiwidmFsaWRhdGVzIiwiY29tbWl0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwicmVmZXJlbmNlU3RyaW5nIiwic2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGVwcyIsInVuaWZ5U3RlcCIsInJlY29uY2lsZSIsInVuaWZpZXMiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7MkJBZitCO2dDQUM0QjtrRUFFdEM7dUVBQ007OEJBRVA7NkJBRU87eUJBQ3lCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRCxNQUFNLEVBQUVBLElBQUksRUFBRSxHQUFHQyxxQ0FBcUIsRUFDaEMsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQixFQUNuQyxFQUFFQyxhQUFhLEVBQUUsR0FBR0MseUJBQWM7TUFFeEMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBYztJQUNyRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsQ0FBRTtRQUN2RixLQUFLLENBQUNOLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDO1FBRXpDLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLGtCQUFrQixHQUFHQTtJQUM1QjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDRixrQkFBa0I7SUFDaEM7SUFFQUcsY0FBYztRQUNaLE1BQU1QLE9BQU8sSUFBSSxDQUFDUSxPQUFPLElBQ25CQyxXQUFXVCxNQUFPLEdBQUc7UUFFM0IsT0FBT1M7SUFDVDtJQUVBQyxtQkFBbUI7UUFDakIsTUFBTVIsWUFBWSxJQUFJLENBQUNTLFlBQVksSUFDN0JDLGdCQUFnQlYsVUFBVU0sT0FBTztRQUV2QyxPQUFPSTtJQUNUO0lBRUFDLFNBQVM7UUFDUCxNQUFNQyxPQUFPO1FBRWIsT0FBT0E7SUFDVDtJQUVBQyxjQUFjO1FBQ1osTUFBTUMsWUFBYSxBQUFDLElBQUksQ0FBQ2IsU0FBUyxLQUFL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
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N0ZXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgUHJvb2ZBc3NlcnRpb24gZnJvbSBcIi4uL3Byb29mQXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHVuaWZ5U3RlcHMgfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy91bmlmaWNhdGlvblwiO1xuaW1wb3J0IHsgZGVyaXZlLCBkZWNsYXJlLCBhdHRlbXB0LCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBzb21lIH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrYWJsZSB9ID0gYnJlYWtQb2ludFV0aWxpdGllcyxcbiAgICAgIHsgYmFja3dhcmRzU29tZSB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdGVwIGV4dGVuZHMgUHJvb2ZBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiA9IHNpZ25hdHVyZUFzc2VydGlvbjtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICBnZXRTaWduYXR1cmVBc3NlcnRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uO1xuICB9XG5cbiAgZ2V0U3RlcE5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHN0ZXBOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIHN0ZXBOb2RlO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBpc1N0ZXAoKSB7XG4gICAgY29uc3Qgc3RlcCA9IHRydWU7XG5cbiAgICByZXR1cm4gc3RlcDtcbiAgfVxuXG4gIGlzUXVhbGlmaWVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9ICgodGhpcy5yZWZlcmVuY2UgIT09IG51bGwpIHx8ICh0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiAhPT0gbnVsbCkpO1xuXG4gICAgcmV0dXJuIHF1YWxpZmllZDtcbiAgfVxuXG4gIGlzVW5xdWFsaWZpZWQoKSB7XG4gICAgY29uc3QgcXVhbGlmaWVkID0gdGhpcy5pc1F1YWxpZmllZCgpLFxuICAgICAgICAgIHVucXVhbGlmaWVkID0gIXF1YWxpZmllZDtcblxuICAgIHJldHVybiB1bnF1YWxpZmllZDtcbiAgfVxuXG4gIGlzTm9uc2Vuc2ljYWwoKSB7XG4gICAgY29uc3Qgbm9uc2Vuc2ljYWwgPSAodGhpcy5zdGF0ZW1lbnQgPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIG5vbnNlbnNpY2FsO1xuICB9XG5cbiAgaXNNZXRhdmFyaWFibGVEZWZpbmVkKG1ldGF2YXJpYWJsZSwgY29udGV4dCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVEZWZpbmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCB1bnF1YWxpZmllZCA9IHRoaXMuaXNVbnF1YWxpZmllZCgpO1xuXG4gICAgaWYgKHVucXVhbGlmaWVkKSB7XG4gICAgICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBqdWRnZW1lbnQgPSBKdWRnZW1lbnQuZnJvbVN0YXRlbWVudCh0aGlzLnN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgbWV0YXZhcmlhYmxlRGVmaW5lZCA9IGp1ZGdlbWVudC5pc01ldGF2YXJpYWJsZURlZmluZWQobWV0YXZhcmlhYmxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlRGVmaW5lZDtcbiAgfVxuXG4gIGNvbXBhcmVKdWRnZW1lbnRzKGp1ZGdlbWVudHMsIGNvbnRleHQpIHtcbiAgICBsZXQgY29tcGFyZXNUb0p1ZGdlbWVudHM7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgLy8vXG5cbiAgICBjb21wYXJlc1RvSnVkZ2VtZW50cyA9IGJhY2t3YXJkc1NvbWUoanVkZ2VtZW50cywgKGp1ZGdlbWVudCkgPT4ge1xuICAgICAgY29uc3QganVkZ2VtZW50Q29tcGFyZXNUb1N0YXRlbWVudCA9IGp1ZGdlbWVudC5jb21wYXJlU3RlcChzdGVwLCBjb250ZXh0KTtcblxuICAgICAgaWYgKGp1ZGdlbWVudENvbXBhcmVzVG9TdGF0ZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb0p1ZGdlbWVudHM7XG4gIH1cblxuICBjb21wYXJlU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuXG4gICAgY29uc3Qgc3RlcCA9IHRoaXM7IC8vL1xuXG4gICAgY29tcGFyZXNUb1N1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBiYWNrd2FyZHNTb21lKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbkNvbXBhcmVzVG9TdGF0ZW1lbnQgPSBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24uY29tcGFyZVN0ZXAoc3RlcCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25Db21wYXJlc1RvU3RhdGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBub25zZW5zaWNhbCA9IHRoaXMuaXNOb25zZW5zaWNhbCgpO1xuXG4gICAgaWYgKG5vbnNlbnNpY2FsKSB7XG4gICAgICBjb25zdCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBVbmFibGUgdG8gdmVyaWZ5IHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCBiZWNhdXNlIGl0IGlzIG5vbnNlbnNlLmApO1xuXG4gICAgICBjb250aW51YXRpb24odmVyaWZpZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVhbGlmaWVkID0gdGhpcy5pc1F1YWxpZmllZCgpLFxuICAgICAgICAgIHN0YXRlZCA9IHF1YWxpZmllZDsgLy8vXG5cbiAgICAoc3RhdGVkID8gZGVjbGFyZSA6IGRlcml2ZSkoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZ5ID0gdGhpcy51bmlmeS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGUgPSB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyk7XG5cbiAgICAgIGFsbChbXG4gICAgICAgIHZhbGlkYXRlLFxuICAgICAgICB1bmlmeVxuICAgICAgXSwgY29udGV4dCwgKHZlcmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSk7XG5cbiAgdmFsaWRhdGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50ID0gdGhpcy52YWxpZGF0ZVN0YXRlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVSZWZlcmVuY2UgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVNpZ25hdHVyZUFzc2VydGlvbiA9IHRoaXMudmFsaWRhdGVTaWduYXR1cmVBc3NlcnRpb24uYmluZCh0aGlzKTtcblxuICAgICAgYWxsKFtcbiAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQsXG4gICAgICAgIHZhbGlkYXRlUmVmZXJlbmNlLFxuICAgICAgICB2YWxpZGF0ZVNpZ25hdHVyZUFzc2VydGlvblxuICAgICAgXSwgY29udGV4dCwgKHZhbGlkYXRlcykgPT4ge1xuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3Mgc3RhdGVtZW50Li4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmdldFN0YXRlbWVudCgpO1xuXG4gICAgc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyBzdGF0ZW1lbnQuYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVSZWZlcmVuY2UoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgaWYgKHRoaXMucmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0cnVlOyAgLy8vXG5cbiAgICAgIGNvbnRpbnVhdGlvbihyZWZlcmVuY2VWYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLnJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZS52YWxpZGF0ZShjb250ZXh0LCAocmVmZXJlbmNlKSA9PiB7XG4gICAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG5cbiAgICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24ocmVmZXJlbmNlVmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLnNpZ25hdHVyZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLnNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdGhpcy5zaWduYXR1cmVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHNpZ25hdHVyZUFzc2VydGlvbikgPT4ge1xuICAgICAgbGV0IHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2lnbmF0dXJlQXNzZXJ0aW9uID0gc2lnbmF0dXJlQXNzZXJ0aW9uO1xuXG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3NpZ25hdHVyZUFzc2VydGlvblN0cmluZ30nIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVhdGlvbihzaWduYXR1cmVBc3NlcnRpb25WYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBjb25zdCBzdGVwID0gdGhpczsgIC8vL1xuXG4gICAgcmV0dXJuIHNvbWUodW5pZnlTdGVwcywgKHVuaWZ5U3RlcCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgcmV0dXJuIHVuaWZ5U3RlcChzdGVwLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfSwgKHVuaWZpZXMpID0+IHtcbiAgICAgIGlmICh1bmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN0ZXBcIjtcbn0pO1xuIl0sIm5hbWVzIjpbInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYmFja3dhcmRzU29tZSIsImFycmF5VXRpbGl0aWVzIiwiZGVmaW5lIiwiU3RlcCIsIlByb29mQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50Iiwic3RhdGVtZW50IiwicmVmZXJlbmNlIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0UmVmZXJlbmNlIiwiZ2V0U2lnbmF0dXJlQXNzZXJ0aW9uIiwiZ2V0U3RlcE5vZGUiLCJnZXROb2RlIiwic3RlcE5vZGUiLCJnZXRTdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Iiwic3RhdGVtZW50Tm9kZSIsImlzU3RlcCIsInN0ZXAiLCJpc1F1YWxpZmllZCIsInF1YWxpZmllZCIsImlzVW5xdWFsaWZpZWQiLCJ1bnF1YWxpZmllZCIsImlzTm9uc2Vuc2ljYWwiLCJub25zZW5zaWNhbCIsImlzTWV0YXZhcmlhYmxlRGVmaW5lZCIsIm1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZURlZmluZWQiLCJKdWRnZW1lbnQiLCJlbGVtZW50cyIsImp1ZGdlbWVudCIsImZyb21TdGF0ZW1lbnQiLCJjb21wYXJlSnVkZ2VtZW50cyIsImp1ZGdlbWVudHMiLCJjb21wYXJlc1RvSnVkZ2VtZW50cyIsImp1ZGdlbWVudENvbXBhcmVzVG9TdGF0ZW1lbnQiLCJjb21wYXJlU3RlcCIsImNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImNvbXBhcmVzVG9TdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uQ29tcGFyZXNUb1N0YXRlbWVudCIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInN0ZXBTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmaWVzIiwiZGVidWciLCJzdGF0ZWQiLCJkZWNsYXJlIiwiZGVyaXZlIiwidW5pZnkiLCJiaW5kIiwidmFsaWRhdGUiLCJhbGwiLCJhdHRlbXB0IiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInZhbGlkYXRlU2lnbmF0dXJlQXNzZXJ0aW9uIiwidmFsaWRhdGVzIiwiY29tbWl0Iiwic3RhdGVtZW50VmFsaWRhdGVzIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwicmVmZXJlbmNlU3RyaW5nIiwic2lnbmF0dXJlQXNzZXJ0aW9uVmFsaWRhdGVzIiwic2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nIiwidW5pZnlTdGVwcyIsInVuaWZ5U3RlcCIsInJlY29uY2lsZSIsInVuaWZpZXMiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7MkJBZitCO2dDQUM0QjtrRUFFdEM7dUVBQ007OEJBRVA7NkJBRU87eUJBQ3lCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVwRCxNQUFNLEVBQUVBLElBQUksRUFBRSxHQUFHQyxxQ0FBcUIsRUFDaEMsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQixFQUNuQyxFQUFFQyxhQUFhLEVBQUUsR0FBR0MseUJBQWM7TUFFeEMsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBYztJQUNyRCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsQ0FBRTtRQUN2RixLQUFLLENBQUNOLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDO1FBRXpDLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLGtCQUFrQixHQUFHQTtJQUM1QjtJQUVBQyxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUNGLFNBQVM7SUFDdkI7SUFFQUcsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDRixrQkFBa0I7SUFDaEM7SUFFQUcsY0FBYztRQUNaLE1BQU1QLE9BQU8sSUFBSSxDQUFDUSxPQUFPLElBQ25CQyxXQUFXVCxNQUFPLEdBQUc7UUFFM0IsT0FBT1M7SUFDVDtJQUVBQyxtQkFBbUI7UUFDakIsTUFBTVIsWUFBWSxJQUFJLENBQUNTLFlBQVksSUFDN0JDLGdCQUFnQlYsVUFBVU0sT0FBTztRQUV2QyxPQUFPSTtJQUNUO0lBRUFDLFNBQVM7UUFDUCxNQUFNQyxPQUFPO1FBRWIsT0FBT0E7SUFDVDtJQUVBQyxjQUFjO1FBQ1osTUFBTUMsWUFBYSxBQUFD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