@sabstravtech/obtservices 0.2.2505201645 → 0.2.2506041247

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 (30) hide show
  1. package/base/lib/vendor/classes/carhire-enterprise-search.d.ts +1 -0
  2. package/base/lib/vendor/classes/management-info-and-valid.d.ts +2 -0
  3. package/base/lib/vendor/classes/user-favourite.enum.d.ts +1 -0
  4. package/base/lib/vendor/interfaces/Icarhire-enterprise-search.d.ts +1 -0
  5. package/base/lib/vendor/interfaces/Iflight-enterprise-search.d.ts +2 -0
  6. package/base/lib/vendor/interfaces/Ihotel-enterprise-search.d.ts +2 -1
  7. package/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.d.ts +7 -0
  8. package/base/lib/vendor/types/types.d.ts +5 -1
  9. package/base/sabstravtech-obtservices-base.metadata.json +1 -1
  10. package/bundles/sabstravtech-obtservices-base.umd.js +285 -190
  11. package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
  12. package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -3
  13. package/esm2015/base/lib/vendor/classes/carhire-enterprise-search.js +36 -9
  14. package/esm2015/base/lib/vendor/classes/eurostar-enterprise-search.js +58 -26
  15. package/esm2015/base/lib/vendor/classes/fast-track-enterprise-search.js +4 -3
  16. package/esm2015/base/lib/vendor/classes/helpers.js +5 -5
  17. package/esm2015/base/lib/vendor/classes/hotel-enterprise-search.js +22 -31
  18. package/esm2015/base/lib/vendor/classes/management-info-and-valid.js +17 -7
  19. package/esm2015/base/lib/vendor/classes/user-favourite.enum.js +2 -1
  20. package/esm2015/base/lib/vendor/interfaces/Icarhire-enterprise-search.js +1 -1
  21. package/esm2015/base/lib/vendor/interfaces/Iflight-enterprise-search.js +1 -1
  22. package/esm2015/base/lib/vendor/interfaces/Ihotel-enterprise-search.js +1 -1
  23. package/esm2015/base/lib/vendor/interfaces/hotel-stars-to-hide.interface.js +1 -1
  24. package/esm2015/base/lib/vendor/services/hotel-avallibility.service.js +5 -3
  25. package/esm2015/base/lib/vendor/services/logon.service.js +6 -3
  26. package/esm2015/base/lib/vendor/services/search.service.js +25 -14
  27. package/esm2015/base/lib/vendor/types/types.js +10 -2
  28. package/fesm2015/sabstravtech-obtservices-base.js +179 -93
  29. package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
  30. package/package.json +1 -1
@@ -200,14 +200,15 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
200
200
  return this.fasttrackFetcher.fetchList(query);
201
201
  }
