@dbx-tools/appkit-mastra 0.9.73 → 0.9.79

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.
@@ -451,10 +451,11 @@ function resolveFallback(configured) {
451
451
  function isDatabricksSandboxUnavailable(caught) {
452
452
  const context = errorUtils.errorContext(caught);
453
453
  return (context.statusCode === 404 ||
454
+ context.hasMessage("requested", "api", "not", "available") ||
454
455
  context.hasMessage("feature", "disabled") ||
455
456
  context.hasMessage("sandbox", "not", "enabled") ||
456
457
  context.hasMessage("preview", "not", "enabled") ||
457
458
  context.hasMessage("preview", "unavailable") ||
458
459
  context.hasMessage("preview", "disabled"));
459
460
  }
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTbEYsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVFLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUMsTUFBTSxxQkFBcUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNoRSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQztBQUMzQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFNUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxNQUFlO0lBQ3JELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUNMLE9BQU8sQ0FBQyxVQUFVLEtBQUssR0FBRztRQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUMvQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUM1QyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDMUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3MgU2FuZGJveCBhZGFwdGVyIGZvciBNYXN0cmEgd29ya3NwYWNlcy5cbiAqXG4gKiBJbXBsZW1lbnRzIE1hc3RyYSdzIGZvcmVncm91bmQgY29tbWFuZCBzdXJmYWNlIG92ZXIgdGhlIERhdGFicmlja3MgU2FuZGJveFxuICogUkVTVCBBUEkuIFNhbmRib3hlcyBhcmUgY3JlYXRlZCBsYXppbHksIHJldGFpbiB0aGVpciBob21lIGRpcmVjdG9yeSBhY3Jvc3NcbiAqIGluYWN0aXZpdHkgc3RvcHMsIGFuZCBleGVjdXRlIHVudHJ1c3RlZCBzaGVsbCBjb21tYW5kcyBvdXRzaWRlIHRoZSBBcHBcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luY1V0aWxzLCBlcnJvclV0aWxzLCBsb2csIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kUmVzdWx0LFxuICBFeGVjdXRlQ29tbWFuZE9wdGlvbnMsXG4gIFByb3ZpZGVyU3RhdHVzLFxuICBTYW5kYm94SW5mbyxcbiAgV29ya3NwYWNlU2FuZGJveCxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3gsIHR5cGUgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL21vbnR5LXNhbmRib3gudHNcIjtcblxuY29uc3QgU0FOREJPWF9BUElfUEFUSCA9IFwiL2FwaS8yLjAvc2FuZGJveGVzXCI7XG5jb25zdCBTQU5EQk9YX0VYRUNfQVBJX1BBVEggPSBcIi9hcGkvMi4wL3NhbmRib3gtZXhlYy9zYW5kYm94ZXNcIjtcbmNvbnN0IERFRkFVTFRfSU5BQ1RJVklUWV9USU1FT1VUID0gXCI5MDBzXCI7XG5jb25zdCBERUZBVUxUX1NUQVJUVVBfVElNRU9VVF9NUyA9IDEyMF8wMDA7XG5jb25zdCBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUyA9IDMwXzAwMDtcbmNvbnN0IFNBTkRCT1hfUE9MTF9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvc2FuZGJveFwiKTtcblxuY29uc3QgU2FuZGJveFN0YXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IFNhbmRib3hSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVwZGF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXR1czogU2FuZGJveFN0YXRlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBleGl0X2NvZGU6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBzdGRvdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RkZXJyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbW1hbmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBPcHRpb25zIGZvciBvbmUgRGF0YWJyaWNrcy1iYWNrZWQgTWFzdHJhIHNhbmRib3guICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NTYW5kYm94T3B0aW9ucyB7XG4gIC8qKiBBcHBLaXQgd29ya3NwYWNlIGNsaWVudCB1c2VkIGZvciBldmVyeSBzYW5kYm94IEFQSSBjYWxsLiAqL1xuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIFJlc291cmNlIGlkLCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBzYW5kYm94ZXMvYCBwcmVmaXguICovXG4gIHNhbmRib3hJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgRGF0YWJyaWNrcyBsYWJlbC4gKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZXJ2ZXItc2lkZSBpZGxlIHRpbWVvdXQgaW4gcHJvdG9idWYgZHVyYXRpb24gZm9ybS4gRGVmYXVsdHMgdG8gYDkwMHNgLiAqL1xuICBpbmFjdGl2aXR5VGltZW91dD86IHN0cmluZztcbiAgLyoqIE1heGltdW0gdGltZSB0byB3YWl0IGZvciB0aGUgc2FuZGJveCB0byBiZWNvbWUgcnVubmFibGUuICovXG4gIHN0YXJ0dXBUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IGNvbW1hbmQgdGltZW91dC4gUGVyLWNhbGwgYG9wdGlvbnMudGltZW91dGAgd2lucy4gKi9cbiAgY29tbWFuZFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIHVzZWQgb25seSB3aGVuIERhdGFicmlja3MgU2FuZGJveCBpcyBkZWZpbml0aXZlbHkgdW5hdmFpbGFibGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBOb2RlIFB5ZGFudGljIE1vbnR5IHJ1bnRpbWU7IGBmYWxzZWAgZmFpbHMgaW5zdGVhZC5cbiAgICovXG4gIGZhbGxiYWNrPzogZmFsc2UgfCBcIm1vbnR5XCIgfCBNb250eVNhbmRib3hPcHRpb25zIHwgV29ya3NwYWNlU2FuZGJveDtcbn1cblxuLyoqIERhdGFicmlja3Mgb3B0aW9ucyBhY2NlcHRlZCBieSB0aGUgaGlnaGVyLWxldmVsIHdvcmtzcGFjZSBmYWN0b3J5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgZXh0ZW5kcyBPbWl0PFxuICBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsXG4gIFwiY2xpZW50XCIgfCBcInNhbmRib3hJZFwiXG4+IHtcbiAgLyoqIFByb3ZpZGVyIGRpc2NyaW1pbmF0b3IuIERlZmF1bHRzIHRvIGBkYXRhYnJpY2tzYC4gKi9cbiAgcHJvdmlkZXI/OiBcImRhdGFicmlja3NcIjtcbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgc291cmNlLiBEZWZhdWx0cyB0byBhIGZyZXNoIEFwcEtpdCBjbGllbnQgdXNpbmcgdGhlIG5vcm1hbFxuICAgKiBlbnZpcm9ubWVudC9wcm9maWxlIGNoYWluLCB3aGljaCBpcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGluIGFcbiAgICogRGF0YWJyaWNrcyBBcHAuXG4gICAqL1xuICBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQgfCAoKGNvbnRleHQ6IHsgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IH0pID0+IFdvcmtzcGFjZUNsaWVudCk7XG4gIC8qKlxuICAgKiBGaXhlZCBpZCBvciBwZXItcmVxdWVzdCByZXNvbHZlci4gT21pdCB0byBkZXJpdmUgYSBzdGFibGUsIG9wYXF1ZSBpZCBmcm9tXG4gICAqIHRoZSB3b3Jrc3BhY2UgYW5kIGF0dHJpYnV0ZWQgdXNlci5cbiAgICovXG4gIHNhbmRib3hJZD86IHN0cmluZyB8ICgoY29udGV4dDogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gc3RyaW5nKTtcbn1cblxuLyoqIE1hc3RyYSBzYW5kYm94IGJhY2tlZCBieSBEYXRhYnJpY2tzIHNlcnZlcmxlc3MgU2FuZGJveCBjb21wdXRlLiAqL1xuZXhwb3J0IGNsYXNzIERhdGFicmlja3NTYW5kYm94IGltcGxlbWVudHMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuICBlcnJvcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5hY3Rpdml0eVRpbWVvdXQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydHVwVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29uZmlnOiBFeGNsdWRlPERhdGFicmlja3NTYW5kYm94T3B0aW9uc1tcImZhbGxiYWNrXCJdLCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgcmVtb3RlQ3JlYXRlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBhY3RpdmVGYWxsYmFjaz86IFdvcmtzcGFjZVNhbmRib3g7XG4gIHByaXZhdGUgZmFsbGJhY2tQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBzdGFydFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERhdGFicmlja3NTYW5kYm94T3B0aW9ucykge1xuICAgIGNvbnN0IGlkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChvcHRpb25zLnNhbmRib3hJZC5yZXBsYWNlKC9ec2FuZGJveGVzXFwvLywgXCJcIikpO1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEYXRhYnJpY2tzIHNhbmRib3ggaWQgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU/LnRyaW0oKSB8fCBgTWFzdHJhIHNhbmRib3ggJHtpZH1gO1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IHRoaXMubmFtZTtcbiAgICB0aGlzLmluYWN0aXZpdHlUaW1lb3V0ID0gb3B0aW9ucy5pbmFjdGl2aXR5VGltZW91dCA/PyBERUZBVUxUX0lOQUNUSVZJVFlfVElNRU9VVDtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lb3V0TXMgPSBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMgPz8gREVGQVVMVF9TVEFSVFVQX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuZmFsbGJhY2tDb25maWcgPSBvcHRpb25zLmZhbGxiYWNrID8/IFwibW9udHlcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5wcm92aWRlciA/PyBcImRhdGFicmlja3NcIjtcbiAgfVxuXG4gIC8qKiBFbnN1cmUgdGhlIHJlbW90ZSBzYW5kYm94IGV4aXN0cyBhbmQgaGFzIHJlYWNoZWQgaXRzIHJ1bm5pbmcgc3RhdGUuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRXaXRoU2lnbmFsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0V2l0aFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGFydFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZXJmb3JtU3RhcnQoc2lnbmFsKTtcbiAgICB0aGlzLnN0YXJ0UHJvbWlzZSA9IHBlbmRpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlbmRpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0UHJvbWlzZSA9PT0gcGVuZGluZykgdGhpcy5zdGFydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtU3RhcnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5zdGFydD8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1cyA9IFwic3RhcnRpbmdcIjtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2FuZGJveCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGUoc2lnbmFsKTtcbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIpIHtcbiAgICAgICAgc2FuZGJveCA9IGF3YWl0IHRoaXMubXV0YXRlKFwic3RhcnRcIiwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUElOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIsIHNpZ25hbCk7XG4gICAgICAgIHNhbmRib3ggPSBhd2FpdCB0aGlzLm11dGF0ZShcInN0YXJ0XCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuZGJveC5zdGF0dXM/LnN0YXRlICE9PSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwicnVubmluZ1wiO1xuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnICE9PSBmYWxzZSAmJiBpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlRmFsbGJhY2soY2F1Z2h0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXMgPSBcImVycm9yXCI7XG4gICAgICB0aGlzLmVycm9yID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIHRocm93IGNhdWdodDtcbiAgICB9XG4gIH1cblxuICAvKiogRGF0YWJyaWNrcyBob21lIHBlcnNpc3RlbmNlIGlzIG5vdCBhIGNsb25lYWJsZSBNYXN0cmEgY2hlY2twb2ludC4gKi9cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjaz8uc25hcHNob3QoKTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0NoZWNrcG9pbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5zdXBwb3J0c0NoZWNrcG9pbnRzID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFN0b3AgY29tcHV0ZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5LiAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0b3A/LigpO1xuICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInN0b3BwZWRcIiB8fCB0aGlzLnN0YXR1cyA9PT0gXCJkZXN0cm95ZWRcIikgcmV0dXJuO1xuICAgIHRoaXMuc3RhdHVzID0gXCJzdG9wcGluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm11dGF0ZShcInN0b3BcIik7XG4gICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQZXJtYW5lbnRseSBkZWxldGUgdGhlIHNhbmRib3ggYW5kIGl0cyBwZXJzaXN0ZWQgaG9tZSBkaXJlY3RvcnkuICovXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZlRmFsbGJhY2suZGVzdHJveT8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZGVzdHJveWVkXCIpIHJldHVybjtcbiAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9YCwgXCJERUxFVEVcIiwgei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3llZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWVkXCI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzID0gXCJlcnJvclwiO1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEV4ZWN1dGUgb25lIGZvcmVncm91bmQgc2hlbGwgY29tbWFuZCBpbiB0aGUgcmVtb3RlIHNhbmRib3guICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG9wdGlvbnM6IEV4ZWN1dGVDb21tYW5kT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2l0aFNpZ25hbChvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZhbGxiYWNrKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCBzY3JpcHQgPSBjb21tYW5kU2NyaXB0KGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMuY3dkKTtcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgbGV0IHJlc3BvbnNlOiB6LmluZmVyPHR5cGVvZiBFeGVjdXRlUmVzcG9uc2VTY2hlbWE+O1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdChcbiAgICAgICAgYCR7U0FOREJPWF9FWEVDX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX0vZXhlYy1zeW5jYCxcbiAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgIEV4ZWN1dGVSZXNwb25zZVNjaGVtYSxcbiAgICAgICAge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGNtZDogXCIvYmluL2Jhc2hcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcIi1sY1wiLCBzY3JpcHRdLFxuICAgICAgICAgICAgZW52czogZGVmaW5lZEVudmlyb25tZW50KG9wdGlvbnMuZW52KSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbl90aW1lb3V0OiBgJHtNYXRoLm1heCgxLCBNYXRoLmNlaWwodGltZW91dCAvIDFfMDAwKSl9c2AsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tDb25maWcgPT09IGZhbHNlIHx8ICFpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkgdGhyb3cgY2F1Z2h0O1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUZhbGxiYWNrKGNhdWdodCk7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlRmFsbGJhY2soY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IHN0ZG91dCA9IHJlc3BvbnNlLnN0ZG91dCA/PyBcIlwiO1xuICAgIGNvbnN0IHN0ZGVyciA9IHJlc3BvbnNlLnN0ZGVyciA/PyBcIlwiO1xuICAgIG9wdGlvbnMub25TdGRvdXQ/LihzdGRvdXQpO1xuICAgIG9wdGlvbnMub25TdGRlcnI/LihzdGRlcnIpO1xuICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdGltZWRPdXQgPSByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19USU1FRF9PVVRcIjtcbiAgICBjb25zdCBleGl0Q29kZSA9IHJlc3BvbnNlLmV4aXRfY29kZSA/PyAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19DT01QTEVURURcIiAmJiBleGl0Q29kZSA9PT0gMCxcbiAgICAgIGV4aXRDb2RlLFxuICAgICAgc3Rkb3V0LFxuICAgICAgc3RkZXJyLFxuICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAuLi4odGltZWRPdXQgPyB7IHRpbWVkT3V0OiB0cnVlLCBraWxsZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXNwb25zZS50cnVuY2F0ZWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRvdXRUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRlcnJUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFjdGl2YXRlIHRoZSBjb25maWd1cmVkIGZhbGxiYWNrIG9uY2UgYWNyb3NzIGNvbmN1cnJlbnQgY29tbWFuZCBmYWlsdXJlcy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBhY3RpdmF0ZUZhbGxiYWNrKGNhdWdodDogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuc3RhcnRGYWxsYmFjayhjYXVnaHQpO1xuICAgIHRoaXMuZmFsbGJhY2tQcm9taXNlID0gcGVuZGluZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGVuZGluZztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlID09PSBwZW5kaW5nKSB0aGlzLmZhbGxiYWNrUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQgYW5kIHB1Ymxpc2ggdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgYWZ0ZXIgcmVjaGVja2luZyBhY3RpdmUgc3RhdGUuICovXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRGYWxsYmFjayhjYXVnaHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnID09PSBmYWxzZSkgdGhyb3cgY2F1Z2h0O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHRoaXMuZmFsbGJhY2tDb25maWcpO1xuICAgIGxvZ2dlci53YXJuKFwiRGF0YWJyaWNrcyBTYW5kYm94IHVuYXZhaWxhYmxlOyB1c2luZyBmYWxsYmFja1wiLCB7XG4gICAgICBzYW5kYm94SWQ6IHRoaXMuaWQsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2sucHJvdmlkZXIsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KSxcbiAgICB9KTtcbiAgICBhd2FpdCBmYWxsYmFjay5zdGFydD8uKCk7XG4gICAgdGhpcy5hY3RpdmVGYWxsYmFjayA9IGZhbGxiYWNrO1xuICAgIHRoaXMuc3RhdHVzID0gZmFsbGJhY2suc3RhdHVzO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxsYmFjay5lcnJvcjtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBmYWxsYmFjayBvciByZXR1cm4gYW4gdW5zdXBwb3J0ZWQgcmVzdWx0LiAqL1xuICBwcml2YXRlIGV4ZWN1dGVGYWxsYmFjayhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zLFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuYWN0aXZlRmFsbGJhY2s7XG4gICAgaWYgKCFmYWxsYmFjaykgdGhyb3cgbmV3IEVycm9yKFwiRmFsbGJhY2sgc2FuZGJveCBpcyBub3QgYWN0aXZlXCIpO1xuICAgIGlmIChmYWxsYmFjay5leGVjdXRlQ29tbWFuZCkgcmV0dXJuIGZhbGxiYWNrLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGV4aXRDb2RlOiAxLFxuICAgICAgc3Rkb3V0OiBcIlwiLFxuICAgICAgc3RkZXJyOiBgRmFsbGJhY2sgc2FuZGJveCAke2ZhbGxiYWNrLnByb3ZpZGVyfSBkb2VzIG5vdCBzdXBwb3J0IGNvbW1hbmQgZXhlY3V0aW9uLmAsXG4gICAgICBleGVjdXRpb25UaW1lTXM6IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYWRhcHRlciBjdXJyZW50bHkga25vd3MgdGhlIHJlbW90ZSBzYW5kYm94IHRvIGJlIHJ1bm5pbmcuICovXG4gIGFzeW5jIGlzUmVhZHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlzUmVhZHk/LigpID8/IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzID09PSBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInJ1bm5pbmdcIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgICAgdGhpcy5zdGF0dXMgPVxuICAgICAgICBzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIgPyBcInJ1bm5pbmdcIiA6IHJlbW90ZVN0YXR1cyhzYW5kYm94KTtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcG9ydCBNYXN0cmEtZmFjaW5nIHNhbmRib3ggbWV0YWRhdGEuICovXG4gIGFzeW5jIGdldEluZm8oKTogUHJvbWlzZTxTYW5kYm94SW5mbz4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5nZXRJbmZvPy4oKSkgPz8ge1xuICAgICAgICAgIGlkOiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuYWN0aXZlRmFsbGJhY2submFtZSxcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5hY3RpdmVGYWxsYmFjay5wcm92aWRlcixcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgIHRoaXMuc3RhdHVzID0gcmVtb3RlU3RhdHVzKHNhbmRib3gpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHNhbmRib3guZGlzcGxheV9uYW1lID8/IHRoaXMubmFtZSxcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5yZW1vdGVDcmVhdGVkQXQgPz8gdGhpcy5jcmVhdGVkQXQsXG4gICAgICAuLi4odGhpcy5sYXN0VXNlZEF0ID8geyBsYXN0VXNlZEF0OiB0aGlzLmxhc3RVc2VkQXQgfSA6IHt9KSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHJlc291cmNlTmFtZTogc2FuZGJveC5uYW1lLFxuICAgICAgICByZW1vdGVTdGF0ZTogc2FuZGJveC5zdGF0dXM/LnN0YXRlLFxuICAgICAgICB1cGRhdGVUaW1lOiBzYW5kYm94LnVwZGF0ZV90aW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEV4cGxhaW4gdGhlIERhdGFicmlja3MgZXhlY3V0aW9uIGJvdW5kYXJ5IHRvIHRoZSBhZ2VudC4gKi9cbiAgZ2V0SW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiQ29tbWFuZHMgcnVuIGluIGEgcGVyc2lzdGVudCBEYXRhYnJpY2tzIHNlcnZlcmxlc3Mgc2FuZGJveCwgbm90IGluIHRoZSBBcHAgY29udGFpbmVyLlwiLFxuICAgICAgXCJVc2Ugc2hlbGwgY29tbWFuZHMgbm9ybWFsbHkuIFRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5IHN1cnZpdmVzIGluYWN0aXZpdHkgc3RvcHMuXCIsXG4gICAgICBcIklmIERhdGFicmlja3MgU2FuZGJveCBpcyB1bmF2YWlsYWJsZSwgY29tbWFuZHMgZmFsbCBiYWNrIHRvIFB5ZGFudGljIE1vbnR5IGFuZCBtdXN0IGJlIFB5dGhvbiBzb3VyY2UuXCIsXG4gICAgICBcIkRhdGFicmlja3MgV29ya3NwYWNlIGZpbGVzeXN0ZW0gbW91bnRzIHJlbWFpbiBzZXBhcmF0ZSB1bmxlc3MgYSBjb21tYW5kIGNvcGllcyBkYXRhIGV4cGxpY2l0bHkuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJlc291cmNlUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtTQU5EQk9YX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPckNyZWF0ZShzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFNBTkRCT1hfQVBJX1BBVEgsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgICAgcXVlcnk6IHsgc2FuZGJveF9pZDogdGhpcy5pZCB9LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgZGlzcGxheV9uYW1lOiB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIHNwZWM6IHtcbiAgICAgICAgICAgIGNvbXB1dGU6IHtcbiAgICAgICAgICAgICAgaW5hY3Rpdml0eV90aW1lb3V0OiB0aGlzLmluYWN0aXZpdHlUaW1lb3V0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgICByZXR1cm4gc2FuZGJveDtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDkpKSB0aHJvdyBjYXVnaHQ7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldChzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLnJlcXVlc3QodGhpcy5yZXNvdXJjZVBhdGgsIFwiR0VUXCIsIFNhbmRib3hSZXNwb25zZVNjaGVtYSwge1xuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgcmV0dXJuIHNhbmRib3g7XG4gIH1cblxuICBwcml2YXRlIG11dGF0ZShvcGVyYXRpb246IFwic3RhcnRcIiB8IFwic3RvcFwiLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9LyR7b3BlcmF0aW9ufWAsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvclN0YXRlKGV4cGVjdGVkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGhpcy5zdGFydHVwVGltZW91dE1zO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldChzaWduYWwpO1xuICAgICAgaWYgKHNhbmRib3guc3RhdHVzPy5zdGF0ZSA9PT0gZXhwZWN0ZWQpIHJldHVybiBzYW5kYm94O1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChTQU5EQk9YX1BPTExfSU5URVJWQUxfTVMsIHNpZ25hbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEYXRhYnJpY2tzIHNhbmRib3ggJHt0aGlzLmlkfSBkaWQgbm90IHJlYWNoICR7ZXhwZWN0ZWR9IHdpdGhpbiAke3RoaXMuc3RhcnR1cFRpbWVvdXRNc31tc2AsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtZW1iZXJDcmVhdGVkQXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHRoaXMucmVtb3RlQ3JlYXRlZEF0ID0gcGFyc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiREVMRVRFXCIsXG4gICAgc2NoZW1hOiB6LlpvZFR5cGU8VD4sXG4gICAgb3B0aW9uczoge1xuICAgICAgcGF5bG9hZD86IHVua25vd247XG4gICAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwYXlsb2FkOiBvcHRpb25zLnBheWxvYWQgfSksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5zaWduYWwgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChvcHRpb25zLnNpZ25hbCkgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgICByZXR1cm4gc2NoZW1hLnBhcnNlKHJlc3BvbnNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21tYW5kU2NyaXB0KGNvbW1hbmQ6IHN0cmluZywgYXJnczogcmVhZG9ubHkgc3RyaW5nW10sIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgaW52b2NhdGlvbiA9IGFyZ3MubGVuZ3RoID8gW2NvbW1hbmQsIC4uLmFyZ3NdLm1hcChzaGVsbFF1b3RlKS5qb2luKFwiIFwiKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBjd2QgPyBgY2QgLS0gJHtzaGVsbFF1b3RlKGN3ZCl9ICYmICR7aW52b2NhdGlvbn1gIDogaW52b2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFxcJydcIil9J2A7XG59XG5cbmZ1bmN0aW9uIGRlZmluZWRFbnZpcm9ubWVudChpbnB1dDogTm9kZUpTLlByb2Nlc3NFbnYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dCA/PyB7fSkuZmlsdGVyKFxuICAgICAgKGVudHJ5KTogZW50cnkgaXMgW3N0cmluZywgc3RyaW5nXSA9PiBlbnRyeVsxXSAhPT0gdW5kZWZpbmVkLFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdHVzKGNhdWdodDogdW5rbm93biwgc3RhdHVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KGNhdWdodCkuc3RhdHVzQ29kZSA9PT0gc3RhdHVzO1xufVxuXG5mdW5jdGlvbiByZW1vdGVTdGF0dXMoc2FuZGJveDogei5pbmZlcjx0eXBlb2YgU2FuZGJveFJlc3BvbnNlU2NoZW1hPik6IFByb3ZpZGVyU3RhdHVzIHtcbiAgc3dpdGNoIChzYW5kYm94LnN0YXR1cz8uc3RhdGUpIHtcbiAgICBjYXNlIFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgY2FzZSBcIlNBTkRCT1hfU1RBVEVfU1RPUFBFRFwiOlxuICAgICAgcmV0dXJuIFwic3RvcHBlZFwiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1NUT1BQSU5HXCI6XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1BFTkRJTkdcIjpcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInBlbmRpbmdcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFsbGJhY2soXG4gIGNvbmZpZ3VyZWQ6IEV4Y2x1ZGU8RGF0YWJyaWNrc1NhbmRib3hPcHRpb25zW1wiZmFsbGJhY2tcIl0sIGZhbHNlIHwgdW5kZWZpbmVkPixcbik6IFdvcmtzcGFjZVNhbmRib3gge1xuICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09IFwib2JqZWN0XCIgJiYgXCJwcm92aWRlclwiIGluIGNvbmZpZ3VyZWQgJiYgXCJzdGF0dXNcIiBpbiBjb25maWd1cmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBNb250eVNhbmRib3goY29uZmlndXJlZCA9PT0gXCJtb250eVwiID8ge30gOiBjb25maWd1cmVkKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhYnJpY2tzU2FuZGJveFVuYXZhaWxhYmxlKGNhdWdodDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQoY2F1Z2h0KTtcbiAgcmV0dXJuIChcbiAgICBjb250ZXh0LnN0YXR1c0NvZGUgPT09IDQwNCB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcImZlYXR1cmVcIiwgXCJkaXNhYmxlZFwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInNhbmRib3hcIiwgXCJub3RcIiwgXCJlbmFibGVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicHJldmlld1wiLCBcIm5vdFwiLCBcImVuYWJsZWRcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwidW5hdmFpbGFibGVcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwiZGlzYWJsZWRcIilcbiAgKTtcbn1cbiJdfQ==
461
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuZGJveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zYW5kYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFTbEYsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLG9CQUFvQixDQUFDO0FBRTVFLE1BQU0sZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUMsTUFBTSxxQkFBcUIsR0FBRyxpQ0FBaUMsQ0FBQztBQUNoRSxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLDBCQUEwQixHQUFHLE9BQU8sQ0FBQztBQUMzQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQztBQUMxQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFNUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQztBQUVILE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNoQixZQUFZLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxXQUFXLEVBQUUsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxNQUFlO0lBQ3JELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxDQUNMLE9BQU8sQ0FBQyxVQUFVLEtBQUssR0FBRztRQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQztRQUMxRCxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztRQUMvQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQztRQUM1QyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FDMUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGFicmlja3MgU2FuZGJveCBhZGFwdGVyIGZvciBNYXN0cmEgd29ya3NwYWNlcy5cbiAqXG4gKiBJbXBsZW1lbnRzIE1hc3RyYSdzIGZvcmVncm91bmQgY29tbWFuZCBzdXJmYWNlIG92ZXIgdGhlIERhdGFicmlja3MgU2FuZGJveFxuICogUkVTVCBBUEkuIFNhbmRib3hlcyBhcmUgY3JlYXRlZCBsYXppbHksIHJldGFpbiB0aGVpciBob21lIGRpcmVjdG9yeSBhY3Jvc3NcbiAqIGluYWN0aXZpdHkgc3RvcHMsIGFuZCBleGVjdXRlIHVudHJ1c3RlZCBzaGVsbCBjb21tYW5kcyBvdXRzaWRlIHRoZSBBcHBcbiAqIGNvbnRhaW5lci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luY1V0aWxzLCBlcnJvclV0aWxzLCBsb2csIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWVzdENvbnRleHQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3JlcXVlc3QtY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuICBDb21tYW5kUmVzdWx0LFxuICBFeGVjdXRlQ29tbWFuZE9wdGlvbnMsXG4gIFByb3ZpZGVyU3RhdHVzLFxuICBTYW5kYm94SW5mbyxcbiAgV29ya3NwYWNlU2FuZGJveCxcbn0gZnJvbSBcIkBtYXN0cmEvY29yZS93b3Jrc3BhY2VcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBNb250eVNhbmRib3gsIHR5cGUgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL21vbnR5LXNhbmRib3gudHNcIjtcblxuY29uc3QgU0FOREJPWF9BUElfUEFUSCA9IFwiL2FwaS8yLjAvc2FuZGJveGVzXCI7XG5jb25zdCBTQU5EQk9YX0VYRUNfQVBJX1BBVEggPSBcIi9hcGkvMi4wL3NhbmRib3gtZXhlYy9zYW5kYm94ZXNcIjtcbmNvbnN0IERFRkFVTFRfSU5BQ1RJVklUWV9USU1FT1VUID0gXCI5MDBzXCI7XG5jb25zdCBERUZBVUxUX1NUQVJUVVBfVElNRU9VVF9NUyA9IDEyMF8wMDA7XG5jb25zdCBERUZBVUxUX0NPTU1BTkRfVElNRU9VVF9NUyA9IDMwXzAwMDtcbmNvbnN0IFNBTkRCT1hfUE9MTF9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvc2FuZGJveFwiKTtcblxuY29uc3QgU2FuZGJveFN0YXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICBzdGF0ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG5cbmNvbnN0IFNhbmRib3hSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgZGlzcGxheV9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNyZWF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVwZGF0ZV90aW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXR1czogU2FuZGJveFN0YXRlU2NoZW1hLm9wdGlvbmFsKCksXG59KTtcblxuY29uc3QgRXhlY3V0ZVJlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBleGl0X2NvZGU6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcbiAgc3RhdHVzOiB6LnN0cmluZygpLFxuICBzdGRvdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RkZXJyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvbW1hbmRfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxufSk7XG5cbi8qKiBPcHRpb25zIGZvciBvbmUgRGF0YWJyaWNrcy1iYWNrZWQgTWFzdHJhIHNhbmRib3guICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NTYW5kYm94T3B0aW9ucyB7XG4gIC8qKiBBcHBLaXQgd29ya3NwYWNlIGNsaWVudCB1c2VkIGZvciBldmVyeSBzYW5kYm94IEFQSSBjYWxsLiAqL1xuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIFJlc291cmNlIGlkLCB3aXRoIG9yIHdpdGhvdXQgdGhlIGBzYW5kYm94ZXMvYCBwcmVmaXguICovXG4gIHNhbmRib3hJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgRGF0YWJyaWNrcyBsYWJlbC4gKi9cbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBTZXJ2ZXItc2lkZSBpZGxlIHRpbWVvdXQgaW4gcHJvdG9idWYgZHVyYXRpb24gZm9ybS4gRGVmYXVsdHMgdG8gYDkwMHNgLiAqL1xuICBpbmFjdGl2aXR5VGltZW91dD86IHN0cmluZztcbiAgLyoqIE1heGltdW0gdGltZSB0byB3YWl0IGZvciB0aGUgc2FuZGJveCB0byBiZWNvbWUgcnVubmFibGUuICovXG4gIHN0YXJ0dXBUaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IGNvbW1hbmQgdGltZW91dC4gUGVyLWNhbGwgYG9wdGlvbnMudGltZW91dGAgd2lucy4gKi9cbiAgY29tbWFuZFRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByb3ZpZGVyIHVzZWQgb25seSB3aGVuIERhdGFicmlja3MgU2FuZGJveCBpcyBkZWZpbml0aXZlbHkgdW5hdmFpbGFibGUuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBOb2RlIFB5ZGFudGljIE1vbnR5IHJ1bnRpbWU7IGBmYWxzZWAgZmFpbHMgaW5zdGVhZC5cbiAgICovXG4gIGZhbGxiYWNrPzogZmFsc2UgfCBcIm1vbnR5XCIgfCBNb250eVNhbmRib3hPcHRpb25zIHwgV29ya3NwYWNlU2FuZGJveDtcbn1cblxuLyoqIERhdGFicmlja3Mgb3B0aW9ucyBhY2NlcHRlZCBieSB0aGUgaGlnaGVyLWxldmVsIHdvcmtzcGFjZSBmYWN0b3J5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzV29ya3NwYWNlU2FuZGJveE9wdGlvbnMgZXh0ZW5kcyBPbWl0PFxuICBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsXG4gIFwiY2xpZW50XCIgfCBcInNhbmRib3hJZFwiXG4+IHtcbiAgLyoqIFByb3ZpZGVyIGRpc2NyaW1pbmF0b3IuIERlZmF1bHRzIHRvIGBkYXRhYnJpY2tzYC4gKi9cbiAgcHJvdmlkZXI/OiBcImRhdGFicmlja3NcIjtcbiAgLyoqXG4gICAqIENyZWRlbnRpYWwgc291cmNlLiBEZWZhdWx0cyB0byBhIGZyZXNoIEFwcEtpdCBjbGllbnQgdXNpbmcgdGhlIG5vcm1hbFxuICAgKiBlbnZpcm9ubWVudC9wcm9maWxlIGNoYWluLCB3aGljaCBpcyB0aGUgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGluIGFcbiAgICogRGF0YWJyaWNrcyBBcHAuXG4gICAqL1xuICBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQgfCAoKGNvbnRleHQ6IHsgcmVxdWVzdENvbnRleHQ6IFJlcXVlc3RDb250ZXh0IH0pID0+IFdvcmtzcGFjZUNsaWVudCk7XG4gIC8qKlxuICAgKiBGaXhlZCBpZCBvciBwZXItcmVxdWVzdCByZXNvbHZlci4gT21pdCB0byBkZXJpdmUgYSBzdGFibGUsIG9wYXF1ZSBpZCBmcm9tXG4gICAqIHRoZSB3b3Jrc3BhY2UgYW5kIGF0dHJpYnV0ZWQgdXNlci5cbiAgICovXG4gIHNhbmRib3hJZD86IHN0cmluZyB8ICgoY29udGV4dDogeyByZXF1ZXN0Q29udGV4dDogUmVxdWVzdENvbnRleHQgfSkgPT4gc3RyaW5nKTtcbn1cblxuLyoqIE1hc3RyYSBzYW5kYm94IGJhY2tlZCBieSBEYXRhYnJpY2tzIHNlcnZlcmxlc3MgU2FuZGJveCBjb21wdXRlLiAqL1xuZXhwb3J0IGNsYXNzIERhdGFicmlja3NTYW5kYm94IGltcGxlbWVudHMgV29ya3NwYWNlU2FuZGJveCB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgc3RhdHVzOiBQcm92aWRlclN0YXR1cyA9IFwicGVuZGluZ1wiO1xuICBlcnJvcj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5hY3Rpdml0eVRpbWVvdXQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydHVwVGltZW91dE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29uZmlnOiBFeGNsdWRlPERhdGFicmlja3NTYW5kYm94T3B0aW9uc1tcImZhbGxiYWNrXCJdLCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgcmVtb3RlQ3JlYXRlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBsYXN0VXNlZEF0PzogRGF0ZTtcbiAgcHJpdmF0ZSBhY3RpdmVGYWxsYmFjaz86IFdvcmtzcGFjZVNhbmRib3g7XG4gIHByaXZhdGUgZmFsbGJhY2tQcm9taXNlPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBzdGFydFByb21pc2U/OiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERhdGFicmlja3NTYW5kYm94T3B0aW9ucykge1xuICAgIGNvbnN0IGlkID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChvcHRpb25zLnNhbmRib3hJZC5yZXBsYWNlKC9ec2FuZGJveGVzXFwvLywgXCJcIikpO1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJEYXRhYnJpY2tzIHNhbmRib3ggaWQgbXVzdCBub3QgYmUgYmxhbmtcIik7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU/LnRyaW0oKSB8fCBgTWFzdHJhIHNhbmRib3ggJHtpZH1gO1xuICAgIHRoaXMuY2xpZW50ID0gb3B0aW9ucy5jbGllbnQ7XG4gICAgdGhpcy5kaXNwbGF5TmFtZSA9IHRoaXMubmFtZTtcbiAgICB0aGlzLmluYWN0aXZpdHlUaW1lb3V0ID0gb3B0aW9ucy5pbmFjdGl2aXR5VGltZW91dCA/PyBERUZBVUxUX0lOQUNUSVZJVFlfVElNRU9VVDtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lb3V0TXMgPSBvcHRpb25zLnN0YXJ0dXBUaW1lb3V0TXMgPz8gREVGQVVMVF9TVEFSVFVQX1RJTUVPVVRfTVM7XG4gICAgdGhpcy5jb21tYW5kVGltZW91dE1zID0gb3B0aW9ucy5jb21tYW5kVGltZW91dE1zID8/IERFRkFVTFRfQ09NTUFORF9USU1FT1VUX01TO1xuICAgIHRoaXMuZmFsbGJhY2tDb25maWcgPSBvcHRpb25zLmZhbGxiYWNrID8/IFwibW9udHlcIjtcbiAgfVxuXG4gIGdldCBwcm92aWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5wcm92aWRlciA/PyBcImRhdGFicmlja3NcIjtcbiAgfVxuXG4gIC8qKiBFbnN1cmUgdGhlIHJlbW90ZSBzYW5kYm94IGV4aXN0cyBhbmQgaGFzIHJlYWNoZWQgaXRzIHJ1bm5pbmcgc3RhdGUuICovXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RhcnRXaXRoU2lnbmFsKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0V2l0aFNpZ25hbChzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCIpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGFydFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZXJmb3JtU3RhcnQoc2lnbmFsKTtcbiAgICB0aGlzLnN0YXJ0UHJvbWlzZSA9IHBlbmRpbmc7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBlbmRpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLnN0YXJ0UHJvbWlzZSA9PT0gcGVuZGluZykgdGhpcy5zdGFydFByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtU3RhcnQoc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5zdGFydD8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1cyA9IFwic3RhcnRpbmdcIjtcbiAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2FuZGJveCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGUoc2lnbmFsKTtcbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIpIHtcbiAgICAgICAgc2FuZGJveCA9IGF3YWl0IHRoaXMubXV0YXRlKFwic3RhcnRcIiwgc2lnbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9TVE9QUElOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9TVE9QUEVEXCIsIHNpZ25hbCk7XG4gICAgICAgIHNhbmRib3ggPSBhd2FpdCB0aGlzLm11dGF0ZShcInN0YXJ0XCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuZGJveC5zdGF0dXM/LnN0YXRlICE9PSBcIlNBTkRCT1hfU1RBVEVfUlVOTklOR1wiKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN0YXRlKFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwicnVubmluZ1wiO1xuICAgICAgdGhpcy5sYXN0VXNlZEF0ID0gbmV3IERhdGUoKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnICE9PSBmYWxzZSAmJiBpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlRmFsbGJhY2soY2F1Z2h0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0dXMgPSBcImVycm9yXCI7XG4gICAgICB0aGlzLmVycm9yID0gZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KTtcbiAgICAgIHRocm93IGNhdWdodDtcbiAgICB9XG4gIH1cblxuICAvKiogRGF0YWJyaWNrcyBob21lIHBlcnNpc3RlbmNlIGlzIG5vdCBhIGNsb25lYWJsZSBNYXN0cmEgY2hlY2twb2ludC4gKi9cbiAgYXN5bmMgc25hcHNob3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjaz8uc25hcHNob3QoKTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0NoZWNrcG9pbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrPy5zdXBwb3J0c0NoZWNrcG9pbnRzID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqIFN0b3AgY29tcHV0ZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5LiAqL1xuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICBhd2FpdCB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0b3A/LigpO1xuICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLmFjdGl2ZUZhbGxiYWNrLnN0YXR1cztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInN0b3BwZWRcIiB8fCB0aGlzLnN0YXR1cyA9PT0gXCJkZXN0cm95ZWRcIikgcmV0dXJuO1xuICAgIHRoaXMuc3RhdHVzID0gXCJzdG9wcGluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm11dGF0ZShcInN0b3BcIik7XG4gICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwic3RvcHBlZFwiO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXR1cyA9IFwiZXJyb3JcIjtcbiAgICAgIHRoaXMuZXJyb3IgPSBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShjYXVnaHQpO1xuICAgICAgdGhyb3cgY2F1Z2h0O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQZXJtYW5lbnRseSBkZWxldGUgdGhlIHNhbmRib3ggYW5kIGl0cyBwZXJzaXN0ZWQgaG9tZSBkaXJlY3RvcnkuICovXG4gIGFzeW5jIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZlRmFsbGJhY2suZGVzdHJveT8uKCk7XG4gICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFwiZGVzdHJveWVkXCIpIHJldHVybjtcbiAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWluZ1wiO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9YCwgXCJERUxFVEVcIiwgei5vYmplY3Qoe30pLnBhc3N0aHJvdWdoKCkpO1xuICAgICAgdGhpcy5zdGF0dXMgPSBcImRlc3Ryb3llZFwiO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKGlzU3RhdHVzKGNhdWdodCwgNDA0KSkge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IFwiZGVzdHJveWVkXCI7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdHVzID0gXCJlcnJvclwiO1xuICAgICAgdGhpcy5lcnJvciA9IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGNhdWdodCk7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIEV4ZWN1dGUgb25lIGZvcmVncm91bmQgc2hlbGwgY29tbWFuZCBpbiB0aGUgcmVtb3RlIHNhbmRib3guICovXG4gIGFzeW5jIGV4ZWN1dGVDb21tYW5kKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICAgIG9wdGlvbnM6IEV4ZWN1dGVDb21tYW5kT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0V2l0aFNpZ25hbChvcHRpb25zLmFib3J0U2lnbmFsKTtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUZhbGxiYWNrKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuY29tbWFuZFRpbWVvdXRNcztcbiAgICBjb25zdCBzY3JpcHQgPSBjb21tYW5kU2NyaXB0KGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMuY3dkKTtcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgbGV0IHJlc3BvbnNlOiB6LmluZmVyPHR5cGVvZiBFeGVjdXRlUmVzcG9uc2VTY2hlbWE+O1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdChcbiAgICAgICAgYCR7U0FOREJPWF9FWEVDX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX0vZXhlYy1zeW5jYCxcbiAgICAgICAgXCJQT1NUXCIsXG4gICAgICAgIEV4ZWN1dGVSZXNwb25zZVNjaGVtYSxcbiAgICAgICAge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGNtZDogXCIvYmluL2Jhc2hcIixcbiAgICAgICAgICAgIGFyZ3M6IFtcIi1sY1wiLCBzY3JpcHRdLFxuICAgICAgICAgICAgZW52czogZGVmaW5lZEVudmlyb25tZW50KG9wdGlvbnMuZW52KSxcbiAgICAgICAgICAgIGV4ZWN1dGlvbl90aW1lb3V0OiBgJHtNYXRoLm1heCgxLCBNYXRoLmNlaWwodGltZW91dCAvIDFfMDAwKSl9c2AsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYWw6IG9wdGlvbnMuYWJvcnRTaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGNhdWdodCkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tDb25maWcgPT09IGZhbHNlIHx8ICFpc0RhdGFicmlja3NTYW5kYm94VW5hdmFpbGFibGUoY2F1Z2h0KSkgdGhyb3cgY2F1Z2h0O1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUZhbGxiYWNrKGNhdWdodCk7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlRmFsbGJhY2soY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IHN0ZG91dCA9IHJlc3BvbnNlLnN0ZG91dCA/PyBcIlwiO1xuICAgIGNvbnN0IHN0ZGVyciA9IHJlc3BvbnNlLnN0ZGVyciA/PyBcIlwiO1xuICAgIG9wdGlvbnMub25TdGRvdXQ/LihzdGRvdXQpO1xuICAgIG9wdGlvbnMub25TdGRlcnI/LihzdGRlcnIpO1xuICAgIHRoaXMubGFzdFVzZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdGltZWRPdXQgPSByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19USU1FRF9PVVRcIjtcbiAgICBjb25zdCBleGl0Q29kZSA9IHJlc3BvbnNlLmV4aXRfY29kZSA/PyAtMTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdGF0dXMgPT09IFwiRVhFQ1VURV9DT01NQU5EX1NUQVRVU19DT01QTEVURURcIiAmJiBleGl0Q29kZSA9PT0gMCxcbiAgICAgIGV4aXRDb2RlLFxuICAgICAgc3Rkb3V0LFxuICAgICAgc3RkZXJyLFxuICAgICAgZXhlY3V0aW9uVGltZU1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWQsXG4gICAgICAuLi4odGltZWRPdXQgPyB7IHRpbWVkT3V0OiB0cnVlLCBraWxsZWQ6IHRydWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXNwb25zZS50cnVuY2F0ZWRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdGRvdXRUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgICBzdGRlcnJUcnVuY2F0ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFjdGl2YXRlIHRoZSBjb25maWd1cmVkIGZhbGxiYWNrIG9uY2UgYWNyb3NzIGNvbmN1cnJlbnQgY29tbWFuZCBmYWlsdXJlcy4gKi9cbiAgcHJpdmF0ZSBhc3luYyBhY3RpdmF0ZUZhbGxiYWNrKGNhdWdodDogdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrUHJvbWlzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMuc3RhcnRGYWxsYmFjayhjYXVnaHQpO1xuICAgIHRoaXMuZmFsbGJhY2tQcm9taXNlID0gcGVuZGluZztcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcGVuZGluZztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuZmFsbGJhY2tQcm9taXNlID09PSBwZW5kaW5nKSB0aGlzLmZhbGxiYWNrUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQgYW5kIHB1Ymxpc2ggdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgYWZ0ZXIgcmVjaGVja2luZyBhY3RpdmUgc3RhdGUuICovXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRGYWxsYmFjayhjYXVnaHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5hY3RpdmVGYWxsYmFjaykgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZhbGxiYWNrQ29uZmlnID09PSBmYWxzZSkgdGhyb3cgY2F1Z2h0O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gcmVzb2x2ZUZhbGxiYWNrKHRoaXMuZmFsbGJhY2tDb25maWcpO1xuICAgIGxvZ2dlci53YXJuKFwiRGF0YWJyaWNrcyBTYW5kYm94IHVuYXZhaWxhYmxlOyB1c2luZyBmYWxsYmFja1wiLCB7XG4gICAgICBzYW5kYm94SWQ6IHRoaXMuaWQsXG4gICAgICBmYWxsYmFjazogZmFsbGJhY2sucHJvdmlkZXIsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoY2F1Z2h0KSxcbiAgICB9KTtcbiAgICBhd2FpdCBmYWxsYmFjay5zdGFydD8uKCk7XG4gICAgdGhpcy5hY3RpdmVGYWxsYmFjayA9IGZhbGxiYWNrO1xuICAgIHRoaXMuc3RhdHVzID0gZmFsbGJhY2suc3RhdHVzO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxsYmFjay5lcnJvcjtcbiAgfVxuXG4gIC8qKiBFeGVjdXRlIHRocm91Z2ggdGhlIGFjdGl2ZSBmYWxsYmFjayBvciByZXR1cm4gYW4gdW5zdXBwb3J0ZWQgcmVzdWx0LiAqL1xuICBwcml2YXRlIGV4ZWN1dGVGYWxsYmFjayhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgYXJnczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogRXhlY3V0ZUNvbW1hbmRPcHRpb25zLFxuICApOiBQcm9taXNlPENvbW1hbmRSZXN1bHQ+IHtcbiAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMuYWN0aXZlRmFsbGJhY2s7XG4gICAgaWYgKCFmYWxsYmFjaykgdGhyb3cgbmV3IEVycm9yKFwiRmFsbGJhY2sgc2FuZGJveCBpcyBub3QgYWN0aXZlXCIpO1xuICAgIGlmIChmYWxsYmFjay5leGVjdXRlQ29tbWFuZCkgcmV0dXJuIGZhbGxiYWNrLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQsIGFyZ3MsIG9wdGlvbnMpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3MsXG4gICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgIGV4aXRDb2RlOiAxLFxuICAgICAgc3Rkb3V0OiBcIlwiLFxuICAgICAgc3RkZXJyOiBgRmFsbGJhY2sgc2FuZGJveCAke2ZhbGxiYWNrLnByb3ZpZGVyfSBkb2VzIG5vdCBzdXBwb3J0IGNvbW1hbmQgZXhlY3V0aW9uLmAsXG4gICAgICBleGVjdXRpb25UaW1lTXM6IDAsXG4gICAgfSk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYWRhcHRlciBjdXJyZW50bHkga25vd3MgdGhlIHJlbW90ZSBzYW5kYm94IHRvIGJlIHJ1bm5pbmcuICovXG4gIGFzeW5jIGlzUmVhZHkoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuYWN0aXZlRmFsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlzUmVhZHk/LigpID8/IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzID09PSBcInJ1bm5pbmdcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdHVzID09PSBcInJ1bm5pbmdcIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgICAgdGhpcy5zdGF0dXMgPVxuICAgICAgICBzYW5kYm94LnN0YXR1cz8uc3RhdGUgPT09IFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCIgPyBcInJ1bm5pbmdcIiA6IHJlbW90ZVN0YXR1cyhzYW5kYm94KTtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gXCJydW5uaW5nXCI7XG4gICAgfSBjYXRjaCAoY2F1Z2h0KSB7XG4gICAgICBpZiAoaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSByZXR1cm4gZmFsc2U7XG4gICAgICB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcG9ydCBNYXN0cmEtZmFjaW5nIHNhbmRib3ggbWV0YWRhdGEuICovXG4gIGFzeW5jIGdldEluZm8oKTogUHJvbWlzZTxTYW5kYm94SW5mbz4ge1xuICAgIGlmICh0aGlzLmFjdGl2ZUZhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgdGhpcy5hY3RpdmVGYWxsYmFjay5nZXRJbmZvPy4oKSkgPz8ge1xuICAgICAgICAgIGlkOiB0aGlzLmFjdGl2ZUZhbGxiYWNrLmlkLFxuICAgICAgICAgIG5hbWU6IHRoaXMuYWN0aXZlRmFsbGJhY2submFtZSxcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5hY3RpdmVGYWxsYmFjay5wcm92aWRlcixcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuYWN0aXZlRmFsbGJhY2suc3RhdHVzLFxuICAgICAgICAgIGNyZWF0ZWRBdDogdGhpcy5jcmVhdGVkQXQsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldCgpO1xuICAgIHRoaXMuc3RhdHVzID0gcmVtb3RlU3RhdHVzKHNhbmRib3gpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHNhbmRib3guZGlzcGxheV9uYW1lID8/IHRoaXMubmFtZSxcbiAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIGNyZWF0ZWRBdDogdGhpcy5yZW1vdGVDcmVhdGVkQXQgPz8gdGhpcy5jcmVhdGVkQXQsXG4gICAgICAuLi4odGhpcy5sYXN0VXNlZEF0ID8geyBsYXN0VXNlZEF0OiB0aGlzLmxhc3RVc2VkQXQgfSA6IHt9KSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHJlc291cmNlTmFtZTogc2FuZGJveC5uYW1lLFxuICAgICAgICByZW1vdGVTdGF0ZTogc2FuZGJveC5zdGF0dXM/LnN0YXRlLFxuICAgICAgICB1cGRhdGVUaW1lOiBzYW5kYm94LnVwZGF0ZV90aW1lLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEV4cGxhaW4gdGhlIERhdGFicmlja3MgZXhlY3V0aW9uIGJvdW5kYXJ5IHRvIHRoZSBhZ2VudC4gKi9cbiAgZ2V0SW5zdHJ1Y3Rpb25zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFwiQ29tbWFuZHMgcnVuIGluIGEgcGVyc2lzdGVudCBEYXRhYnJpY2tzIHNlcnZlcmxlc3Mgc2FuZGJveCwgbm90IGluIHRoZSBBcHAgY29udGFpbmVyLlwiLFxuICAgICAgXCJVc2Ugc2hlbGwgY29tbWFuZHMgbm9ybWFsbHkuIFRoZSBzYW5kYm94IGhvbWUgZGlyZWN0b3J5IHN1cnZpdmVzIGluYWN0aXZpdHkgc3RvcHMuXCIsXG4gICAgICBcIklmIERhdGFicmlja3MgU2FuZGJveCBpcyB1bmF2YWlsYWJsZSwgY29tbWFuZHMgZmFsbCBiYWNrIHRvIFB5ZGFudGljIE1vbnR5IGFuZCBtdXN0IGJlIFB5dGhvbiBzb3VyY2UuXCIsXG4gICAgICBcIkRhdGFicmlja3MgV29ya3NwYWNlIGZpbGVzeXN0ZW0gbW91bnRzIHJlbWFpbiBzZXBhcmF0ZSB1bmxlc3MgYSBjb21tYW5kIGNvcGllcyBkYXRhIGV4cGxpY2l0bHkuXCIsXG4gICAgXS5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHJlc291cmNlUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtTQU5EQk9YX0FQSV9QQVRIfS8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmlkKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPckNyZWF0ZShzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDQpKSB0aHJvdyBjYXVnaHQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW5kYm94ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KFNBTkRCT1hfQVBJX1BBVEgsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgICAgcXVlcnk6IHsgc2FuZGJveF9pZDogdGhpcy5pZCB9LFxuICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgZGlzcGxheV9uYW1lOiB0aGlzLmRpc3BsYXlOYW1lLFxuICAgICAgICAgIHNwZWM6IHtcbiAgICAgICAgICAgIGNvbXB1dGU6IHtcbiAgICAgICAgICAgICAgaW5hY3Rpdml0eV90aW1lb3V0OiB0aGlzLmluYWN0aXZpdHlUaW1lb3V0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzaWduYWwsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgICByZXR1cm4gc2FuZGJveDtcbiAgICB9IGNhdGNoIChjYXVnaHQpIHtcbiAgICAgIGlmICghaXNTdGF0dXMoY2F1Z2h0LCA0MDkpKSB0aHJvdyBjYXVnaHQ7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoc2lnbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldChzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLnJlcXVlc3QodGhpcy5yZXNvdXJjZVBhdGgsIFwiR0VUXCIsIFNhbmRib3hSZXNwb25zZVNjaGVtYSwge1xuICAgICAgc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMucmVtZW1iZXJDcmVhdGVkQXQoc2FuZGJveC5jcmVhdGVfdGltZSk7XG4gICAgcmV0dXJuIHNhbmRib3g7XG4gIH1cblxuICBwcml2YXRlIG11dGF0ZShvcGVyYXRpb246IFwic3RhcnRcIiB8IFwic3RvcFwiLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYCR7dGhpcy5yZXNvdXJjZVBhdGh9LyR7b3BlcmF0aW9ufWAsIFwiUE9TVFwiLCBTYW5kYm94UmVzcG9uc2VTY2hlbWEsIHtcbiAgICAgIHNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvclN0YXRlKGV4cGVjdGVkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgdGhpcy5zdGFydHVwVGltZW91dE1zO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICAgIGNvbnN0IHNhbmRib3ggPSBhd2FpdCB0aGlzLmdldChzaWduYWwpO1xuICAgICAgaWYgKHNhbmRib3guc3RhdHVzPy5zdGF0ZSA9PT0gZXhwZWN0ZWQpIHJldHVybiBzYW5kYm94O1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChTQU5EQk9YX1BPTExfSU5URVJWQUxfTVMsIHNpZ25hbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEYXRhYnJpY2tzIHNhbmRib3ggJHt0aGlzLmlkfSBkaWQgbm90IHJlYWNoICR7ZXhwZWN0ZWR9IHdpdGhpbiAke3RoaXMuc3RhcnR1cFRpbWVvdXRNc31tc2AsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtZW1iZXJDcmVhdGVkQXQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHRoaXMucmVtb3RlQ3JlYXRlZEF0ID0gcGFyc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiREVMRVRFXCIsXG4gICAgc2NoZW1hOiB6LlpvZFR5cGU8VD4sXG4gICAgb3B0aW9uczoge1xuICAgICAgcGF5bG9hZD86IHVua25vd247XG4gICAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICB9ID0ge30sXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgIC4uLihvcHRpb25zLnBheWxvYWQgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBwYXlsb2FkOiBvcHRpb25zLnBheWxvYWQgfSksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucy5zaWduYWwgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChvcHRpb25zLnNpZ25hbCkgOiB1bmRlZmluZWQsXG4gICAgKTtcbiAgICByZXR1cm4gc2NoZW1hLnBhcnNlKHJlc3BvbnNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21tYW5kU2NyaXB0KGNvbW1hbmQ6IHN0cmluZywgYXJnczogcmVhZG9ubHkgc3RyaW5nW10sIGN3ZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgaW52b2NhdGlvbiA9IGFyZ3MubGVuZ3RoID8gW2NvbW1hbmQsIC4uLmFyZ3NdLm1hcChzaGVsbFF1b3RlKS5qb2luKFwiIFwiKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBjd2QgPyBgY2QgLS0gJHtzaGVsbFF1b3RlKGN3ZCl9ICYmICR7aW52b2NhdGlvbn1gIDogaW52b2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFxcJydcIil9J2A7XG59XG5cbmZ1bmN0aW9uIGRlZmluZWRFbnZpcm9ubWVudChpbnB1dDogTm9kZUpTLlByb2Nlc3NFbnYgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dCA/PyB7fSkuZmlsdGVyKFxuICAgICAgKGVudHJ5KTogZW50cnkgaXMgW3N0cmluZywgc3RyaW5nXSA9PiBlbnRyeVsxXSAhPT0gdW5kZWZpbmVkLFxuICAgICksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdHVzKGNhdWdodDogdW5rbm93biwgc3RhdHVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KGNhdWdodCkuc3RhdHVzQ29kZSA9PT0gc3RhdHVzO1xufVxuXG5mdW5jdGlvbiByZW1vdGVTdGF0dXMoc2FuZGJveDogei5pbmZlcjx0eXBlb2YgU2FuZGJveFJlc3BvbnNlU2NoZW1hPik6IFByb3ZpZGVyU3RhdHVzIHtcbiAgc3dpdGNoIChzYW5kYm94LnN0YXR1cz8uc3RhdGUpIHtcbiAgICBjYXNlIFwiU0FOREJPWF9TVEFURV9SVU5OSU5HXCI6XG4gICAgICByZXR1cm4gXCJydW5uaW5nXCI7XG4gICAgY2FzZSBcIlNBTkRCT1hfU1RBVEVfU1RPUFBFRFwiOlxuICAgICAgcmV0dXJuIFwic3RvcHBlZFwiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1NUT1BQSU5HXCI6XG4gICAgICByZXR1cm4gXCJzdG9wcGluZ1wiO1xuICAgIGNhc2UgXCJTQU5EQk9YX1NUQVRFX1BFTkRJTkdcIjpcbiAgICAgIHJldHVybiBcInN0YXJ0aW5nXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcInBlbmRpbmdcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRmFsbGJhY2soXG4gIGNvbmZpZ3VyZWQ6IEV4Y2x1ZGU8RGF0YWJyaWNrc1NhbmRib3hPcHRpb25zW1wiZmFsbGJhY2tcIl0sIGZhbHNlIHwgdW5kZWZpbmVkPixcbik6IFdvcmtzcGFjZVNhbmRib3gge1xuICBpZiAodHlwZW9mIGNvbmZpZ3VyZWQgPT09IFwib2JqZWN0XCIgJiYgXCJwcm92aWRlclwiIGluIGNvbmZpZ3VyZWQgJiYgXCJzdGF0dXNcIiBpbiBjb25maWd1cmVkKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBNb250eVNhbmRib3goY29uZmlndXJlZCA9PT0gXCJtb250eVwiID8ge30gOiBjb25maWd1cmVkKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhYnJpY2tzU2FuZGJveFVuYXZhaWxhYmxlKGNhdWdodDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQoY2F1Z2h0KTtcbiAgcmV0dXJuIChcbiAgICBjb250ZXh0LnN0YXR1c0NvZGUgPT09IDQwNCB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInJlcXVlc3RlZFwiLCBcImFwaVwiLCBcIm5vdFwiLCBcImF2YWlsYWJsZVwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcImZlYXR1cmVcIiwgXCJkaXNhYmxlZFwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInNhbmRib3hcIiwgXCJub3RcIiwgXCJlbmFibGVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicHJldmlld1wiLCBcIm5vdFwiLCBcImVuYWJsZWRcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwidW5hdmFpbGFibGVcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwiZGlzYWJsZWRcIilcbiAgKTtcbn1cbiJdfQ==
@@ -1,70 +1,94 @@
1
1
  /**
2
- * AppKit-backed caching for Databricks workspace skill mounts.
2
+ * User-scoped workspace skill catalogues cached as one semantic record.
3
3
  *
4
4
  * @module
5
5
  */
6
- import type { CopyOptions, FileContent, FileEntry, FileStat, FileSystem, ListOptions, MakeDirectoryOptions, ReadFileOptions, RemoveOptions, WriteFileOptions } from "@dbx-tools/shared-fs";
7
- import { type MastraFileSystemAdapter } from "./filesystems.ts";
8
- /** Default remote skill metadata and content cache lifetime. */
9
- export declare const DEFAULT_WORKSPACE_SKILL_CACHE_TTL_MS: number;
10
- /** Options for one AppKit-cached workspace skill filesystem. */
11
- export interface AppKitCachedFileSystemOptions {
6
+ import type { RequestContext } from "@mastra/core/request-context";
7
+ import { z } from "zod";
8
+ declare const SkillCatalogueEntrySchema: z.ZodObject<{
9
+ name: z.ZodString;
10
+ description: z.ZodString;
11
+ instructions: z.ZodString;
12
+ sourceId: z.ZodString;
13
+ sourcePath: z.ZodString;
14
+ signature: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strip>;
16
+ declare const SkillCatalogueSchema: z.ZodObject<{
17
+ version: z.ZodLiteral<1>;
18
+ generatedAt: z.ZodString;
19
+ roots: z.ZodArray<z.ZodString>;
20
+ skills: z.ZodArray<z.ZodObject<{
21
+ name: z.ZodString;
22
+ description: z.ZodString;
23
+ instructions: z.ZodString;
24
+ sourceId: z.ZodString;
25
+ sourcePath: z.ZodString;
26
+ signature: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>>;
28
+ }, z.core.$strip>;
29
+ /** Parsed skill retained in a materialized workspace catalogue. */
30
+ export type SkillCatalogueEntry = z.infer<typeof SkillCatalogueEntrySchema>;
31
+ /** Versioned persisted skill catalogue. */
32
+ export type SkillCatalogue = z.infer<typeof SkillCatalogueSchema>;
33
+ /** One ordered filesystem root contributing skills to a catalogue. */
34
+ export interface SkillCatalogueSource {
35
+ /** Stable source identity including its mount precedence. */
36
+ id: string;
37
+ /** List one source-relative directory with provider metadata when available. */
38
+ list(path: string): Promise<SkillCatalogueFileEntry[]>;
39
+ /** Read one source-relative file fresh from its owning filesystem. */
40
+ read(path: string): Promise<string>;
41
+ }
42
+ /** Minimal directory metadata used to compare one catalogue refresh. */
43
+ export interface SkillCatalogueFileEntry {
44
+ metadata?: Readonly<Record<string, unknown>>;
45
+ name: string;
46
+ size?: number;
47
+ type: "directory" | "file";
48
+ }
49
+ /** Options for one user-scoped workspace skill catalogue. */
50
+ export interface WorkspaceSkillCatalogueOptions {
12
51
  host: string;
13
- source: FileSystem;
52
+ sources: readonly SkillCatalogueSource[];
14
53
  ttlMs?: number;
15
54
  userKey: string;
16
55
  }
17
- /** Stable Mastra mount plus the identity key used for source reuse. */
18
- export interface CachedWorkspaceSkillMount {
19
- cacheKey: string;
20
- filesystem: MastraFileSystemAdapter;
56
+ /** Request state used to resolve one user-scoped catalogue owner. */
57
+ export interface SkillCatalogueResolveContext {
58
+ abortSignal?: AbortSignal;
59
+ requestContext?: RequestContext;
21
60
  }
22
- /**
23
- * Cache read-only filesystem operations through AppKit while delegating
24
- * mutations to the current request's source.
25
- */
26
- export declare class AppKitCachedFileSystem implements FileSystem<"appkit-cache"> {
27
- readonly backend: "appkit-cache";
28
- readonly id: string;
29
- readonly readOnly: boolean;
30
- readonly root: string;
31
- private source;
32
- private readonly host;
33
- private readonly ttlSec;
34
- private readonly userKey;
35
- constructor(options: AppKitCachedFileSystemOptions);
36
- /** Rebind cache misses and writes to the current request's OBO filesystem. */
37
- bind(source: FileSystem): void;
38
- init(): Promise<void>;
39
- /** Keep the shared scope alive when one request releases its workspace view. */
40
- close(): Promise<void>;
41
- resolvePath(inputPath: string): string;
42
- readFile(inputPath: string): Promise<Uint8Array>;
43
- readFile(inputPath: string, options: ReadFileOptions & {
44
- encoding: string;
45
- }): Promise<string>;
46
- writeFile(inputPath: string, content: FileContent, options?: WriteFileOptions): Promise<void>;
47
- appendFile(inputPath: string, content: FileContent): Promise<void>;
48
- deleteFile(inputPath: string, options?: RemoveOptions): Promise<void>;
49
- copyFile(sourcePath: string, destinationPath: string, options?: CopyOptions): Promise<void>;
50
- moveFile(sourcePath: string, destinationPath: string, options?: CopyOptions): Promise<void>;
51
- mkdir(inputPath: string, options?: MakeDirectoryOptions): Promise<void>;
52
- rmdir(inputPath: string, options?: RemoveOptions): Promise<void>;
53
- readdir(inputPath: string, options?: ListOptions): Promise<FileEntry[]>;
54
- exists(inputPath: string): Promise<boolean>;
55
- stat(inputPath: string): Promise<FileStat>;
56
- /** Rotate this scope's cache generation so the next read reloads it. */
61
+ /** Resolve one request's complete skill catalogue. */
62
+ export type SkillCatalogueResolver = (context: SkillCatalogueResolveContext) => Promise<WorkspaceSkillCatalogue>;
63
+ /** Default lifetime for one complete workspace skill catalogue. */
64
+ export declare const DEFAULT_WORKSPACE_SKILL_CACHE_TTL_MS: number;
65
+ /** Materialized catalogue with one AppKit cache record and fresh auxiliary reads. */
66
+ export declare class WorkspaceSkillCatalogue {
67
+ private readonly options;
68
+ readonly cacheKey: string;
69
+ readonly host: string;
70
+ readonly userKey: string;
71
+ private lastValid?;
72
+ private readonly ttlMs;
73
+ private sources;
74
+ constructor(options: WorkspaceSkillCatalogueOptions);
75
+ /** Rebind refreshes and lazy reads to the current request's filesystem clients. */
76
+ bind(sources: readonly SkillCatalogueSource[]): void;
77
+ /** Return the cached catalogue, refreshing all roots once on cache miss. */
78
+ get(signal?: AbortSignal): Promise<SkillCatalogue>;
79
+ /** Expire this complete catalogue without touching unrelated cache entries. */
57
80
  invalidate(): Promise<void>;
58
- private cached;
59
- private generation;
60
- private generationKey;
61
- private mutate;
81
+ /** Read one selected skill's auxiliary file directly from its current source. */
82
+ readSkillFile(skillName: string, inputPath: string, signal?: AbortSignal): Promise<string>;
83
+ private refresh;
84
+ private rootKey;
85
+ private persistentKey;
62
86
  }
63
- /** Return one stable Mastra mount per resolved user, host, and source root. */
64
- export declare function cachedWorkspaceSkillMount(options: AppKitCachedFileSystemOptions): CachedWorkspaceSkillMount;
65
- /** Invalidate one user's cached workspace skill scope. */
87
+ /** Return one stable catalogue owner for a user, host, and ordered root set. */
88
+ export declare function workspaceSkillCatalogue(options: WorkspaceSkillCatalogueOptions): WorkspaceSkillCatalogue;
89
+ /** Invalidate matching complete catalogues and retain their stable owners. */
66
90
  export declare function clearWorkspaceSkillCache(options: {
67
91
  host: string;
68
- root?: string;
69
- userKey: string;
92
+ userKey?: string;
70
93
  }): Promise<void>;
94
+ export {};