202
202
  getSearchQuery() {
203
+ var _a, _b;
203
204
  const query = {
204
205
  adults: this.tempParams.adults,
205
206
  children: this.tempParams.children ? this.tempParams.children : null,
206
- locationCode: this._locationCode,
207
+ locationCode: this._locationCode || ((_a = this.originalUserSearch.locationCode) === null || _a === void 0 ? void 0 : _a.gateway),
207
208
  flight: this.tempParams.flightNumber,
208
209
  terminal: this.tempParams.terminal === 'Any' ? null : this.tempParams.terminal,
209
210
  arrivalDatetime: this.tempParams.arrivalDatetime,
210
- airportFullName: this.locationCode.destination,
211
+ airportFullName: this.locationCode.destination || ((_b = this.originalUserSearch.locationCode) === null || _b === void 0 ? void 0 : _b.destination),
211
212
  travellers: this.travellers.map(traveller => { return { id: traveller.id }; })
212
213
  };
213
214
  return this.helpers.removeNulls(query);
@@ -422,4 +423,4 @@ export class FastTrackEnterpriseSearch extends BaseEnterpriseSearch {
422
423
  }
423
424
  FastTrackEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_fasttrack';
424
425
  FastTrackEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_fasttrack';
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQW1CbkQsT0FBTyxFQVFMLFdBQVcsRUFDWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCw0QkFBNEIsRUFRN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxNQUFNLE9BQU8seUJBQ1gsU0FBUSxvQkFJUDtJQW1MRCxZQUNVLGdCQUFrRCxFQUMxRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUNsQyxhQUErQyxFQUMvQyxXQUFpQztRQUVqQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFQbkQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQztRQUVsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFsTGxELFNBQUksR0FBZ0IsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBS3BELGFBQVEsR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQXVCaEUsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFVNUIsVUFBSyxHQUFXLElBQUksQ0FBQztRQW1HckIsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBa0M3Qix1QkFBa0IsR0FB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SUFBSSxLQUFLLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQ2xELENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO2FBQ0k7WUFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQzs7QUEvZWUsZ0RBQXNCLEdBQUcsa0JBQWtCLENBQUM7QUFDNUMsaURBQXVCLEdBQUcsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXIsXG4gIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZmFzdC10cmFjay1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XG5pbXBvcnQgeyBGYXN0VHJhY2tGaWx0ZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mYXN0LXRyYWNrLWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIEZhc3RUcmFja1RlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaCc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYXZlbGxlciB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBBaXJwb3J0UmVzdWx0cyxcbiAgQmFza2V0SXRlbSxcbiAgQ3VycmVuY3lDb2RlLFxuICBGYXN0VHJhY2tRdW90ZSxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyxcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgRmFzdFRyYWNrUXVvdGVSZXN1bHQsXG4gIEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXksXG4gIE5nYkRhdGVTdHJ1Y3QsXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxuICBSZWNlbnRTZWFyY2gsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXG4gIFRlcm1pbmFsc1R5cGVcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZUVudGVycHJpc2VTZWFyY2ggfSBmcm9tICcuL2Jhc2UtZW50ZXJwcmlzZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgY2xhc3MgRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaDxGVFFfUSBleHRlbmRzIEZhc3RUcmFja1F1b3RlRmV0Y2hlclR5cGU+XG4gIGV4dGVuZHMgQmFzZUVudGVycHJpc2VTZWFyY2g8XG4gICAgRmFzdFRyYWNrVGVtcFBhcmFtcyxcbiAgICBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5LFxuICAgIEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXlcbiAgPlxuICBpbXBsZW1lbnRzIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2hJbnRlcmZhY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1BBUkFNUyA9ICdzZWFyY2hfZmFzdHRyYWNrJztcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTID0gJ3Jlc3VsdHNfZmFzdHRyYWNrJztcbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmFzdFRyYWNrO1xuICBwdWJsaWMgdGVybWluYWxzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXJtaW5hbHNUeXBlW10+KFtdKTtcblxuICBwcml2YXRlIF9sb2NhdGlvbkNvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXTtcblxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0ID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcbiAgcHVibGljIGdldCBtaW5EYXRlKCk6IE5nYkRhdGVTdHJ1Y3Qge1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgZ2V0IGFkdWx0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzO1xuICB9XG5cbiAgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW47XG4gIH1cblxuICBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGU6IE5nYkRhdGVTdHJ1Y3QgPSBudWxsO1xuICBnZXQgZGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgfVxuXG4gIHNldCBkYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7XG4gIH1cblxuICBwcml2YXRlIF90aW1lOiBzdHJpbmcgPSBudWxsO1xuICBnZXQgdGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90aW1lO1xuICB9XG5cbiAgc2V0IHRpbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xuICB9XG5cbiAgZ2V0IGFycml2YWxEYXRldGltZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZTtcbiAgfVxuXG4gIHNldCBhcnJpdmFsRGF0ZXRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICBpZiAodmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdmFsdWU7XG5cbiAgICAgIHRoaXMuX2RhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgICAgdGhpcy5fdGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGF0ZVRpbWUoKSB7XG4gICAgaWYgKHRoaXMuX2RhdGUgJiYgdGhpcy5fdGltZSkge1xuICAgICAgY29uc3QgdGltZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9kYXRlLCB0aGlzLl90aW1lKTtcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUgPSB0aW1lLmlzVmFsaWQoKSA/IHRpbWUgOiBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2NhdGlvbkNvZGUoKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25Db2RlO1xuICB9XG5cbiAgc2V0IGxvY2F0aW9uQ29kZSh2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubG9jYXRpb25Db2RlID0gdmFsdWU7XG4gICAgY29uc3QgdGVybWluYWxzVHlwZTogVGVybWluYWxzVHlwZVtdID0gdGhpcy50ZXJtaW5hbHM/LnZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSAnJztcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xuICAgICAgdGhpcy50ZXJtaW5hbHMubmV4dChbXSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSBudWxsO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gdmFsdWUuZ2F0ZXdheTtcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xuICAgICAgdGhpcy50ZXJtaW5hbHMubmV4dCh2YWx1ZS50ZXJtaW5hbHMpO1xuICAgICAgaWYgKHRlcm1pbmFsc1R5cGUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IHRlcm1pbmFsc1R5cGVbMF0ua2V5O1xuICAgICAgfVxuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2NhdGlvbkNvZGUgPSBudWxsO1xuICAgICAgdGhpcy50ZXJtaW5hbCA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSBudWxsO1xuICAgICAgdGhpcy50ZXJtaW5hbHMubmV4dChbXSk7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZsaWdodE51bWJlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmxpZ2h0TnVtYmVyO1xuICB9XG5cbiAgc2V0IGZsaWdodE51bWJlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZsaWdodE51bWJlciA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCB0ZXJtaW5hbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwgPyB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwudG9TdHJpbmcoKSA6IG51bGw7XG4gIH1cblxuICBzZXQgdGVybWluYWwoaW5wdXQ6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbCA9IGlucHV0O1xuICAgIGNvbnN0IGZvdW5kOiBUZXJtaW5hbHNUeXBlID0gdGhpcy50ZXJtaW5hbHMudmFsdWUuZmluZChcbiAgICAgICh0ZXJtaW5hbDogVGVybWluYWxzVHlwZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodGVybWluYWwudmFsdWUgPT09IGlucHV0KSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSBmb3VuZC5rZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRlcm1pbmFscy52YWx1ZSAmJiB0aGlzLnRlcm1pbmFscy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9IHRoaXMudGVybWluYWxzLnZhbHVlWzBdLmtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtaW5hbCA9ICdBbnkgVGVybWluYWwnO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RlZFRlcm1pbmFsOiBzdHJpbmcgPSAnJztcbiAgc2V0IHNlbGVjdGVkVGVybWluYWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlbGVjdGVkVGVybWluYWwgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRUZXJtaW5hbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRlcm1pbmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcblxuICAgIGlmICghdGhpcy5sb2NhdGlvbkNvZGUpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBhZGQgaW4gYW4gYWlycG9ydCBsb2NhdGlvbicpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZS5pc0FmdGVyKG1vbWVudCgpKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgIH1cblxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5tZXNzYWdlcy5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN1bHRzU2Vzc2lvbk5hbWUgPSBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuICBwcm90ZWN0ZWQgbXVsdGlSZXN1bHRzU2Vzc2lvbk5hbWUgPSBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9SRVNVTFRTO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmFzdHRyYWNrRmV0Y2hlcjogQmFzZUZhc3RUcmFja1F1b3RlRmV0Y2hlcjxGVFFfUT4sXG4gICAgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmFnZVNlcnZpY2UsIGhlbHBlcnMsIHNlYXJjaFNlcnZpY2UsIHVzZXJTZXJ2aWNlKTtcbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICB0ZW1wUGFyYW1zOiBGYXN0VHJhY2tUZW1wUGFyYW1zO1xuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBGYXN0VHJhY2tUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZhc3RUcmFja1RlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEZhc3RUcmFja1RlbXBQYXJhbXNcbiAgICB9O1xuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhzZWFyY2hTZXJ2aWNlLm1ha2VGYXN0VHJhY2tRdWVyeShkYXRhLnRlbXBQYXJhbXMpKTtcblxuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5GYXN0VHJhY2spO1xuXG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0cyA9XG4gICAgICBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbUFzTGlzdDxGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5Pih0aGlzLnJlc3VsdHNTZXNzaW9uTmFtZSkgfHwgW107XG4gICAgdGhpcy5fY2hlYXBlc3RSZXN1bHRQcmljZSA9IHRoaXMudXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0cyk7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQocmVzdWx0cyB8fCBbXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeSgpIHtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXModGhpcy5zZWFyY2hTZXJ2aWNlLm1ha2VGYXN0VHJhY2tRdWVyeSgpKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuXG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcbiAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZhc3R0cmFja0ZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXk+IHtcbiAgICB0aGlzLmJvbHRTZWFyY2hRdWVyeS5wdXNoKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5mYXN0dHJhY2tGZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gIH1cblxuICBnZXRTZWFyY2hRdWVyeSgpOiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyB7XG4gICAgY29uc3QgcXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzLFxuICAgICAgY2hpbGRyZW46IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA/IHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA6IG51bGwsXG4gICAgICBsb2NhdGlvbkNvZGU6IHRoaXMuX2xvY2F0aW9uQ29kZSxcbiAgICAgIGZsaWdodDogdGhpcy50ZW1wUGFyYW1zLmZsaWdodE51bWJlcixcbiAgICAgIHRlcm1pbmFsOiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwgPT09ICdBbnknID8gbnVsbCA6IHRoaXMudGVtcFBhcmFtcy50ZXJtaW5hbCxcbiAgICAgIGFycml2YWxEYXRldGltZTogdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSxcbiAgICAgIGFpcnBvcnRGdWxsTmFtZTogKHRoaXMubG9jYXRpb25Db2RlIGFzIE9CVEFpcnBvcnREZXRhaWxzKS5kZXN0aW5hdGlvbixcbiAgICAgIHRyYXZlbGxlcnM6IHRoaXMudHJhdmVsbGVycy5tYXAodHJhdmVsbGVyID0+IHtyZXR1cm4ge2lkOiB0cmF2ZWxsZXIuaWR9fSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXM+KHF1ZXJ5KTtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GYXN0VHJhY2ssXG4gICAgICBzZWFyY2hBcmdzOiBxdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMsIHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQpXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IHZvaWQge1xuICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmFycml2YWxEYXRldGltZSk7XG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLCB0cnVlKTtcbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hGYXN0VHJhY2tRdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMgPSBiYXNrZXRJdGVtLnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChzZWFyY2hGYXN0VHJhY2tRdWVyeSkge1xuICAgICAgaWYgKHNldERhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMuYXJyaXZhbERhdGV0aW1lID0gbW9tZW50KHNlYXJjaEZhc3RUcmFja1F1ZXJ5LmFycml2YWxEYXRldGltZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZHVsdHMgPSBzZWFyY2hGYXN0VHJhY2tRdWVyeS5hZHVsdHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHNlYXJjaEZhc3RUcmFja1F1ZXJ5LmNoaWxkcmVuO1xuICAgIHRoaXMuYWRkVHJhdmVsbGVyc0Zyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICB9XG5cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMocHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdQUkVQT1BVTEFUSU5HIExPVU5HRSBGT1JNJyk7XG4gICAgY29uc3QgZmxpZ2h0SXRlbTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMgPVxuICAgICAgcHJldmlvdXNJdGVtc1tTZXJ2aWNlVHlwZS5GbGlnaHRdPy5zZWFyY2hRdWVyeTtcbiAgICBpZiAoZmxpZ2h0SXRlbSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5GbGlnaHRdLm91dEJvdW5kRGF0ZS50b0RhdGUoKTtcbiAgICAgICAgdGhpcy5kYXRlID0ge1xuICAgICAgICAgIGRheTogZGF0ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgbW9udGg6IGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsXG4gICAgICAgICAgeWVhcjogZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9jYXRpb25Db2RlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF1cbiAgICAgICAgICAuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdHJ5aW5nIHRvIHByZXBvcHVsYXRlIHBhcmtpbmcgZnJvbSBsb3VuZ2UgaXRlbScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZhc3RUcmFja1F1b3RlW10pOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHRzWzBdLmN1cnJlbmN5O1xuICAgIHJldHVybiByZXN1bHRzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGYXN0VHJhY2tRdW90ZSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZEZhc3RUcmFja1RvQmFza2V0KFxuICAgIGZhc3R0cmFja1F1b3RlOiBGYXN0VHJhY2tRdW90ZSxcbiAgICBmYXN0dHJhY2tRdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMsXG4gICAgaWdub3JlSW52b2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGlmIChmYXN0dHJhY2tRdW90ZS51bmF2YWlsYWJsZSAmJiAhdGhpcy51c2VyU2VydmljZS5jYW5PdmVycmlkZSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTtcbiAgICB9XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgY29uc3QgYmFza2V0ID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKGZhc3R0cmFja1F1b3RlKTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBhZHVsdHM6IGZhc3R0cmFja1F1ZXJ5LmFkdWx0cyxcbiAgICAgICAgICBjaGlsZHJlbjogZmFzdHRyYWNrUXVlcnkuY2hpbGRyZW4sXG4gICAgICAgICAgYmFza2V0OiBiYXNrZXQuaWQsXG4gICAgICAgICAgc2VydmljZTogZmFzdHRyYWNrUXVvdGUuc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGFycml2YWxEYXRldGltZTogZmFzdHRyYWNrUXVlcnkuYXJyaXZhbERhdGV0aW1lLmZvcm1hdCgpLFxuICAgICAgICAgICAgbG9nbzogZmFzdHRyYWNrUXVvdGUubG9nbyxcbiAgICAgICAgICAgIGxvY2F0aW9uQ29kZTogZmFzdHRyYWNrUXVvdGUuY29kZSxcbiAgICAgICAgICAgIG5hbWU6IGZhc3R0cmFja1F1b3RlLm5hbWUsXG4gICAgICAgICAgICBhaXJwb3J0SWF0YTogZmFzdHRyYWNrUXVlcnk/LmxvY2F0aW9uQ29kZSxcbiAgICAgICAgICAgIHRlcm1pbmFsOiBmYXN0dHJhY2tRdW90ZS50ZXJtaW5hbD8udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcmljZTogZmFzdHRyYWNrUXVvdGUucHJpY2UsXG4gICAgICAgICAgY3VycmVuY3k6IGZhc3R0cmFja1F1b3RlLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgICAgICBzZWFyY2hRdWVyeTogZmFzdHRyYWNrUXVlcnksXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiBmYXN0dHJhY2tRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXG4gICAgICAgICAgbG93ZXN0UHJpY2U6IHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IHx8IHRoaXMuY2hlYXBlc3RQcmljZT8uY3VycmVuY3lDb2RlICE9PSBmYXN0dHJhY2tRdW90ZS5jdXJyZW5jeSA/XG4gICAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudCA6IG51bGwsXG4gICAgICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT09IGZhc3R0cmFja1F1b3RlLmN1cnJlbmN5ID9cbiAgICAgICAgICAgIDxDdXJyZW5jeUNvZGU+dGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgOiBudWxsLFxuICAgICAgICAgICAgcmVhc29uS2V5czpmYXN0dHJhY2tRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6ZmFzdHRyYWNrUXVvdGUudW5hdmFpbGFibGVcbiAgICAgICAgfSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgICAgZmFzdHRyYWNrUXVvdGUucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgaWdub3JlSW52b2tlZFxuICAgICAgKTtcbiAgICAgIGlmICh3aGF0SGFwcGVuZWQgPT09IERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gd2hhdEhhcHBlbmVkO1xuICAgIH1cbiAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gIH1cblxuICBnZXRUZXJtc0FuZENvbmQoZmFzdHRyYWNrUXVvdGU6IEZhc3RUcmFja1F1b3RlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ05hbWUnLFxuICAgICAgICB2YWx1ZTogZmFzdHRyYWNrUXVvdGUubmFtZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ltcG9ydGFudCBJbmZvcm1hdGlvbicsXG4gICAgICAgIHZhbHVlOiBmYXN0dHJhY2tRdW90ZS5pbXBvcnRhbnRJbmZvXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRXh0cmEgSW5mb3JtYXRpb24nLFxuICAgICAgICB2YWx1ZTogZmFzdHRyYWNrUXVvdGUuZXh0cmFJbmZvXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycyhhcHBsaWVkRmlsdGVyczogRmFzdFRyYWNrRmlsdGVycywgc2VsZWN0ZWRTb3J0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgZnVsbFJlc3VsdHM6IEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXkgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cyk7XG5cbiAgICBmdWxsUmVzdWx0cyA9IGZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgcmV0dXJuIHJlc3VsdC5wcmljZSA+PSBhcHBsaWVkRmlsdGVycy5taW5QcmljZSAmJiByZXN1bHQucHJpY2UgPD0gYXBwbGllZEZpbHRlcnMubWF4UHJpY2U7XG4gICAgfSk7XG5cbiAgICBmdWxsUmVzdWx0cyA9IHRoaXMuc29ydFJlc3VsdHMoc2VsZWN0ZWRTb3J0LCBmdWxsUmVzdWx0cyk7XG5cbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XG4gIH1cblxuICBzb3J0UmVzdWx0cyhcbiAgICBzZWxlY3RlZFNvcnQ6IG51bWJlcixcbiAgICByZXN1bHRzPzogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheVxuICApOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5IHtcbiAgICBsZXQgZnVsbFJlc3VsdHMgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0cyA/IHJlc3VsdHMgOiB0aGlzLnJlc3VsdHMudmFsdWUpO1xuICAgIHN3aXRjaCAoc2VsZWN0ZWRTb3J0KSB7XG4gICAgICBjYXNlIDA6IC8vIGNoZWFwZXN0XG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgICAgICAoYTogRmFzdFRyYWNrUXVvdGVSZXN1bHQsIGI6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiBhLnByaWNlIC0gYi5wcmljZVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTogLy8gZXhwZW5zaXZlXG4gICAgICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuc29ydChcbiAgICAgICAgICAoYTogRmFzdFRyYWNrUXVvdGVSZXN1bHQsIGI6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiBiLnByaWNlIC0gYS5wcmljZVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBmYWxsYmFjayB0byB3aGF0ZXZlciB3YXMgYmVmb3JlXG4gICAgdGhpcy5yZXN1bHRzLm5leHQoZnVsbFJlc3VsdHMpO1xuICAgIHJldHVybiBmdWxsUmVzdWx0cztcbiAgfVxuXG4gIGdldE1pblByaWNlKGZ0czogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGZ0cy5yZWR1Y2UoKG1pbjogbnVtYmVyLCBmdDogRmFzdFRyYWNrUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgIGlmIChmdC5wcmljZSA8IG1pbikge1xuICAgICAgICBtaW4gPSBmdC5wcmljZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtaW47XG4gICAgfSwgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuICB9XG5cbiAgZ2V0TWF4UHJpY2UoZnRzOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gZnRzLnJlZHVjZSgobWF4OiBudW1iZXIsIGZ0OiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGZ0LnByaWNlID4gbWF4KSB7XG4gICAgICAgIG1heCA9IGZ0LnByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1heDtcbiAgICB9LCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7XG4gIH1cblxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSB7XG4gICAgICAgIG5hbWU6IGAke21vbWVudCgpfWAsXG4gICAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GYXN0VHJhY2ssXG4gICAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlRmF2b3VyaXRlU2VhcmNoKHNlYXJjaEluZm8pO1xuICAgIH1cbiAgfVxuXG4gIG1lc3NhZ2VDb25maWdDaGVjayhjb25maWc6IGFueSwgaXNDaGVja1Bhc3M6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoY29uZmlnLmFpcnBvcnQpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uQ29kZSA9IHRoaXMubG9jYXRpb25Db2RlIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgICAgaXNDaGVja1Bhc3MgPSBsb2NhdGlvbkNvZGU/LmdhdGV3YXkgPT09IGNvbmZpZy5haXJwb3J0IHx8IGxvY2F0aW9uQ29kZT8uZGVzdGluYXRpb24gPT09IGNvbmZpZy5haXJwb3J0O1xuICAgIH1cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICAvLyBXZSB1c2UgdGhpcyBtZXRob2QgZm9yIGZlYXR1cmVzOiBSZWNlbnRTZWFyY2gsIEV4cGlyZWRCYXNrZXQsIENvcHlCYXNrZXQsIENsb25lQmFza2V0XG4gIC8vIE5vdGU6IERvIG5vdCBpbmNsdWRlIGRhdGVzIGFuZCB0YXZlbGxlcnMgaW4gdGhpcyBtZXRob2RcbiAgYXN5bmMgYXBwbHlTZWFyY2hRdWVyeShxdWVyeTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMsIHN0YXJ0U2VhcmNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRBaXJwb3J0QnlDb2RlKHF1ZXJ5LmxvY2F0aW9uQ29kZSlcbiAgICAgIC5zdWJzY3JpYmUoKGFpcnBvcnQ6IEFpcnBvcnRSZXN1bHRzKSA9PiB7XG4gICAgICAgIGlmIChhaXJwb3J0KSB7XG4gICAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB7XG4gICAgICAgICAgICBjb3VudHJ5OiBhaXJwb3J0LmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5LFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IGFpcnBvcnQuaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBhaXJwb3J0LmlhdGFNYXRjaC5pYXRhLFxuICAgICAgICAgICAgcG9zdGNvZGU6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgdGVybWluYWxzOiB0aGlzLnNlYXJjaFNlcnZpY2UucHJvY2Vzc1Rlcm1pbmFscyhhaXJwb3J0LmlhdGFNYXRjaC50ZXJtaW5hbHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnRlcm1pbmFsID0gcXVlcnkudGVybWluYWw7XG4gICAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgfVxuXG4gIF9hcHBseUZpbHRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy5nZXRWYWx1ZSgpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZFJlc3VsdHMgPSB0aGlzLmZ1bGxSZXN1bHRzLmZpbHRlcigocmVzdWx0OiBGYXN0VHJhY2tRdW90ZSkgPT4gXG4gICAgICAgIHJlc3VsdC5uYW1lID09PSB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLm5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dCh0aGlzLmhlbHBlcnMuY2xvbmUoZmlsdGVyZWRSZXN1bHRzKSk7XG4gICAgfSBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMgPSB7fTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKSk7XG4gICAgfVxuICB9XG59XG5cbiJdfQ==
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFzdC10cmFjay1lbnRlcnByaXNlLXNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3IvY2xhc3Nlcy9mYXN0LXRyYWNrLWVudGVycHJpc2Utc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQW1CbkQsT0FBTyxFQVFMLFdBQVcsRUFDWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCw0QkFBNEIsRUFRN0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd6RCxNQUFNLE9BQU8seUJBQ1gsU0FBUSxvQkFJUDtJQW1MRCxZQUNVLGdCQUFrRCxFQUMxRCxPQUEyQixFQUNuQixhQUErQyxFQUN2RCxjQUFrQyxFQUNsQyxhQUErQyxFQUMvQyxXQUFpQztRQUVqQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFQbkQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQztRQUVsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUFsTGxELFNBQUksR0FBZ0IsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMxQyxjQUFTLEdBQUcsSUFBSSxlQUFlLENBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBS3BELGFBQVEsR0FBa0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQXVCaEUsVUFBSyxHQUFrQixJQUFJLENBQUM7UUFVNUIsVUFBSyxHQUFXLElBQUksQ0FBQztRQW1HckIsc0JBQWlCLEdBQVcsRUFBRSxDQUFDO1FBa0M3Qix1QkFBa0IsR0FB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LENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFzQixFQUFFLEVBQUUsQ0FDekUsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUNsRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUN4RDthQUNJO1lBQ0gsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7O0FBL2VlLGdEQUFzQixHQUFHLGtCQUFrQixDQUFDO0FBQzVDLGlEQUF1QixHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBCYXNlRmFzdFRyYWNrUXVvdGVGZXRjaGVyLFxuICBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2Zhc3QtdHJhY2stcXVvdGUuZmV0Y2hlcic7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2UnO1xuaW1wb3J0IHsgRmFzdFRyYWNrRmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmFzdC10cmFjay1maWx0ZXJzLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQge1xuICBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlLFxuICBGYXN0VHJhY2tUZW1wUGFyYW1zXG59IGZyb20gJy4uL2ludGVyZmFjZXMvSWZhc3QtdHJhY2stZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWlycG9ydFJlc3VsdHMsXG4gIEJhc2tldEl0ZW0sXG4gIEN1cnJlbmN5Q29kZSxcbiAgRmFzdFRyYWNrUXVvdGUsXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcbiAgU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMsXG4gIFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLFxuICBTZXJ2aWNlVHlwZVxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIEZhc3RUcmFja1F1b3RlUmVzdWx0LFxuICBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5LFxuICBOZ2JEYXRlU3RydWN0LFxuICBPQlRBaXJwb3J0RGV0YWlscyxcbiAgUmVjZW50U2VhcmNoLFxuICBTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0LFxuICBUZXJtaW5hbHNUeXBlXG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xuaW1wb3J0IHsgQmFzZUhlbHBlclJvdXRpbmVzIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0IGNsYXNzIEZhc3RUcmFja0VudGVycHJpc2VTZWFyY2g8RlRRX1EgZXh0ZW5kcyBGYXN0VHJhY2tRdW90ZUZldGNoZXJUeXBlPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPFxuICAgIEZhc3RUcmFja1RlbXBQYXJhbXMsXG4gICAgRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSxcbiAgICBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5XG4gID5cbiAgaW1wbGVtZW50cyBGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlIHtcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2Zhc3R0cmFjayc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2Zhc3R0cmFjayc7XG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkZhc3RUcmFjaztcbiAgcHVibGljIHRlcm1pbmFscyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVybWluYWxzVHlwZVtdPihbXSk7XG5cbiAgcHJpdmF0ZSBfbG9jYXRpb25Db2RlOiBzdHJpbmc7XG4gIHByaXZhdGUgdHJhdmVsbGVyczogVHJhdmVsbGVyW107XG5cbiAgcHJpdmF0ZSBfbWluRGF0ZTogTmdiRGF0ZVN0cnVjdCA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZShtb21lbnQoKSk7XG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcbiAgfVxuXG4gIHNldCBhZHVsdHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xuICB9XG5cbiAgc2V0IGNoaWxkcmVuKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9kYXRlOiBOZ2JEYXRlU3RydWN0ID0gbnVsbDtcbiAgZ2V0IGRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XG4gIH1cblxuICBzZXQgZGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLl91cGRhdGVEYXRlVGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdGltZTogc3RyaW5nID0gbnVsbDtcbiAgZ2V0IHRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZTtcbiAgfVxuXG4gIHNldCB0aW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIGdldCBhcnJpdmFsRGF0ZXRpbWUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWU7XG4gIH1cblxuICBzZXQgYXJyaXZhbERhdGV0aW1lKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgaWYgKHZhbHVlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSA9IHZhbHVlO1xuXG4gICAgICB0aGlzLl9kYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICAgIHRoaXMuX3RpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZW1wUGFyYW1zLmFycml2YWxEYXRldGltZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZURhdGVUaW1lKCkge1xuICAgIGlmICh0aGlzLl9kYXRlICYmIHRoaXMuX3RpbWUpIHtcbiAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fZGF0ZSwgdGhpcy5fdGltZSk7XG4gICAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZhbERhdGV0aW1lID0gdGltZS5pc1ZhbGlkKCkgPyB0aW1lIDogbnVsbDtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbG9jYXRpb25Db2RlKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZTtcbiAgfVxuXG4gIHNldCBsb2NhdGlvbkNvZGUodmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmxvY2F0aW9uQ29kZSA9IHZhbHVlO1xuICAgIGNvbnN0IHRlcm1pbmFsc1R5cGU6IFRlcm1pbmFsc1R5cGVbXSA9IHRoaXMudGVybWluYWxzPy52YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gJyc7XG4gICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDtcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQoW10pO1xuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gbnVsbDtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX2xvY2F0aW9uQ29kZSA9IHZhbHVlLmdhdGV3YXk7XG4gICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDtcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQodmFsdWUudGVybWluYWxzKTtcbiAgICAgIGlmICh0ZXJtaW5hbHNUeXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSB0ZXJtaW5hbHNUeXBlWzBdLmtleTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9jYXRpb25Db2RlID0gbnVsbDtcbiAgICAgIHRoaXMudGVybWluYWwgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gbnVsbDtcbiAgICAgIHRoaXMudGVybWluYWxzLm5leHQoW10pO1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmbGlnaHROdW1iZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZsaWdodE51bWJlcjtcbiAgfVxuXG4gIHNldCBmbGlnaHROdW1iZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mbGlnaHROdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgdGVybWluYWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID8gdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsLnRvU3RyaW5nKCkgOiBudWxsO1xuICB9XG5cbiAgc2V0IHRlcm1pbmFsKGlucHV0OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwgPSBpbnB1dDtcbiAgICBjb25zdCBmb3VuZDogVGVybWluYWxzVHlwZSA9IHRoaXMudGVybWluYWxzLnZhbHVlLmZpbmQoXG4gICAgICAodGVybWluYWw6IFRlcm1pbmFsc1R5cGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKHRlcm1pbmFsLnZhbHVlID09PSBpbnB1dCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1pbmFsID0gZm91bmQua2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy50ZXJtaW5hbHMudmFsdWUgJiYgdGhpcy50ZXJtaW5hbHMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSB0aGlzLnRlcm1pbmFscy52YWx1ZVswXS5rZXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybWluYWwgPSAnQW55IFRlcm1pbmFsJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUZXJtaW5hbDogc3RyaW5nID0gJyc7XG4gIHNldCBzZWxlY3RlZFRlcm1pbmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZWxlY3RlZFRlcm1pbmFsID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkVGVybWluYWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUZXJtaW5hbDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWQoKSB7XG4gICAgaWYgKCF0aGlzLmRvQ2hlY2tzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb25Db2RlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2UgYWRkIGluIGFuIGFpcnBvcnQgbG9jYXRpb24nKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUuaXNBZnRlcihtb21lbnQoKSkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZhc3R0cmFja0ZldGNoZXI6IEJhc2VGYXN0VHJhY2tRdW90ZUZldGNoZXI8RlRRX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogRmFzdFRyYWNrVGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmFzdFRyYWNrVGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oRmFzdFRyYWNrRW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGYXN0VHJhY2tUZW1wUGFyYW1zXG4gICAgfTtcbiAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBkYXRhLm9yaWdpbmFsVXNlclNlYXJjaDtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMoc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoZGF0YS50ZW1wUGFyYW1zKSk7XG5cbiAgICBpZiAoc2VhcmNoU2VydmljZS5zaG91bGRBZGRUcmF2ZWxsZXJTdWJzY3JpcHRpb24oKSkge1xuICAgICAgc2VhcmNoU2VydmljZS50cmF2ZWxsZXJJbmZvcm1hdGlvbi5zdWJzY3JpYmUoKHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNwbGl0VHJhdmVsbGVycyA9IHRoaXMuaGVscGVycy5zZWxlY3RlZFRyYXZlbGxlcnModHJhdmVsbGVycywgU2VydmljZVR5cGUuRmFzdFRyYWNrKTtcblxuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHRoaXMudHJhdmVsbGVycyA9IHRyYXZlbGxlcnM7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdHMgPVxuICAgICAgc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW1Bc0xpc3Q8RmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheT4odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUpIHx8IFtdO1xuICAgIHRoaXMuX2NoZWFwZXN0UmVzdWx0UHJpY2UgPSB0aGlzLnVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHMpO1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KHJlc3VsdHMgfHwgW10pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoKSB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmFzdFRyYWNrUXVlcnkoKSk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgc3RhcnRTZWFyY2goKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoW10pO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcblxuICAgIGlmICh0aGlzLmlzVmFsaWQudmFsdWUpIHtcbiAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGYXN0VHJhY2tFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5mYXN0dHJhY2tGZXRjaGVyLmZldGNoTGlzdChxdWVyeSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzKTogT2JzZXJ2YWJsZTxGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5PiB7XG4gICAgdGhpcy5ib2x0U2VhcmNoUXVlcnkucHVzaChxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMuZmFzdHRyYWNrRmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkoKTogU2VhcmNoRmFzdFRyYWNrUXVlcnlWYXJpYWJsZXMge1xuICAgIGNvbnN0IHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gPyB0aGlzLnRlbXBQYXJhbXMuY2hpbGRyZW4gOiBudWxsLFxuICAgICAgbG9jYXRpb25Db2RlOiB0aGlzLl9sb2NhdGlvbkNvZGUgfHwgKHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmxvY2F0aW9uQ29kZSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXksXG4gICAgICBmbGlnaHQ6IHRoaXMudGVtcFBhcmFtcy5mbGlnaHROdW1iZXIsXG4gICAgICB0ZXJtaW5hbDogdGhpcy50ZW1wUGFyYW1zLnRlcm1pbmFsID09PSAnQW55JyA/IG51bGwgOiB0aGlzLnRlbXBQYXJhbXMudGVybWluYWwsXG4gICAgICBhcnJpdmFsRGF0ZXRpbWU6IHRoaXMudGVtcFBhcmFtcy5hcnJpdmFsRGF0ZXRpbWUsXG4gICAgICBhaXJwb3J0RnVsbE5hbWU6ICh0aGlzLmxvY2F0aW9uQ29kZSBhcyBPQlRBaXJwb3J0RGV0YWlscykuZGVzdGluYXRpb24gfHwgKHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmxvY2F0aW9uQ29kZSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmRlc3RpbmF0aW9uLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy50cmF2ZWxsZXJzLm1hcCh0cmF2ZWxsZXIgPT4ge3JldHVybiB7aWQ6IHRyYXZlbGxlci5pZH19KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcz4ocXVlcnkpO1xuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogdm9pZCB7XG4gICAgdGhpcy5hcnJpdmFsRGF0ZXRpbWUgPSBtb21lbnQocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuYXJyaXZhbERhdGV0aW1lKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MsIHRydWUpO1xuICB9XG5cbiAgdXBkYXRlU2VhcmNoRnJvbUV4cGlyZWRCYXNrZXRJdGVtKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sIHNldERhdGVUaW1lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaEZhc3RUcmFja1F1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG4gICAgaWYgKHNlYXJjaEZhc3RUcmFja1F1ZXJ5KSB7XG4gICAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5hcnJpdmFsRGF0ZXRpbWUgPSBtb21lbnQoc2VhcmNoRmFzdFRyYWNrUXVlcnkuYXJyaXZhbERhdGV0aW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0UXVlcnlGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkdWx0cyA9IHNlYXJjaEZhc3RUcmFja1F1ZXJ5LmFkdWx0cztcbiAgICB0aGlzLmNoaWxkcmVuID0gc2VhcmNoRmFzdFRyYWNrUXVlcnkuY2hpbGRyZW47XG4gICAgdGhpcy5hZGRUcmF2ZWxsZXJzRnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gIH1cblxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhwcmV2aW91c0l0ZW1zOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1BSRVBPUFVMQVRJTkcgTE9VTkdFIEZPUk0nKTtcbiAgICBjb25zdCBmbGlnaHRJdGVtOiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9XG4gICAgICBwcmV2aW91c0l0ZW1zW1NlcnZpY2VUeXBlLkZsaWdodF0/LnNlYXJjaFF1ZXJ5O1xuICAgIGlmIChmbGlnaHRJdGVtKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkZsaWdodF0ub3V0Qm91bmREYXRlLnRvRGF0ZSgpO1xuICAgICAgICB0aGlzLmRhdGUgPSB7XG4gICAgICAgICAgZGF5OiBkYXRlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICBtb250aDogZGF0ZS5nZXRVVENNb250aCgpICsgMSxcbiAgICAgICAgICB5ZWFyOiBkYXRlLmdldFVUQ0Z1bGxZZWFyKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbkNvZGUgPSB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuRmxpZ2h0XVxuICAgICAgICAgIC5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB0cnlpbmcgdG8gcHJlcG9wdWxhdGUgcGFya2luZyBmcm9tIGxvdW5nZSBpdGVtJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmFzdFRyYWNrUXVvdGVbXSk6IElDaGVhcGVzdFByaWNlIHtcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjdXJyZW5jeSA9IHJlc3VsdHNbMF0uY3VycmVuY3k7XG4gICAgcmV0dXJuIHJlc3VsdHMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZhc3RUcmFja1F1b3RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0LnByaWNlO1xuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5IH1cbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYWRkRmFzdFRyYWNrVG9CYXNrZXQoXG4gICAgZmFzdHRyYWNrUXVvdGU6IEZhc3RUcmFja1F1b3RlLFxuICAgIGZhc3R0cmFja1F1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcyxcbiAgICBpZ25vcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgaWYgKGZhc3R0cmFja1F1b3RlLnVuYXZhaWxhYmxlICYmICF0aGlzLnVzZXJTZXJ2aWNlLmNhbk92ZXJyaWRlKCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xuICAgIH1cbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgY29uc3QgdGVybXNBbmRDb25kaXRpb25zID0gdGhpcy5nZXRUZXJtc0FuZENvbmQoZmFzdHRyYWNrUXVvdGUpO1xuICAgIGlmIChiYXNrZXQpIHtcbiAgICAgIGNvbnN0IHdoYXRIYXBwZW5lZCA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgICAge1xuICAgICAgICAgIGFkdWx0czogZmFzdHRyYWNrUXVlcnkuYWR1bHRzLFxuICAgICAgICAgIGNoaWxkcmVuOiBmYXN0dHJhY2tRdWVyeS5jaGlsZHJlbixcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldC5pZCxcbiAgICAgICAgICBzZXJ2aWNlOiBmYXN0dHJhY2tRdW90ZS5zb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgYXJyaXZhbERhdGV0aW1lOiBmYXN0dHJhY2tRdWVyeS5hcnJpdmFsRGF0ZXRpbWUuZm9ybWF0KCksXG4gICAgICAgICAgICBsb2dvOiBmYXN0dHJhY2tRdW90ZS5sb2dvLFxuICAgICAgICAgICAgbG9jYXRpb25Db2RlOiBmYXN0dHJhY2tRdW90ZS5jb2RlLFxuICAgICAgICAgICAgbmFtZTogZmFzdHRyYWNrUXVvdGUubmFtZSxcbiAgICAgICAgICAgIGFpcnBvcnRJYXRhOiBmYXN0dHJhY2tRdWVyeT8ubG9jYXRpb25Db2RlLFxuICAgICAgICAgICAgdGVybWluYWw6IGZhc3R0cmFja1F1b3RlLnRlcm1pbmFsPy50b1N0cmluZygpLFxuICAgICAgICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByaWNlOiBmYXN0dHJhY2tRdW90ZS5wcmljZSxcbiAgICAgICAgICBjdXJyZW5jeTogZmFzdHRyYWNrUXVvdGUuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgICAgIHNlYXJjaFF1ZXJ5OiBmYXN0dHJhY2tRdWVyeSxcbiAgICAgICAgICBvdXRib3VuZERhdGU6IGZhc3R0cmFja1F1ZXJ5LmFycml2YWxEYXRldGltZS5mb3JtYXQoKSxcbiAgICAgICAgICBsb3dlc3RQcmljZTogdGhpcy5jaGVhcGVzdFByaWNlPy5hbW91bnQgfHwgdGhpcy5jaGVhcGVzdFByaWNlPy5jdXJyZW5jeUNvZGUgIT09IGZhc3R0cmFja1F1b3RlLmN1cnJlbmN5ID9cbiAgICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZT8uYW1vdW50IDogbnVsbCxcbiAgICAgICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OiB0aGlzLmNoZWFwZXN0UHJpY2U/LmFtb3VudCB8fCB0aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSAhPT0gZmFzdHRyYWNrUXVvdGUuY3VycmVuY3kgP1xuICAgICAgICAgICAgPEN1cnJlbmN5Q29kZT50aGlzLmNoZWFwZXN0UHJpY2U/LmN1cnJlbmN5Q29kZSA6IG51bGwsXG4gICAgICAgICAgICByZWFzb25LZXlzOmZhc3R0cmFja1F1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgICAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTpmYXN0dHJhY2tRdW90ZS51bmF2YWlsYWJsZVxuICAgICAgICB9LFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzLFxuICAgICAgICBmYXN0dHJhY2tRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBpZ25vcmVJbnZva2VkXG4gICAgICApO1xuICAgICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgfVxuXG4gIGdldFRlcm1zQW5kQ29uZChmYXN0dHJhY2tRdW90ZTogRmFzdFRyYWNrUXVvdGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnTmFtZScsXG4gICAgICAgIHZhbHVlOiBmYXN0dHJhY2tRdW90ZS5uYW1lXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSW1wb3J0YW50IEluZm9ybWF0aW9uJyxcbiAgICAgICAgdmFsdWU6IGZhc3R0cmFja1F1b3RlLmltcG9ydGFudEluZm9cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdFeHRyYSBJbmZvcm1hdGlvbicsXG4gICAgICAgIHZhbHVlOiBmYXN0dHJhY2tRdW90ZS5leHRyYUluZm9cbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJzKGFwcGxpZWRGaWx0ZXJzOiBGYXN0VHJhY2tGaWx0ZXJzLCBzZWxlY3RlZFNvcnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBmdWxsUmVzdWx0czogRmFzdFRyYWNrUXVvdGVSZXN1bHRBcnJheSA9IHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLmZ1bGxSZXN1bHRzKTtcblxuICAgIGZ1bGxSZXN1bHRzID0gZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiB7XG4gICAgICByZXR1cm4gcmVzdWx0LnByaWNlID49IGFwcGxpZWRGaWx0ZXJzLm1pblByaWNlICYmIHJlc3VsdC5wcmljZSA8PSBhcHBsaWVkRmlsdGVycy5tYXhQcmljZTtcbiAgICB9KTtcblxuICAgIGZ1bGxSZXN1bHRzID0gdGhpcy5zb3J0UmVzdWx0cyhzZWxlY3RlZFNvcnQsIGZ1bGxSZXN1bHRzKTtcblxuICAgIHRoaXMucmVzdWx0cy5uZXh0KGZ1bGxSZXN1bHRzKTtcbiAgfVxuXG4gIHNvcnRSZXN1bHRzKFxuICAgIHNlbGVjdGVkU29ydDogbnVtYmVyLFxuICAgIHJlc3VsdHM/OiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5XG4gICk6IEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXkge1xuICAgIGxldCBmdWxsUmVzdWx0cyA9IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHRzID8gcmVzdWx0cyA6IHRoaXMucmVzdWx0cy52YWx1ZSk7XG4gICAgc3dpdGNoIChzZWxlY3RlZFNvcnQpIHtcbiAgICAgIGNhc2UgMDogLy8gY2hlYXBlc3RcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxuICAgICAgICAgIChhOiBGYXN0VHJhY2tRdW90ZVJlc3VsdCwgYjogRmFzdFRyYWNrUXVvdGVSZXN1bHQpID0+IGEucHJpY2UgLSBiLnByaWNlXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOiAvLyBleHBlbnNpdmVcbiAgICAgICAgZnVsbFJlc3VsdHMgPSBmdWxsUmVzdWx0cy5zb3J0KFxuICAgICAgICAgIChhOiBGYXN0VHJhY2tRdW90ZVJlc3VsdCwgYjogRmFzdFRyYWNrUXVvdGVSZXN1bHQpID0+IGIucHJpY2UgLSBhLnByaWNlXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGZhbGxiYWNrIHRvIHdoYXRldmVyIHdhcyBiZWZvcmVcbiAgICB0aGlzLnJlc3VsdHMubmV4dChmdWxsUmVzdWx0cyk7XG4gICAgcmV0dXJuIGZ1bGxSZXN1bHRzO1xuICB9XG5cbiAgZ2V0TWluUHJpY2UoZnRzOiBGYXN0VHJhY2tRdW90ZVJlc3VsdEFycmF5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gZnRzLnJlZHVjZSgobWluOiBudW1iZXIsIGZ0OiBGYXN0VHJhY2tRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgaWYgKGZ0LnByaWNlIDwgbWluKSB7XG4gICAgICAgIG1pbiA9IGZ0LnByaWNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1pbjtcbiAgICB9LCBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG4gIH1cblxuICBnZXRNYXhQcmljZShmdHM6IEZhc3RUcmFja1F1b3RlUmVzdWx0QXJyYXkpOiBudW1iZXIge1xuICAgIHJldHVybiBmdHMucmVkdWNlKChtYXg6IG51bWJlciwgZnQ6IEZhc3RUcmFja1F1b3RlUmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZnQucHJpY2UgPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gZnQucHJpY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWF4O1xuICAgIH0sIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnk6IFNlYXJjaEZhc3RUcmFja1F1ZXJ5VmFyaWFibGVzID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgICAgc2VhcmNoQXJnczogcXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgbWVzc2FnZUNvbmZpZ0NoZWNrKGNvbmZpZzogYW55LCBpc0NoZWNrUGFzczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmIChjb25maWcuYWlycG9ydCkge1xuICAgICAgY29uc3QgbG9jYXRpb25Db2RlID0gdGhpcy5sb2NhdGlvbkNvZGUgYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgICBpc0NoZWNrUGFzcyA9IGxvY2F0aW9uQ29kZT8uZ2F0ZXdheSA9PT0gY29uZmlnLmFpcnBvcnQgfHwgbG9jYXRpb25Db2RlPy5kZXN0aW5hdGlvbiA9PT0gY29uZmlnLmFpcnBvcnQ7XG4gICAgfVxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRXhwaXJlZEJhc2tldCwgQ29weUJhc2tldCwgQ2xvbmVCYXNrZXRcbiAgLy8gTm90ZTogRG8gbm90IGluY2x1ZGUgZGF0ZXMgYW5kIHRhdmVsbGVycyBpbiB0aGlzIG1ldGhvZFxuICBhc3luYyBhcHBseVNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGYXN0VHJhY2tRdWVyeVZhcmlhYmxlcywgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLmdldEFpcnBvcnRCeUNvZGUocXVlcnkubG9jYXRpb25Db2RlKVxuICAgICAgLnN1YnNjcmliZSgoYWlycG9ydDogQWlycG9ydFJlc3VsdHMpID0+IHtcbiAgICAgICAgaWYgKGFpcnBvcnQpIHtcbiAgICAgICAgICB0aGlzLmxvY2F0aW9uQ29kZSA9IHtcbiAgICAgICAgICAgIGNvdW50cnk6IGFpcnBvcnQuaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeUNvZGUsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYWlycG9ydC5pYXRhTWF0Y2gubmFtZSxcbiAgICAgICAgICAgIGdhdGV3YXk6IGFpcnBvcnQuaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICBwb3N0Y29kZTogYWlycG9ydC5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFpcnBvcnQuaWF0YU1hdGNoLnRlcm1pbmFscylcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMudGVybWluYWwgPSBxdWVyeS50ZXJtaW5hbDtcbiAgICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICB9XG5cbiAgX2FwcGx5RmlsdGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuaXNDbG9uaW5nLmdldFZhbHVlKCkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IHRoaXMuZnVsbFJlc3VsdHMuZmlsdGVyKChyZXN1bHQ6IEZhc3RUcmFja1F1b3RlKSA9PiBcbiAgICAgICAgcmVzdWx0Lm5hbWUgPT09IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMubmFtZVxuICAgICAgKTtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KHRoaXMuaGVscGVycy5jbG9uZShmaWx0ZXJlZFJlc3VsdHMpKTtcbiAgICB9IFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscyA9IHt9O1xuICAgICAgdGhpcy5yZXN1bHRzLm5leHQodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpKTtcbiAgICB9XG4gIH1cbn1cblxuIl19