@recursyve/nestjs-data-filter 8.8.4 → 8.9.1

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 (58) hide show
  1. package/index.js +6 -2
  2. package/lib/adapters/default-access-control.adapter.js +1 -1
  3. package/lib/adapters/default-export.adapter.js +1 -1
  4. package/lib/adapters/default-translate.adapter.js +1 -1
  5. package/lib/adapters/index.js +6 -2
  6. package/lib/data-filter.repository.d.ts +3 -1
  7. package/lib/data-filter.repository.js +20 -8
  8. package/lib/data-filter.service.js +1 -1
  9. package/lib/decorators/count.decorator.d.ts +2 -0
  10. package/lib/decorators/count.decorator.js +28 -0
  11. package/lib/decorators/index.d.ts +2 -0
  12. package/lib/decorators/index.js +8 -2
  13. package/lib/decorators/limit.decorator.js +3 -2
  14. package/lib/decorators/paranoid.decorator.js +3 -2
  15. package/lib/decorators/path.decorator.js +4 -3
  16. package/lib/decorators/required.decorator.js +3 -2
  17. package/lib/decorators/sum.decorator.d.ts +2 -0
  18. package/lib/decorators/sum.decorator.js +28 -0
  19. package/lib/decorators/where.decorator.js +4 -3
  20. package/lib/deserializers/index.js +6 -2
  21. package/lib/filter/controllers/dynamic-filter.controller.js +1 -1
  22. package/lib/filter/controllers/filter.controller.js +1 -1
  23. package/lib/filter/filter.service.d.ts +1 -0
  24. package/lib/filter/filter.service.js +37 -6
  25. package/lib/filter/filters/filter.d.ts +1 -1
  26. package/lib/filter/filters/filter.js +7 -7
  27. package/lib/filter/filters/geo-bounds.filter.d.ts +1 -1
  28. package/lib/filter/filters/group.filter.js +6 -6
  29. package/lib/filter/filters/index.js +6 -2
  30. package/lib/filter/guards/filter-query.guard.js +1 -1
  31. package/lib/filter/index.js +6 -2
  32. package/lib/filter/interceptors/data-file-download.interceptor.js +1 -1
  33. package/lib/filter/models/filter.model.d.ts +1 -1
  34. package/lib/filter/models/index.js +6 -2
  35. package/lib/filter/models/query.model.d.ts +1 -1
  36. package/lib/filter/operators.d.ts +1 -1
  37. package/lib/filter/order-rules/index.js +6 -2
  38. package/lib/filter/order-rules/order-rule.d.ts +1 -1
  39. package/lib/index.js +6 -2
  40. package/lib/models/attributes.model.d.ts +1 -3
  41. package/lib/models/attributes.model.js +5 -34
  42. package/lib/models/count.model.d.ts +14 -0
  43. package/lib/models/count.model.js +30 -0
  44. package/lib/models/custom-attributes.model.d.ts +8 -1
  45. package/lib/models/custom-attributes.model.js +1 -1
  46. package/lib/models/data-filter.model.js +4 -3
  47. package/lib/models/distance.model.d.ts +4 -5
  48. package/lib/models/distance.model.js +4 -1
  49. package/lib/models/path.model.d.ts +6 -4
  50. package/lib/models/path.model.js +22 -1
  51. package/lib/models/sum.model.d.ts +13 -0
  52. package/lib/models/sum.model.js +24 -0
  53. package/lib/scanners/data-filter.scanner.js +1 -1
  54. package/lib/scanners/sequelize-model.scanner.js +1 -1
  55. package/lib/sequelize.utils.d.ts +2 -0
  56. package/lib/sequelize.utils.js +18 -1
  57. package/lib/services/data-filter-validation.service.js +1 -1
  58. package/package.json +1 -1
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Sum = void 0;
4
+ const attributes_handler_1 = require("../handlers/attributes.handler");
5
+ const data_filter_handler_1 = require("../handlers/data-filter.handler");
6
+ const sum_model_1 = require("../models/sum.model");
7
+ function Sum(name, options) {
8
+ return (target, propertyKey) => {
9
+ defineCustomAttributesMetadata(target, propertyKey, name, {
10
+ ...options,
11
+ name
12
+ });
13
+ };
14
+ }
15
+ exports.Sum = Sum;
16
+ function defineCustomAttributesMetadata(target, propertyKey, name, options) {
17
+ if (!propertyKey) {
18
+ const dataFilter = data_filter_handler_1.DataFilterHandler.getDataFilter(target);
19
+ dataFilter.addCustomAttribute(new sum_model_1.SumAttributesConfig(name, options));
20
+ data_filter_handler_1.DataFilterHandler.saveDataFilter(target, dataFilter);
21
+ return;
22
+ }
23
+ const attribute = attributes_handler_1.AttributesHandler.getAttribute(target, propertyKey);
24
+ attribute.addCustomAttribute(new sum_model_1.SumAttributesConfig(name, options));
25
+ attributes_handler_1.AttributesHandler.saveAttribute(target, attribute);
26
+ }
27
+
28
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3N1bS5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUVBQW1FO0FBQ25FLHlFQUFvRTtBQUNwRSxtREFBcUU7QUFFckUsU0FBZ0IsR0FBRyxDQUFDLElBQVksRUFBRSxPQUFnQztJQUM5RCxPQUFPLENBQUMsTUFBYyxFQUFFLFdBQW9CLEVBQUUsRUFBRTtRQUM1Qyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtZQUN0RCxHQUFHLE9BQU87WUFDVixJQUFJO1NBQ1AsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQVBELGtCQU9DO0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxNQUFjLEVBQUUsV0FBb0IsRUFBRSxJQUFhLEVBQUUsT0FBbUI7SUFDNUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNkLE1BQU0sVUFBVSxHQUFHLHVDQUFpQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSwrQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN0RSx1Q0FBaUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELE9BQU87S0FDVjtJQUVELE1BQU0sU0FBUyxHQUFHLHNDQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksK0JBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckUsc0NBQWlCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RCxDQUFDIiwiZmlsZSI6ImxpYi9kZWNvcmF0b3JzL3N1bS5kZWNvcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGVzSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVycy9hdHRyaWJ1dGVzLmhhbmRsZXJcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2RhdGEtZmlsdGVyLmhhbmRsZXJcIjtcbmltcG9ydCB7IFN1bUF0dHJpYnV0ZXNDb25maWcsIFN1bUNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvc3VtLm1vZGVsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBTdW0obmFtZTogc3RyaW5nLCBvcHRpb25zOiBPbWl0PFN1bUNvbmZpZywgXCJuYW1lXCI+KTogUHJvcGVydHlEZWNvcmF0b3IgJiBDbGFzc0RlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZGVmaW5lQ3VzdG9tQXR0cmlidXRlc01ldGFkYXRhKHRhcmdldCwgcHJvcGVydHlLZXksIG5hbWUsIHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGRlZmluZUN1c3RvbUF0dHJpYnV0ZXNNZXRhZGF0YSh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk/OiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBTdW1Db25maWcpIHtcbiAgICBpZiAoIXByb3BlcnR5S2V5KSB7XG4gICAgICAgIGNvbnN0IGRhdGFGaWx0ZXIgPSBEYXRhRmlsdGVySGFuZGxlci5nZXREYXRhRmlsdGVyKHRhcmdldCk7XG4gICAgICAgIGRhdGFGaWx0ZXIuYWRkQ3VzdG9tQXR0cmlidXRlKG5ldyBTdW1BdHRyaWJ1dGVzQ29uZmlnKG5hbWUsIG9wdGlvbnMpKTtcbiAgICAgICAgRGF0YUZpbHRlckhhbmRsZXIuc2F2ZURhdGFGaWx0ZXIodGFyZ2V0LCBkYXRhRmlsdGVyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZXNIYW5kbGVyLmdldEF0dHJpYnV0ZSh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICBhdHRyaWJ1dGUuYWRkQ3VzdG9tQXR0cmlidXRlKG5ldyBTdW1BdHRyaWJ1dGVzQ29uZmlnKG5hbWUsIG9wdGlvbnMpKTtcbiAgICBBdHRyaWJ1dGVzSGFuZGxlci5zYXZlQXR0cmlidXRlKHRhcmdldCwgYXR0cmlidXRlKTtcbn1cbiJdfQ==
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Where = void 0;
4
4
  const attributes_handler_1 = require("../handlers/attributes.handler");
5
+ const path_model_1 = require("../models/path.model");
5
6
  function Where(where, required = false) {
6
7
  return (target, propertyKey) => {
7
8
  var _a;
8
9
  const attribute = attributes_handler_1.AttributesHandler.getAttribute(target, propertyKey);
9
- const path = (_a = attribute.path) !== null && _a !== void 0 ? _a : {
10
+ const path = (_a = attribute.path) !== null && _a !== void 0 ? _a : new path_model_1.PathConfig({
10
11
  paranoid: true
11
- };
12
+ });
12
13
  path.where = where;
13
14
  path.required = required;
14
15
  attribute.setPath(path);
@@ -17,4 +18,4 @@ function Where(where, required = false) {
17
18
  }
18
19
  exports.Where = Where;
19
20
 
20
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3doZXJlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1RUFBbUU7QUFHbkUsU0FBZ0IsS0FBSyxDQUFDLEtBQXdCLEVBQUUsUUFBUSxHQUFHLEtBQUs7SUFDNUQsT0FBTyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLEVBQUU7O1FBQzNDLE1BQU0sU0FBUyxHQUFHLHNDQUFpQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsTUFBTSxJQUFJLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSxtQ0FBSTtZQUMzQixRQUFRLEVBQUUsSUFBSTtTQUNILENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixzQ0FBaUIsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQztBQUNOLENBQUM7QUFYRCxzQkFXQyIsImZpbGUiOiJsaWIvZGVjb3JhdG9ycy93aGVyZS5kZWNvcmF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNsdWRlV2hlcmVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvaW5jbHVkZS5tb2RlbFwiO1xuaW1wb3J0IHsgQXR0cmlidXRlc0hhbmRsZXIgfSBmcm9tIFwiLi4vaGFuZGxlcnMvYXR0cmlidXRlcy5oYW5kbGVyXCI7XG5pbXBvcnQgeyBQYXRoQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9wYXRoLm1vZGVsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBXaGVyZSh3aGVyZTogSW5jbHVkZVdoZXJlTW9kZWwsIHJlcXVpcmVkID0gZmFsc2UpOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGUodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBhdHRyaWJ1dGUucGF0aCA/PyB7XG4gICAgICAgICAgICBwYXJhbm9pZDogdHJ1ZVxuICAgICAgICB9IGFzIFBhdGhDb25maWc7XG4gICAgICAgIHBhdGgud2hlcmUgPSB3aGVyZTtcbiAgICAgICAgcGF0aC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBhdHRyaWJ1dGUuc2V0UGF0aChwYXRoKTtcbiAgICAgICAgQXR0cmlidXRlc0hhbmRsZXIuc2F2ZUF0dHJpYnV0ZSh0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gICAgfTtcbn1cbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZWNvcmF0b3JzL3doZXJlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1RUFBbUU7QUFDbkUscURBQWtEO0FBRWxELFNBQWdCLEtBQUssQ0FBQyxLQUF3QixFQUFFLFFBQVEsR0FBRyxLQUFLO0lBQzVELE9BQU8sQ0FBQyxNQUFjLEVBQUUsV0FBbUIsRUFBRSxFQUFFOztRQUMzQyxNQUFNLFNBQVMsR0FBRyxzQ0FBaUIsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE1BQUEsU0FBUyxDQUFDLElBQUksbUNBQUksSUFBSSx1QkFBVSxDQUFDO1lBQzFDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsc0NBQWlCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUM7QUFDTixDQUFDO0FBWEQsc0JBV0MiLCJmaWxlIjoibGliL2RlY29yYXRvcnMvd2hlcmUuZGVjb3JhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXJzL2F0dHJpYnV0ZXMuaGFuZGxlclwiO1xuaW1wb3J0IHsgUGF0aENvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcGF0aC5tb2RlbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gV2hlcmUod2hlcmU6IEluY2x1ZGVXaGVyZU1vZGVsLCByZXF1aXJlZCA9IGZhbHNlKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICAgIHJldHVybiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gQXR0cmlidXRlc0hhbmRsZXIuZ2V0QXR0cmlidXRlKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBjb25zdCBwYXRoID0gYXR0cmlidXRlLnBhdGggPz8gbmV3IFBhdGhDb25maWcoe1xuICAgICAgICAgICAgcGFyYW5vaWQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHBhdGgud2hlcmUgPSB3aGVyZTtcbiAgICAgICAgcGF0aC5yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBhdHRyaWJ1dGUuc2V0UGF0aChwYXRoKTtcbiAgICAgICAgQXR0cmlidXRlc0hhbmRsZXIuc2F2ZUF0dHJpYnV0ZSh0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gICAgfTtcbn1cbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -13,4 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
17
  __exportStar(require("./default.deserializer"), exports);
14
18
  __exportStar(require("./user.deserializer"), exports);
15
19
 
16
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZXNlcmlhbGl6ZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2QyxzREFBb0MiLCJmaWxlIjoibGliL2Rlc2VyaWFsaXplcnMvaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9kZWZhdWx0LmRlc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXNlci5kZXNlcmlhbGl6ZXJcIjtcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kZXNlcmlhbGl6ZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBdUM7QUFDdkMsc0RBQW9DIiwiZmlsZSI6ImxpYi9kZXNlcmlhbGl6ZXJzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZGVmYXVsdC5kZXNlcmlhbGl6ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3VzZXIuZGVzZXJpYWxpemVyXCI7XG4iXX0=
@@ -121,4 +121,4 @@ __decorate([
121
121
  ], DynamicFilterController.prototype, "searchFilterConfigValues", null);
122
122
  exports.DynamicFilterController = DynamicFilterController;
123
123
 
124
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvY29udHJvbGxlcnMvZHluYW1pYy1maWx0ZXIuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0Fhd0I7QUFDeEIsNkJBQTRGO0FBQzVGLDZDQUErQztBQUMvQyx1REFBdUQ7QUFJdkQscUVBQWdFO0FBQ2hFLG1HQUE2RjtBQUs3RixNQUFzQix1QkFBdUI7SUFRekMsWUFBeUMsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO0lBQUcsQ0FBQztJQUt4RSxLQUFLLENBQUMsTUFBTSxDQUFTLEtBQXVCLEVBQVMsR0FBUTtRQUNoRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFJTSxLQUFLLENBQUMsV0FBVyxDQUFTLEtBQXVCLEVBQVMsR0FBUTtRQUNyRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFGLENB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QUssR0FBRSxDQUFBO0lBQ1AsV0FBQSxJQUFBLFlBQUcsR0FBRSxDQUFBOzs7O3dFQUdUO0FBR0Q7SUFEQyxJQUFBLFlBQUcsRUFBQyxxQkFBcUIsQ0FBQztJQUV0QixXQUFBLElBQUEsY0FBSyxHQUFFLENBQUE7SUFDUCxXQUFBLElBQUEsWUFBRyxHQUFFLENBQUE7Ozs7dUVBR1Q7QUEzREwsMERBc0VDIiwiZmlsZSI6ImxpYi9maWx0ZXIvY29udHJvbGxlcnMvZHluYW1pYy1maWx0ZXIuY29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQm9keSxcbiAgICBHZXQsXG4gICAgSHR0cENvZGUsXG4gICAgSHR0cFN0YXR1cyxcbiAgICBJbmplY3QsXG4gICAgT3B0aW9uYWwsXG4gICAgUGFyYW0sXG4gICAgUG9zdCxcbiAgICBRdWVyeSxcbiAgICBSZXEsXG4gICAgVXNlR3VhcmRzLFxuICAgIFVzZUludGVyY2VwdG9yc1xufSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzLCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJSZXN1bHRNb2RlbCwgU2VsZWN0RmlsdGVyVmFsdWUgfSBmcm9tIFwiLi4vLi5cIjtcbmltcG9ydCB7IEZJTFRFUl9PUFRJT04gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRcIjtcbmltcG9ydCB7IFVzZXJEZXNlcmlhbGl6ZXIgfSBmcm9tIFwiLi4vLi4vZGVzZXJpYWxpemVyc1wiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyT3B0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL2ZpbHRlci5jb25maWdcIjtcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbHRlclF1ZXJ5R3VhcmQgfSBmcm9tIFwiLi4vZ3VhcmRzL2ZpbHRlci1xdWVyeS5ndWFyZFwiO1xuaW1wb3J0IHsgRGF0YUZpbGVEb3dubG9hZEludGVyY2VwdG9yIH0gZnJvbSBcIi4uL2ludGVyY2VwdG9ycy9kYXRhLWZpbGUtZG93bmxvYWQuaW50ZXJjZXB0b3JcIjtcbmltcG9ydCB7IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1yZXNvdXJjZS12YWx1ZS5tb2RlbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRHluYW1pY0ZpbHRlckNvbnRyb2xsZXI8RGF0YT4ge1xuICAgIEBJbmplY3QoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyVXNlckRlc2VyaWFsaXplcjogVXNlckRlc2VyaWFsaXplcjxEYXRhRmlsdGVyVXNlck1vZGVsPjtcblxuICAgIEBJbmplY3QoRklMVEVSX09QVElPTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbjogRmlsdGVyT3B0aW9uQ29uZmlnO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlPERhdGE+KSB7fVxuXG4gICAgQFBvc3QoXCJmaWx0ZXJcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBAVXNlR3VhcmRzKEZpbHRlclF1ZXJ5R3VhcmQpXG4gICAgcHVibGljIGFzeW5jIGZpbHRlcihAQm9keSgpIHF1ZXJ5OiBGaWx0ZXJRdWVyeU1vZGVsLCBAUmVxKCkgcmVxOiBhbnkpOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy50cmFuc2Zvcm1RdWVyeShxdWVyeSwgcmVxKTtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIodXNlciwgcXVlcnkpIDogdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcihxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJmaWx0ZXItY291bnRcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyQ291bnQoQEJvZHkoKSBxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcXVlcnkgPSB0aGlzLnRyYW5zZm9ybVF1ZXJ5KHF1ZXJ5LCByZXEpO1xuICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSk7XG4gICAgICAgIHJldHVybiB1c2VyID8gdGhpcy5maWx0ZXJTZXJ2aWNlLmNvdW50KHVzZXIsIHF1ZXJ5KSA6IHRoaXMuZmlsdGVyU2VydmljZS5jb3VudChxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJkb3dubG9hZC86dHlwZVwiKVxuICAgIEBIdHRwQ29kZShIdHRwU3RhdHVzLk9LKVxuICAgIEBVc2VJbnRlcmNlcHRvcnMoRGF0YUZpbGVEb3dubG9hZEludGVyY2VwdG9yKVxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIEBCb2R5KCkgcXVlcnk6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIEBQYXJhbShcInR5cGVcIikgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIEBSZXEoKSByZXE6IGFueVxuICAgICk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPiB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy50cmFuc2Zvcm1RdWVyeShxdWVyeSwgcmVxKTtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmRvd25sb2FkRGF0YSh1c2VyLCB0eXBlLCBxdWVyeSk7XG4gICAgfVxuXG4gICAgQEdldChcImZpbHRlci9jb25maWdcIilcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsdGVyQ29uZmlnKEBSZXEoKSByZXE6IGFueSk6IFByb21pc2U8RmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5nZXRDb25maWcocmVxLCBhd2FpdCB0aGlzLmdldFVzZXIocmVxKSA/PyB7fSBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICB9XG5cbiAgICBAR2V0KFwiZmlsdGVyL2NvbmZpZy9pZFwiKVxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hGaWx0ZXJSZXNvdXJjZVZhbHVlKFxuICAgICAgICBAUXVlcnkoKSBzZWFyY2g6IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCxcbiAgICAgICAgQFJlcSgpIHJlcTogYW55XG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maW5kUmVzb3VyY2VWYWx1ZUJ5SWQocmVxLCBzZWFyY2gsIGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpID8/IHt9IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwpO1xuICAgIH1cblxuICAgIEBHZXQoXCJmaWx0ZXIvY29uZmlnL3ZhbHVlXCIpXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZpbHRlckNvbmZpZ1ZhbHVlcyhcbiAgICAgICAgQFF1ZXJ5KCkgc2VhcmNoOiBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwsXG4gICAgICAgIEBSZXEoKSByZXE6IGFueVxuICAgICk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLnNlYXJjaENvbmZpZ1ZhbHVlcyhyZXEsIHNlYXJjaCwgYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSkgPz8ge30gYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldFVzZXIocmVxOiBhbnkpOiBQcm9taXNlPERhdGFGaWx0ZXJVc2VyTW9kZWw+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJVc2VyRGVzZXJpYWxpemVyIHx8IHRoaXMub3B0aW9uLmRpc2FibGVBY2Nlc3NDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJVc2VyRGVzZXJpYWxpemVyLmRlc2VyaWFsaXplVXNlcihyZXEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB0cmFuc2Zvcm1RdWVyeShxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgcmVxOiBhbnkpOiBGaWx0ZXJRdWVyeU1vZGVsO1xufVxuIl19
124
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvY29udHJvbGxlcnMvZHluYW1pYy1maWx0ZXIuY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0Fhd0I7QUFDeEIsNkJBQTRGO0FBQzVGLDZDQUErQztBQUMvQyx1REFBdUQ7QUFJdkQscUVBQWdFO0FBQ2hFLG1HQUE2RjtBQUs3RixNQUFzQix1QkFBdUI7SUFRekMsWUFBeUMsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO0lBQUcsQ0FBQztJQUt4RSxBQUFNLEtBQUQsQ0FBQyxNQUFNLENBQVMsS0FBdUIsRUFBUyxHQUFRO1FBQ2hFLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUlNLEFBQU0sS0FBRCxDQUFDLFdBQVcsQ0FBUyxLQUF1QixFQUFTLEdBQVE7UUFDckUsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FB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a0JBQWtCLENBQUM7SUFFbkIsV0FBQSxJQUFBLGNBQUssR0FBRSxDQUFBO0lBQ1AsV0FBQSxJQUFBLFlBQUcsR0FBRSxDQUFBOzs7O3dFQUdUO0FBR1k7SUFEWixJQUFBLFlBQUcsRUFBQyxxQkFBcUIsQ0FBQztJQUV0QixXQUFBLElBQUEsY0FBSyxHQUFFLENBQUE7SUFDUCxXQUFBLElBQUEsWUFBRyxHQUFFLENBQUE7Ozs7dUVBR1Q7QUEzREwsMERBc0VDIiwiZmlsZSI6ImxpYi9maWx0ZXIvY29udHJvbGxlcnMvZHluYW1pYy1maWx0ZXIuY29udHJvbGxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQm9keSxcbiAgICBHZXQsXG4gICAgSHR0cENvZGUsXG4gICAgSHR0cFN0YXR1cyxcbiAgICBJbmplY3QsXG4gICAgT3B0aW9uYWwsXG4gICAgUGFyYW0sXG4gICAgUG9zdCxcbiAgICBRdWVyeSxcbiAgICBSZXEsXG4gICAgVXNlR3VhcmRzLFxuICAgIFVzZUludGVyY2VwdG9yc1xufSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzLCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJSZXN1bHRNb2RlbCwgU2VsZWN0RmlsdGVyVmFsdWUgfSBmcm9tIFwiLi4vLi5cIjtcbmltcG9ydCB7IEZJTFRFUl9PUFRJT04gfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRcIjtcbmltcG9ydCB7IFVzZXJEZXNlcmlhbGl6ZXIgfSBmcm9tIFwiLi4vLi4vZGVzZXJpYWxpemVyc1wiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyT3B0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL2ZpbHRlci5jb25maWdcIjtcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZpbHRlclF1ZXJ5R3VhcmQgfSBmcm9tIFwiLi4vZ3VhcmRzL2ZpbHRlci1xdWVyeS5ndWFyZFwiO1xuaW1wb3J0IHsgRGF0YUZpbGVEb3dubG9hZEludGVyY2VwdG9yIH0gZnJvbSBcIi4uL2ludGVyY2VwdG9ycy9kYXRhLWZpbGUtZG93bmxvYWQuaW50ZXJjZXB0b3JcIjtcbmltcG9ydCB7IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1yZXNvdXJjZS12YWx1ZS5tb2RlbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRHluYW1pY0ZpbHRlckNvbnRyb2xsZXI8RGF0YT4ge1xuICAgIEBJbmplY3QoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyVXNlckRlc2VyaWFsaXplcjogVXNlckRlc2VyaWFsaXplcjxEYXRhRmlsdGVyVXNlck1vZGVsPjtcblxuICAgIEBJbmplY3QoRklMVEVSX09QVElPTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbjogRmlsdGVyT3B0aW9uQ29uZmlnO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlPERhdGE+KSB7fVxuXG4gICAgQFBvc3QoXCJmaWx0ZXJcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBAVXNlR3VhcmRzKEZpbHRlclF1ZXJ5R3VhcmQpXG4gICAgcHVibGljIGFzeW5jIGZpbHRlcihAQm9keSgpIHF1ZXJ5OiBGaWx0ZXJRdWVyeU1vZGVsLCBAUmVxKCkgcmVxOiBhbnkpOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy50cmFuc2Zvcm1RdWVyeShxdWVyeSwgcmVxKTtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIodXNlciwgcXVlcnkpIDogdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcihxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJmaWx0ZXItY291bnRcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyQ291bnQoQEJvZHkoKSBxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcXVlcnkgPSB0aGlzLnRyYW5zZm9ybVF1ZXJ5KHF1ZXJ5LCByZXEpO1xuICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSk7XG4gICAgICAgIHJldHVybiB1c2VyID8gdGhpcy5maWx0ZXJTZXJ2aWNlLmNvdW50KHVzZXIsIHF1ZXJ5KSA6IHRoaXMuZmlsdGVyU2VydmljZS5jb3VudChxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJkb3dubG9hZC86dHlwZVwiKVxuICAgIEBIdHRwQ29kZShIdHRwU3RhdHVzLk9LKVxuICAgIEBVc2VJbnRlcmNlcHRvcnMoRGF0YUZpbGVEb3dubG9hZEludGVyY2VwdG9yKVxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIEBCb2R5KCkgcXVlcnk6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIEBQYXJhbShcInR5cGVcIikgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIEBSZXEoKSByZXE6IGFueVxuICAgICk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPiB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy50cmFuc2Zvcm1RdWVyeShxdWVyeSwgcmVxKTtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmRvd25sb2FkRGF0YSh1c2VyLCB0eXBlLCBxdWVyeSk7XG4gICAgfVxuXG4gICAgQEdldChcImZpbHRlci9jb25maWdcIilcbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsdGVyQ29uZmlnKEBSZXEoKSByZXE6IGFueSk6IFByb21pc2U8RmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5nZXRDb25maWcocmVxLCBhd2FpdCB0aGlzLmdldFVzZXIocmVxKSA/PyB7fSBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICB9XG5cbiAgICBAR2V0KFwiZmlsdGVyL2NvbmZpZy9pZFwiKVxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hGaWx0ZXJSZXNvdXJjZVZhbHVlKFxuICAgICAgICBAUXVlcnkoKSBzZWFyY2g6IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCxcbiAgICAgICAgQFJlcSgpIHJlcTogYW55XG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maW5kUmVzb3VyY2VWYWx1ZUJ5SWQocmVxLCBzZWFyY2gsIGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpID8/IHt9IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwpO1xuICAgIH1cblxuICAgIEBHZXQoXCJmaWx0ZXIvY29uZmlnL3ZhbHVlXCIpXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZpbHRlckNvbmZpZ1ZhbHVlcyhcbiAgICAgICAgQFF1ZXJ5KCkgc2VhcmNoOiBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwsXG4gICAgICAgIEBSZXEoKSByZXE6IGFueVxuICAgICk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLnNlYXJjaENvbmZpZ1ZhbHVlcyhyZXEsIHNlYXJjaCwgYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSkgPz8ge30gYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldFVzZXIocmVxOiBhbnkpOiBQcm9taXNlPERhdGFGaWx0ZXJVc2VyTW9kZWw+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJVc2VyRGVzZXJpYWxpemVyIHx8IHRoaXMub3B0aW9uLmRpc2FibGVBY2Nlc3NDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJVc2VyRGVzZXJpYWxpemVyLmRlc2VyaWFsaXplVXNlcihyZXEpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB0cmFuc2Zvcm1RdWVyeShxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgcmVxOiBhbnkpOiBGaWx0ZXJRdWVyeU1vZGVsO1xufVxuIl19
@@ -118,4 +118,4 @@ __decorate([
118
118
  ], FilterController.prototype, "searchFilterConfigValues", null);
119
119
  exports.FilterController = FilterController;
120
120
 
121
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvY29udHJvbGxlcnMvZmlsdGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBYXdCO0FBQ3hCLDZCQUE0RjtBQUM1Riw2Q0FBK0M7QUFDL0MsdURBQXVEO0FBSXZELHFFQUFnRTtBQUNoRSxtR0FBNkY7QUFLN0YsTUFBYSxnQkFBZ0I7SUFRekIsWUFBK0IsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO0lBQUcsQ0FBQztJQUs5RCxLQUFLLENBQUMsTUFBTSxDQUFTLEtBQXVCLEVBQVMsR0FBUTtRQUNoRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUlNLEtBQUssQ0FBQyxXQUFXLENBQVMsS0FBdUIsRUFBUyxHQUFRO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBS00sS0FBSyxDQUFDLFlBQVksQ0FDYixLQUF1QixFQUNoQixJQUFpQixFQUN6QixHQUFRO1FBRWYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFB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Y29udHJvbGxlcnMvZmlsdGVyLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJvZHksXG4gICAgR2V0LFxuICAgIEh0dHBDb2RlLFxuICAgIEh0dHBTdGF0dXMsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsLFxuICAgIFBhcmFtLFxuICAgIFBvc3QsXG4gICAgUXVlcnksXG4gICAgUmVxLFxuICAgIFVzZUd1YXJkcyxcbiAgICBVc2VJbnRlcmNlcHRvcnNcbn0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIFNlbGVjdEZpbHRlclZhbHVlIH0gZnJvbSBcIi4uLy4uXCI7XG5pbXBvcnQgeyBGSUxURVJfT1BUSU9OIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50XCI7XG5pbXBvcnQgeyBVc2VyRGVzZXJpYWxpemVyIH0gZnJvbSBcIi4uLy4uL2Rlc2VyaWFsaXplcnNcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlck9wdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9maWx0ZXIuY29uZmlnXCI7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2ZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWx0ZXJRdWVyeUd1YXJkIH0gZnJvbSBcIi4uL2d1YXJkcy9maWx0ZXItcXVlcnkuZ3VhcmRcIjtcbmltcG9ydCB7IERhdGFGaWxlRG93bmxvYWRJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvZGF0YS1maWxlLWRvd25sb2FkLmludGVyY2VwdG9yXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbnRyb2xsZXI8RGF0YT4ge1xuICAgIEBJbmplY3QoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyVXNlckRlc2VyaWFsaXplcjogVXNlckRlc2VyaWFsaXplcjxEYXRhRmlsdGVyVXNlck1vZGVsPjtcblxuICAgIEBJbmplY3QoRklMVEVSX09QVElPTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbjogRmlsdGVyT3B0aW9uQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2U8RGF0YT4pIHt9XG5cbiAgICBAUG9zdChcImZpbHRlclwiKVxuICAgIEBIdHRwQ29kZShIdHRwU3RhdHVzLk9LKVxuICAgIEBVc2VHdWFyZHMoRmlsdGVyUXVlcnlHdWFyZClcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyKEBCb2R5KCkgcXVlcnk6IEZpbHRlclF1ZXJ5TW9kZWwsIEBSZXEoKSByZXE6IGFueSk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIodXNlciwgcXVlcnkpIDogdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcihxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJmaWx0ZXItY291bnRcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyQ291bnQoQEJvZHkoKSBxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5jb3VudCh1c2VyLCBxdWVyeSkgOiB0aGlzLmZpbHRlclNlcnZpY2UuY291bnQocXVlcnkpO1xuICAgIH1cblxuICAgIEBQb3N0KFwiZG93bmxvYWQvOnR5cGVcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBAVXNlSW50ZXJjZXB0b3JzKERhdGFGaWxlRG93bmxvYWRJbnRlcmNlcHRvcilcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBAQm9keSgpIHF1ZXJ5OiBGaWx0ZXJRdWVyeU1vZGVsLFxuICAgICAgICBAUGFyYW0oXCJ0eXBlXCIpIHR5cGU6IEV4cG9ydFR5cGVzLFxuICAgICAgICBAUmVxKCkgcmVxOiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZG93bmxvYWREYXRhKHVzZXIsIHR5cGUsIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBAR2V0KFwiZmlsdGVyL2NvbmZpZ1wiKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWx0ZXJDb25maWcoQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmdldENvbmZpZyhyZXEsIGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpID8/IHt9IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwpO1xuICAgIH1cblxuICAgIEBHZXQoXCJmaWx0ZXIvY29uZmlnL2lkXCIpXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZpbHRlclJlc291cmNlVmFsdWUoXG4gICAgICAgIEBRdWVyeSgpIHNlYXJjaDogRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsLFxuICAgICAgICBAUmVxKCkgcmVxOiBhbnlcbiAgICApOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbmRSZXNvdXJjZVZhbHVlQnlJZChyZXEsIHNlYXJjaCwgYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSkgPz8ge30gYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgfVxuXG4gICAgQEdldChcImZpbHRlci9jb25maWcvdmFsdWVcIilcbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRmlsdGVyQ29uZmlnVmFsdWVzKFxuICAgICAgICBAUXVlcnkoKSBzZWFyY2g6IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCxcbiAgICAgICAgQFJlcSgpIHJlcTogYW55XG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2Uuc2VhcmNoQ29uZmlnVmFsdWVzKHJlcSwgc2VhcmNoLCBhd2FpdCB0aGlzLmdldFVzZXIocmVxKSA/PyB7fSBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VXNlcihyZXE6IGFueSk6IFByb21pc2U8RGF0YUZpbHRlclVzZXJNb2RlbD4ge1xuICAgICAgICBpZiAoIXRoaXMudXNlclVzZXJEZXNlcmlhbGl6ZXIgfHwgdGhpcy5vcHRpb24uZGlzYWJsZUFjY2Vzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclVzZXJEZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemVVc2VyKHJlcSk7XG4gICAgfVxufVxuIl19
121
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvY29udHJvbGxlcnMvZmlsdGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBYXdCO0FBQ3hCLDZCQUE0RjtBQUM1Riw2Q0FBK0M7QUFDL0MsdURBQXVEO0FBSXZELHFFQUFnRTtBQUNoRSxtR0FBNkY7QUFLN0YsTUFBYSxnQkFBZ0I7SUFRekIsWUFBK0IsYUFBa0M7UUFBbEMsa0JBQWEsR0FBYixhQUFhLENBQXFCO0lBQUcsQ0FBQztJQUs5RCxBQUFNLEtBQUQsQ0FBQyxNQUFNLENBQVMsS0FBdUIsRUFBUyxHQUFRO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBSU0sQUFBTSxLQUFELENBQUMsV0FBVyxDQUFTLEtBQXVCLEVBQVMsR0FBUTtRQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUtNLEFBQU0sS0FBRCxDQUFDLFlBQVksQ0FDYixLQUF1QixFQUNoQixJQUFpQixFQUN6QixHQUFRO1FBRWYsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFHTSxBQUFNLEtBQUQsQ0FBQyxlQUFlLENBQVEsR0FBUTs7UUFDeEMsT0FBTyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxNQUFBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQUksRUFBeUIsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFHTSxBQUFNLEtBQUQsQ0FBQyx5QkFBeUIsQ0FDekIsTUFBZ0MsRUFDbEMsR0FBUTs7UUFFZixPQUFPLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQUEsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBSSxFQUF5QixDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUdNLEFBQU0sS0FBRCxDQUFDLHdCQUF3QixDQUN4QixNQUFzQyxFQUN4QyxHQUFROztRQUVmLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBQSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFJLEVBQXlCLENBQUMsQ0FBQztJQUMxSCxDQUFDO0lBRVMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFRO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRSxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSjtBQWhFRztJQUFDLElBQUEsZUFBTSxHQUFFO0lBQ1IsSUFBQSxpQkFBUSxHQUFFOzhCQUM0QixnQ0FBZ0I7OERBQXNCO0FBRTdFO0lBQUMsSUFBQSxlQUFNLEVBQUMsd0JBQWEsQ0FBQzs7Z0RBQ3NCO0FBTy9CO0lBSFosSUFBQSxhQUFJLEVBQUMsUUFBUSxDQUFDO0lBQ2QsSUFBQSxpQkFBUSxFQUFDLG1CQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLElBQUEsa0JBQVMsRUFBQyxxQ0FBZ0IsQ0FBQztJQUNQLFdBQUEsSUFBQSxhQUFJLEdBQUUsQ0FBQTtJQUEyQixXQUFBLElBQUEsWUFBRyxHQUFFLENBQUE7Ozs7OENBRzFEO0FBSVk7SUFGWixJQUFBLGFBQUksRUFBQyxjQUFjLENBQUM7SUFDcEIsSUFBQSxpQkFBUSxFQUFDLG1CQUFVLENBQUMsRUFBRSxDQUFDO0lBQ0UsV0FBQSxJQUFBLGFBQUksR0FBRSxDQUFBO0lBQTJCLFdBQUEsSUFBQSxZQUFHLEdBQUUsQ0FBQTs7OzttREFHL0Q7QUFLWTtJQUhaLElBQUEsYUFBSSxFQUFDLGdCQUFnQixDQUFDO0lBQ3RCLElBQUEsaUJBQVEsRUFBQyxtQkFBVSxDQUFDLEVBQUUsQ0FBQztJQUN2QixJQUFBLHdCQUFlLEVBQUMsNERBQTJCLENBQUM7SUFFeEMsV0FBQSxJQUFBLGFBQUksR0FBRSxDQUFBO0lBQ04sV0FBQSxJQUFBLGNBQUssRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUNiLFdBQUEsSUFBQSxZQUFHLEdBQUUsQ0FBQTs7OztvREFJVDtBQUdZO0lBRFosSUFBQSxZQUFHLEVBQUMsZUFBZSxDQUFDO0lBQ1MsV0FBQSxJQUFBLFlBQUcsR0FBRSxDQUFBOzs7O3VEQUVsQztBQUdZO0lBRFosSUFBQSxZQUFHLEVBQUMsa0JBQWtCLENBQUM7SUFFbkIsV0FBQSxJQUFBLGNBQUssR0FBRSxDQUFBO0lBQ1AsV0FBQSxJQUFBLFlBQUcsR0FBRSxDQUFBOzs7O2lFQUdUO0FBR1k7SUFEWixJQUFBLFlBQUcsRUFBQyxxQkFBcUIsQ0FBQztJQUV0QixXQUFBLElBQUEsY0FBSyxHQUFFLENBQUE7SUFDUCxXQUFBLElBQUEsWUFBRyxHQUFFLENBQUE7Ozs7Z0VBR1Q7QUF4REwsNENBaUVDIiwiZmlsZSI6ImxpYi9maWx0ZXIvY29udHJvbGxlcnMvZmlsdGVyLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEJvZHksXG4gICAgR2V0LFxuICAgIEh0dHBDb2RlLFxuICAgIEh0dHBTdGF0dXMsXG4gICAgSW5qZWN0LFxuICAgIE9wdGlvbmFsLFxuICAgIFBhcmFtLFxuICAgIFBvc3QsXG4gICAgUXVlcnksXG4gICAgUmVxLFxuICAgIFVzZUd1YXJkcyxcbiAgICBVc2VJbnRlcmNlcHRvcnNcbn0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIFNlbGVjdEZpbHRlclZhbHVlIH0gZnJvbSBcIi4uLy4uXCI7XG5pbXBvcnQgeyBGSUxURVJfT1BUSU9OIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50XCI7XG5pbXBvcnQgeyBVc2VyRGVzZXJpYWxpemVyIH0gZnJvbSBcIi4uLy4uL2Rlc2VyaWFsaXplcnNcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlck9wdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9maWx0ZXIuY29uZmlnXCI7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2ZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBGaWx0ZXJRdWVyeUd1YXJkIH0gZnJvbSBcIi4uL2d1YXJkcy9maWx0ZXItcXVlcnkuZ3VhcmRcIjtcbmltcG9ydCB7IERhdGFGaWxlRG93bmxvYWRJbnRlcmNlcHRvciB9IGZyb20gXCIuLi9pbnRlcmNlcHRvcnMvZGF0YS1maWxlLWRvd25sb2FkLmludGVyY2VwdG9yXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcblxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbnRyb2xsZXI8RGF0YT4ge1xuICAgIEBJbmplY3QoKVxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyVXNlckRlc2VyaWFsaXplcjogVXNlckRlc2VyaWFsaXplcjxEYXRhRmlsdGVyVXNlck1vZGVsPjtcblxuICAgIEBJbmplY3QoRklMVEVSX09QVElPTilcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbjogRmlsdGVyT3B0aW9uQ29uZmlnO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2U8RGF0YT4pIHt9XG5cbiAgICBAUG9zdChcImZpbHRlclwiKVxuICAgIEBIdHRwQ29kZShIdHRwU3RhdHVzLk9LKVxuICAgIEBVc2VHdWFyZHMoRmlsdGVyUXVlcnlHdWFyZClcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyKEBCb2R5KCkgcXVlcnk6IEZpbHRlclF1ZXJ5TW9kZWwsIEBSZXEoKSByZXE6IGFueSk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXIodXNlciwgcXVlcnkpIDogdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcihxdWVyeSk7XG4gICAgfVxuXG4gICAgQFBvc3QoXCJmaWx0ZXItY291bnRcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyQ291bnQoQEJvZHkoKSBxdWVyeTogRmlsdGVyUXVlcnlNb2RlbCwgQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuZmlsdGVyU2VydmljZS5jb3VudCh1c2VyLCBxdWVyeSkgOiB0aGlzLmZpbHRlclNlcnZpY2UuY291bnQocXVlcnkpO1xuICAgIH1cblxuICAgIEBQb3N0KFwiZG93bmxvYWQvOnR5cGVcIilcbiAgICBASHR0cENvZGUoSHR0cFN0YXR1cy5PSylcbiAgICBAVXNlSW50ZXJjZXB0b3JzKERhdGFGaWxlRG93bmxvYWRJbnRlcmNlcHRvcilcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBAQm9keSgpIHF1ZXJ5OiBGaWx0ZXJRdWVyeU1vZGVsLFxuICAgICAgICBAUGFyYW0oXCJ0eXBlXCIpIHR5cGU6IEV4cG9ydFR5cGVzLFxuICAgICAgICBAUmVxKCkgcmVxOiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSk7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZG93bmxvYWREYXRhKHVzZXIsIHR5cGUsIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBAR2V0KFwiZmlsdGVyL2NvbmZpZ1wiKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWx0ZXJDb25maWcoQFJlcSgpIHJlcTogYW55KTogUHJvbWlzZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmdldENvbmZpZyhyZXEsIGF3YWl0IHRoaXMuZ2V0VXNlcihyZXEpID8/IHt9IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwpO1xuICAgIH1cblxuICAgIEBHZXQoXCJmaWx0ZXIvY29uZmlnL2lkXCIpXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZpbHRlclJlc291cmNlVmFsdWUoXG4gICAgICAgIEBRdWVyeSgpIHNlYXJjaDogRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsLFxuICAgICAgICBAUmVxKCkgcmVxOiBhbnlcbiAgICApOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbmRSZXNvdXJjZVZhbHVlQnlJZChyZXEsIHNlYXJjaCwgYXdhaXQgdGhpcy5nZXRVc2VyKHJlcSkgPz8ge30gYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgfVxuXG4gICAgQEdldChcImZpbHRlci9jb25maWcvdmFsdWVcIilcbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRmlsdGVyQ29uZmlnVmFsdWVzKFxuICAgICAgICBAUXVlcnkoKSBzZWFyY2g6IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCxcbiAgICAgICAgQFJlcSgpIHJlcTogYW55XG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2Uuc2VhcmNoQ29uZmlnVmFsdWVzKHJlcSwgc2VhcmNoLCBhd2FpdCB0aGlzLmdldFVzZXIocmVxKSA/PyB7fSBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VXNlcihyZXE6IGFueSk6IFByb21pc2U8RGF0YUZpbHRlclVzZXJNb2RlbD4ge1xuICAgICAgICBpZiAoIXRoaXMudXNlclVzZXJEZXNlcmlhbGl6ZXIgfHwgdGhpcy5vcHRpb24uZGlzYWJsZUFjY2Vzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlclVzZXJEZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemVVc2VyKHJlcSk7XG4gICAgfVxufVxuIl19
@@ -51,6 +51,7 @@ export declare class FilterService<Data> {
51
51
  private getFilterInclude;
52
52
  private getOrderOptions;
53
53
  private getOrderCustomAttribute;
54
+ private generateRepositoryGroupBy;
54
55
  private addDefaultFilter;
55
56
  private normalizeOrder;
56
57
  private getNonNestedOrderColumns;
@@ -94,7 +94,7 @@ let FilterService = FilterService_1 = class FilterService {
94
94
  options.order = this.normalizeOrder(options.order);
95
95
  const countOptions = await this.getFindOptions(this.repository.model, options.query, options.data);
96
96
  this.addSearchCondition(options.search, countOptions);
97
- this.addOrderCondition(options.order, countOptions);
97
+ this.addOrderCondition(options.order, countOptions, options.data);
98
98
  this.addGroupOption(options.order, countOptions);
99
99
  const total = await (user ? this.countTotalValues(user, countOptions) : this.countTotalValues(countOptions));
100
100
  const values = await (user ? this.findValues(user, options, countOptions) : this.findValues(options, countOptions));
@@ -109,7 +109,7 @@ let FilterService = FilterService_1 = class FilterService {
109
109
  const findOptions = await this.getFindOptions(this.exportRepository.model, options.query);
110
110
  options.order = this.normalizeOrder(options.order);
111
111
  this.addSearchCondition(options.search, findOptions);
112
- this.addOrderCondition(options.order, findOptions);
112
+ this.addOrderCondition(options.order, findOptions, options.data);
113
113
  delete options.page;
114
114
  const values = await (user ? this.findValues(user, options, findOptions, this.exportRepository) : this.findValues(options, findOptions, this.exportRepository));
115
115
  const headers = await this.model.getExportedFieldsKeys(type);
@@ -286,7 +286,7 @@ let FilterService = FilterService_1 = class FilterService {
286
286
  }
287
287
  this.repository.addSearchCondition(search.value, options);
288
288
  }
289
- addOrderCondition(orders, options) {
289
+ addOrderCondition(orders, options, data) {
290
290
  if (orders.every(order => !order.direction)) {
291
291
  return;
292
292
  }
@@ -300,7 +300,7 @@ let FilterService = FilterService_1 = class FilterService {
300
300
  const rule = this.definitions[order.column];
301
301
  const includes = rule && order_rule_1.OrderRule.validate(rule) ?
302
302
  this.sequelizeModelScanner.getIncludes(this.repository.model, { path: rule.path }, []) :
303
- this.repository.generateOrderInclude(order);
303
+ this.repository.generateOrderInclude(order, data);
304
304
  if (!includes.length) {
305
305
  continue;
306
306
  }
@@ -391,7 +391,7 @@ let FilterService = FilterService_1 = class FilterService {
391
391
  subQuery: false,
392
392
  order
393
393
  });
394
- const group = filter.groupBy ? [sequelize_utils_1.SequelizeUtils.getGroupLiteral(repository.model, filter.groupBy)] : undefined;
394
+ const group = this.generateRepositoryGroupBy(filter);
395
395
  return await repository.findAll({
396
396
  where: {
397
397
  id: values.map(x => x.id)
@@ -494,6 +494,37 @@ let FilterService = FilterService_1 = class FilterService {
494
494
  }
495
495
  return attributes;
496
496
  }
497
+ generateRepositoryGroupBy(filter) {
498
+ const group = [];
499
+ if (filter.groupBy) {
500
+ group.push(sequelize_utils_1.SequelizeUtils.getGroupLiteral(this.repository.model, filter.groupBy));
501
+ }
502
+ const groupBy = this.repository.getCustomAttributeGroupBy();
503
+ if (!groupBy.length) {
504
+ return group;
505
+ }
506
+ group.push(...groupBy);
507
+ if (!filter.order || (filter.order instanceof Array && !filter.order.length)) {
508
+ return group;
509
+ }
510
+ const orders = this.normalizeOrder(filter.order);
511
+ for (const order of orders) {
512
+ if (!(order === null || order === void 0 ? void 0 : order.column) || !order.direction) {
513
+ continue;
514
+ }
515
+ if (this.repository.hasCustomAttribute(order.column)) {
516
+ continue;
517
+ }
518
+ const rule = this.definitions[order.column];
519
+ if (!rule || !order_rule_1.OrderRule.validate(rule)) {
520
+ group.push(`${this.repository.model.name}.${sequelize_utils_1.SequelizeUtils.findColumnFieldName(this.repository.model, order.column)}`);
521
+ }
522
+ else {
523
+ group.push(...this.sequelizeModelScanner.getGroup(this.repository.model, order));
524
+ }
525
+ }
526
+ return group;
527
+ }
497
528
  addDefaultFilter(query) {
498
529
  if (!this.model.defaultFilter) {
499
530
  return query;
@@ -544,4 +575,4 @@ FilterService = FilterService_1 = __decorate([
544
575
  ], FilterService);
545
576
  exports.FilterService = FilterService;
546
577
 
547
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUNqRSxzRUFBaUU7QUFDakUsZ0VBQTJEO0FBRzNELGlGQUE0RTtBQUM1RSx3REFBdUQ7QUFDdkQsK0NBQTJDO0FBQzNDLGlEQUE2QztBQUM3Qyx1Q0FPbUI7QUFDbkIsK0VBQTBFO0FBQzFFLHlEQUE0RTtBQUs1RSx5REFBMEU7QUFHMUUsSUFBYSxhQUFhLHFCQUExQixNQUFhLGFBQWE7SUFLdEIsWUFDWSxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLEtBQXVCLEVBQ3ZCLHFCQUE0QyxFQUM1QyxVQUE2QixFQUM3QixPQUE0QztRQUw1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFxQztRQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBSSxPQUFnQjtRQUM5QixPQUFPLElBQUksZUFBYSxDQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckI7WUFDSSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsY0FBYyxFQUFFLE9BQU87U0FDRSxFQUM3QixJQUFJLENBQUMscUJBQXFCLEVBQzFCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBWSxFQUFFLElBQTBCO1FBQzNELE1BQU0sTUFBTSxHQUErQixF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QUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxNQUFNLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDakIsTUFBTSxHQUFHLENBQUM7b0JBQ04sTUFBTSxFQUFFLElBQUk7b0JBQ1osU0FBUyxFQUFFLEtBQUs7aUJBQ25CLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQW9CO1FBQ2pELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRyxDQUFDO0NBQ0osQ0FBQTtBQXpuQlksYUFBYTtJQUR6QixJQUFBLG1CQUFVLEdBQUU7cUNBT3lCLDZDQUFvQjtRQUN4QixvQ0FBZ0I7UUFDM0Isd0JBQVU7UUFDTSwrQ0FBcUI7UUFDaEMsdUNBQWlCO0dBVmhDLGFBQWEsQ0F5bkJ6QjtBQXpuQlksc0NBQWEiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7XG4gICAgQ291bnRPcHRpb25zLFxuICAgIEZpbmRPcHRpb25zLFxuICAgIEluY2x1ZGVhYmxlLFxuICAgIEluY2x1ZGVPcHRpb25zLFxuICAgIGxpdGVyYWwsXG4gICAgT3AsXG4gICAgT3JkZXIsXG4gICAgT3JkZXJJdGVtLFxuICAgIFdoZXJlT3B0aW9uc1xufSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIEZpbHRlclNlYXJjaE1vZGVsLCBPcmRlck1vZGVsIH0gZnJvbSBcIi4uL1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIucmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyIH0gZnJvbSBcIi4vYmFzZS1maWx0ZXJcIjtcbmltcG9ydCB7IEZpbHRlclV0aWxzIH0gZnJvbSBcIi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQge1xuICAgIEZpbHRlcixcbiAgICBGaWx0ZXJDb25kaXRpb24sXG4gICAgRmlsdGVyQ29uZGl0aW9uUnVsZSxcbiAgICBGaWx0ZXJEZWZpbml0aW9uLFxuICAgIFNlbGVjdEZpbHRlcixcbiAgICBTZWxlY3RGaWx0ZXJWYWx1ZVxufSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJzL2dlby1sb2NhbGl6YXRpb24uZmlsdGVyXCI7XG5pbXBvcnQgeyBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9ncm91cC5maWx0ZXJcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyUnVsZSwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL29yZGVyLXJ1bGVzL29yZGVyLXJ1bGVcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2U8RGF0YT4ge1xuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZpbHRlckRlZmluaXRpb24gfCBHcm91cEZpbHRlckRlZmluaXRpb24gfCBPcmRlclJ1bGVEZWZpbml0aW9uIH07XG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcbiAgICBwcml2YXRlIGV4cG9ydFJlcG9zaXRvcnk6IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZUFkYXB0ZXI6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IEJhc2VGaWx0ZXI8RGF0YT4sXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlcjogRGF0YUZpbHRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgb3B0aW9ucz86IHsgZGlzYWJsZUFjY2Vzc0NvbnRyb2w/OiBib29sZWFuIH1cbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRhdGE8VD4oZGF0YURlZjogVHlwZTxUPik6IEZpbHRlclNlcnZpY2U8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlclNlcnZpY2UoXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMubW9kZWwsXG4gICAgICAgICAgICAgICAgZGF0YURlZmluaXRpb246IGRhdGFEZWZcbiAgICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBCYXNlRmlsdGVyPFQ+LFxuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWx0ZXIsXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKHJlcXVlc3Q6IGFueSwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkgfHwgT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCAodGhpcy5kZWZpbml0aW9uc1trZXldIGFzIEZpbHRlckRlZmluaXRpb24pLmdldENvbmZpZyhrZXksIHJlcXVlc3QsIHVzZXIpO1xuICAgICAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICAgICAgICBuYW1lOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXIuZ2V0VHJhbnNsYXRpb24odXNlci5sYW5ndWFnZSwgRmlsdGVyVXRpbHMuZ2V0RmlsdGVyVHJhbnNsYXRpb25LZXkoa2V5KSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoQ29uZmlnVmFsdWVzKFxuICAgICAgICByZXF1ZXN0OiBhbnksXG4gICAgICAgIHNlYXJjaDogRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsLFxuICAgICAgICB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbFxuICAgICk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlsdGVyLnZhbHVlcyh7IHZhbHVlOiBzZWFyY2gudmFsdWUsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRSZXNvdXJjZVZhbHVlQnlJZChyZXF1ZXN0OiBhbnksIHNlYXJjaDogRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsLCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWUgfCBudWxsPiB7XG4gICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzZWFyY2guaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3NlYXJjaC5pZF07XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBTZWxlY3RGaWx0ZXIgJiYgZmlsdGVyLmdldFJlc291cmNlQnlJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQoeyBpZDogc2VhcmNoLnJlc291cmNlSWQsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbD9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuY291bnRUb3RhbFZhbHVlcyh1c2VyLCBjb3VudE9wdGlvbnMpIDogdGhpcy5jb3VudFRvdGFsVmFsdWVzKGNvdW50T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbHRlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlcihvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlciguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5kYXRhKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkT3JkZXJDb25kaXRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRHcm91cE9wdGlvbihvcHRpb25zLm9yZGVyLCBjb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgKHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgY291bnRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCxcbiAgICAgICAgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIGV4cG9ydE9wdGlvbnM/OiBvYmplY3RcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5leHBvcnRSZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5KTtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgZmluZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFnZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgZmluZE9wdGlvbnMsIHRoaXMuZXhwb3J0UmVwb3NpdG9yeSkgOiB0aGlzLmZpbmRWYWx1ZXMob3B0aW9ucywgZmluZE9wdGlvbnMsIHRoaXMuZXhwb3J0UmVwb3NpdG9yeSkpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkc0tleXModHlwZSk7XG4gICAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IFByb21pc2UuYWxsKHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB0aGlzLm1vZGVsLmdldEV4cG9ydGVkRmllbGRzKHZhbHVlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIHR5cGUpKSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YShoZWFkZXJzLCBkYXRhLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kb3dubG9hZERhdGEodmFsdWVzLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbmRPcHRpb25zKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEZpbmRPcHRpb25zPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXNldCBHZW8gbG9jYWxpemF0aW9uIGZpbHRlciBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgR2VvTG9jYWxpemF0aW9uRmlsdGVyLnJlc2V0KCk7XG5cbiAgICAgICAgcXVlcnkgPSB0aGlzLmFkZERlZmF1bHRGaWx0ZXIocXVlcnkpO1xuICAgICAgICBsZXQgb3B0aW9uOiBGaW5kT3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nQ29uZGl0aW9ucyA9IFtdO1xuXG4gICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgcXVlcnksIGRhdGEpLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiB3aGVyZUNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogd2hlcmVDb25kaXRpb25zIH0sXG4gICAgICAgICAgICAgICAgaGF2aW5nOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBoYXZpbmdDb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGhhdmluZ0NvbmRpdGlvbnMgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW5vaWQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5LCB3aGVyZUNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnksIGhhdmluZ0NvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmFub2lkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnBhcmFub2lkID0gcGFyYW5vaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGF2aW5nQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9uLmhhdmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZGF0YURlZmluaXRpb24pO1xuICAgICAgICB0aGlzLmV4cG9ydFJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZXhwb3J0RGF0YURlZmluaXRpb24gPz8gdGhpcy5tb2RlbC5kYXRhRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNsYXRlU2VydmljZSA9IHRoaXMudHJhbnNsYXRlQWRhcHRlcjtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhRmlsdGVyLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kZWZpbml0aW9uc1trZXldID0gdGhpcy5tb2RlbFtrZXldIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8SW5jbHVkZWFibGVbXT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBtLCBkYXRhKSBhcyBJbmNsdWRlT3B0aW9uc1tdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXTtcbiAgICAgICAgICAgIGlmICgoZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikucm9vdEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWx0ZXIgYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmLnJvb3RGaWx0ZXIsIHIsIGRhdGEpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZi5sYXp5TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi52YWx1ZUZpbHRlciwgciwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRmlsZXIgPSBhd2FpdCBmLmdldFZhbHVlRmlsdGVyKHIudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgdmFsdWVGaWxlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCByLCBkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZmlsdGVyIGFzIEZpbHRlckRlZmluaXRpb24sIHIsIGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbDogdHlwZW9mIE0sIGNvbmRpdGlvbjogRmlsdGVyQ29uZGl0aW9uKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgY29uZGl0aW9uLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgY29uZGl0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb25SdWxlO1xuICAgICAgICAgICAgaWYgKHIucGF0aCkge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXMobW9kZWwsIHsgcGF0aDogci5wYXRoIH0sIFtdLCB7IGluY2x1ZGU6IFtdIH0sIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5jbHVkZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVdoZXJlT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmFub2lkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCB3aGVyZSA9IHsgW29wXTogY29uZGl0aW9ucyB9O1xuICAgICAgICAgICAgICAgIHBhcmFub2lkID0gcGFyYW5vaWQgJiYgYXdhaXQgdGhpcy5nZW5lcmF0ZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICh3aGVyZVtvcCBhcyBhbnldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2god2hlcmUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRXaGVyZU9wdGlvbnMocik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goZmlsdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW5vaWQgPSBmaWx0ZXIucGFyYW5vaWQgPz8gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbm9pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pIHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXZpbmcgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmIChoYXZpbmdbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGhhdmluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghT3JkZXJSdWxlLnZhbGlkYXRlKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gYXdhaXQgZmlsdGVyLmdldEhhdmluZ09wdGlvbnMocik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaDogRmlsdGVyU2VhcmNoTW9kZWwsIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlYXJjaD8udmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2gudmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkT3JkZXJDb25kaXRpb24ob3JkZXJzOiBPcmRlck1vZGVsW10sIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAob3JkZXJzLmV2ZXJ5KG9yZGVyID0+ICFvcmRlci5kaXJlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3JkZXJzID0gQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXIpXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXJcbiAgICAgICAgICAgICAgICA6IFt0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXJdO1xuXG4gICAgICAgICAgICBvcmRlcnMgPSBbLi4uZGVmYXVsdE9yZGVycywgLi4ub3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICBjb25zdCBpbmNsdWRlcyA9IHJ1bGUgJiYgT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpID9cbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIHsgcGF0aDogcnVsZS5wYXRoIH0sIFtdKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmdlbmVyYXRlT3JkZXJJbmNsdWRlKG9yZGVyKTtcblxuICAgICAgICAgICAgaWYgKCFpbmNsdWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU2VxdWVsaXplVXRpbHMubWVyZ2VJbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnMgfCBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cblxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkR3JvdXBPcHRpb24ob3JkZXJzOiBPcmRlck1vZGVsW10sIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMucmVwb3NpdG9yeS5tb2RlbDtcbiAgICAgICAgb3B0aW9ucy5ncm91cCA9IFtgJHttb2RlbC5uYW1lfS5pZGBdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICBpZiAocnVsZSAmJiBPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlci5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdmFsdWVzLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ncm91cC5wdXNoKGAke21vZGVsLm5hbWV9LiR7U2VxdWVsaXplVXRpbHMuZmluZENvbHVtbkZpZWxkTmFtZShtb2RlbCwgY29sdW1uKX1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ncm91cC5wdXNoKC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEdyb3VwKG1vZGVsLCBvcmRlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyhvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXMoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnM/XSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbmRPcHRpb25zO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIG1lYW5zIHRoYXQgY291bnRUb3RhbFZhbHVlcyB3YXMgY2FsbGVkIHdpdGggYSB1c2VyXG4gICAgICAgICAqL1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24ob3B0aW9ucy53aGVyZSwgdXNlck9yT3B0IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuaGF2aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc3ViUXVlcnk6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lm1vZGVsLmNvdW50KHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgICAgICB9KSBhcyBhbnk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kVmFsdWVzPFVzZXJzIGV4dGVuZHMgRGF0YUZpbHRlclVzZXJNb2RlbD4odXNlcjogVXNlcnMsIGZpbHRlcjogRmlsdGVyUXVlcnlNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMsIHJlcG9zaXRvcnk/OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPik6IFByb21pc2U8RGF0YVtdPjtcbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPihmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zLCByZXBvc2l0b3J5PzogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4pOiBQcm9taXNlPERhdGFbXT47XG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kVmFsdWVzPFVzZXJzIGV4dGVuZHMgRGF0YUZpbHRlclVzZXJNb2RlbD4oLi4uYXJnczogW1VzZXJzIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucyB8IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+LCBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPj9dKTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9GaWx0ZXIsIGZpbHRlck9yT3B0LCBvcHRPclJlcG8sIHJlcG9dID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0T3JSZXBvSXNSZXBvID0gb3B0T3JSZXBvIGluc3RhbmNlb2YgRGF0YUZpbHRlclJlcG9zaXRvcnk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdE9yUmVwbyAmJiAhb3B0T3JSZXBvSXNSZXBvID8gb3B0T3JSZXBvIDogZmlsdGVyT3JPcHQgYXMgRmluZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG9wdE9yUmVwbyAmJiAhb3B0T3JSZXBvSXNSZXBvID8gZmlsdGVyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbCA6IHVzZXJPck9GaWx0ZXIgYXMgRmlsdGVyUXVlcnlNb2RlbDtcblxuICAgICAgICBjb25zdCByZXBvc2l0b3J5ID0gcmVwbyA/PyAob3B0T3JSZXBvSXNSZXBvID8gb3B0T3JSZXBvIDogdGhpcy5yZXBvc2l0b3J5KTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGZpbmRWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHJlcG8pIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbihvcHRpb25zLndoZXJlLCB1c2VyT3JPRmlsdGVyIGFzIFVzZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5nZXRPcmRlck9wdGlvbnMoZmlsdGVyLm9yZGVyIGFzIE9yZGVyTW9kZWxbXSk7XG5cbiAgICAgICAgY29uc3Qgbm9uTmVzdGVkT3JkZXJDb2x1bW5zID0gKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10pXG4gICAgICAgICAgICAubWFwKG9yZGVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICAgICAgaWYgKCFydWxlIHx8ICFPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yZGVyLmNvbHVtbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3J1bGUucGF0aCA/PyBcIlwiLCBydWxlLmF0dHJpYnV0ZV0uam9pbihcIi5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbiAmJiAhY29sdW1uLmluY2x1ZGVzKFwiLlwiKSAmJiAhcmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUoY29sdW1uKSk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZXMgPSB0aGlzLmdldE9yZGVyQ3VzdG9tQXR0cmlidXRlKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10sIGZpbHRlci5kYXRhKTtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCByZXBvc2l0b3J5Lm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcImlkXCIsIC4uLm5vbk5lc3RlZE9yZGVyQ29sdW1ucywgLi4uY3VzdG9tQXR0cmlidXRlc10sXG4gICAgICAgICAgICBsaW1pdDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5zaXplIDogbnVsbCxcbiAgICAgICAgICAgIG9mZnNldDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5udW1iZXIgKiBmaWx0ZXIucGFnZS5zaXplICsgKGZpbHRlci5wYWdlLm9mZnNldCA/PyAwKSA6IG51bGwsXG4gICAgICAgICAgICBzdWJRdWVyeTogZmFsc2UsXG4gICAgICAgICAgICBvcmRlclxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBncm91cCA9IGZpbHRlci5ncm91cEJ5ID8gW1NlcXVlbGl6ZVV0aWxzLmdldEdyb3VwTGl0ZXJhbChyZXBvc2l0b3J5Lm1vZGVsLCBmaWx0ZXIuZ3JvdXBCeSldIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVwb3NpdG9yeS5maW5kQWxsKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhbHVlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgcGFyYW5vaWQ6IG9wdGlvbnMucGFyYW5vaWQsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICB9LCBmaWx0ZXIuZGF0YSA/PyB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVBY2Nlc3NDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHVzZXIgZm91bmRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY2Vzc0NvbnRyb2wgaXNuJ3QgZW5hYmxlIGluIHlvdXIgcHJvamVjdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMubWVyZ2VXaGVyZSh7IGlkOiByZXNvdXJjZXMuaWRzIH0sIHdoZXJlID8/IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVySW5jbHVkZShcbiAgICAgICAgbW9kZWw6IHR5cGVvZiBNLFxuICAgICAgICBmaWx0ZXI6IEZpbHRlckRlZmluaXRpb24sXG4gICAgICAgIHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLFxuICAgICAgICBkYXRhPzogb2JqZWN0XG4gICAgKTogSW5jbHVkZU9wdGlvbnNbXVtdIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBjb25zdCBwYXRocyA9IGZpbHRlci5nZXRJbmNsdWRlUGF0aHMocnVsZSwgZGF0YSk7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgICAgICAgICAgaW5jbHVkZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwgcGF0aCwgW10sIFtdLCB0cnVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmlsdGVyLnBhdGgpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzLnB1c2godGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBmaWx0ZXIuY29uZGl0aW9uKSk7XG4gICAgICAgICAgICByZXR1cm4gaW5jbHVkZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uaW5jbHVkZXMsXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGZpbHRlci5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiBmaWx0ZXIucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgd2hlcmU6IEZpbHRlclV0aWxzLmdlbmVyYXRlV2hlcmVDb25kaXRpb25zKGZpbHRlci53aGVyZSwgZGF0YSlcbiAgICAgICAgICAgIH0sIFtdLCBbXSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlck9wdGlvbnMob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXIge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kZWZhdWx0T3JkZXJSdWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3JkZXJzID0gQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXIpXG4gICAgICAgICAgICAgICAgPyB0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXJcbiAgICAgICAgICAgICAgICA6IFt0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUub3JkZXJdO1xuXG4gICAgICAgICAgICBvcmRlcnMgPSBbLi4uZGVmYXVsdE9yZGVycywgLi4ub3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZE9yZGVyOiBPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBpZiAoIW9yZGVyPy5jb2x1bW4gfHwgIW9yZGVyLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gb3JkZXIubnVsbExhc3QgPyBgLSR7b3JkZXIuY29sdW1ufWAgOiBvcmRlci5jb2x1bW47XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gb3JkZXIubnVsbExhc3QgPyBvcmRlci5kaXJlY3Rpb24gPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCIgOiBvcmRlci5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaChbbGl0ZXJhbChjb2x1bW4pLCBkaXJlY3Rpb24udG9VcHBlckNhc2UoKV0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIXJ1bGUgfHwgIU9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2godGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXIodGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcmRlcikgYXMgT3JkZXJJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaChbcnVsZS5nZXRPcmRlck9wdGlvbih0aGlzLnJlcG9zaXRvcnkubW9kZWwpLCBvcmRlci5kaXJlY3Rpb24udG9VcHBlckNhc2UoKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yZGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZXJDdXN0b21BdHRyaWJ1dGUob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdLCBkYXRhPzogb2JqZWN0KTogUHJvamVjdGlvbkFsaWFzW10ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBQcm9qZWN0aW9uQWxpYXNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VzdG9tQXR0cmlidXRlID0gdGhpcy5yZXBvc2l0b3J5LmdldEN1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gY3VzdG9tQXR0cmlidXRlLnRyYW5zZm9ybShkYXRhKSBhcyBQcm9qZWN0aW9uQWxpYXM7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGREZWZhdWx0RmlsdGVyKHF1ZXJ5OiBRdWVyeU1vZGVsKTogUXVlcnlNb2RlbCB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5kZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kZWZhdWx0RmlsdGVyLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJhbmRcIikge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IFwiYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBbcXVlcnldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChxdWVyeT8uY29uZGl0aW9uICE9PSBcIm9yXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcIm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBbcXVlcnldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWVyeS5ydWxlcy5wdXNoKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5maWx0ZXIpO1xuICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVPcmRlcihvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10pOiBPcmRlck1vZGVsW10ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBvcmRlcnMgPSBvcmRlcnM/LmZpbHRlcihvcmRlciA9PiBvcmRlcj8uY29sdW1uKTtcblxuICAgICAgICBpZiAoIW9yZGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbe1xuICAgICAgICAgICAgICAgIGNvbHVtbjogXCJpZFwiLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhc2NcIlxuICAgICAgICAgICAgfV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JkZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Tm9uTmVzdGVkT3JkZXJDb2x1bW5zKG9yZGVyczogT3JkZXJNb2RlbFtdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gb3JkZXJzLmZpbHRlcihvcmRlciA9PiBvcmRlci5jb2x1bW4gJiYgIW9yZGVyLmNvbHVtbi5pbmNsdWRlcyhcIi5cIikpLm1hcChvcmRlciA9PiBvcmRlci5jb2x1bW4pO1xuICAgIH1cbn1cbiJdfQ==
578
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUNqRSxzRUFBaUU7QUFDakUsZ0VBQTJEO0FBRzNELGlGQUE0RTtBQUM1RSx3REFBdUQ7QUFDdkQsK0NBQTJDO0FBQzNDLGlEQUE2QztBQUM3Qyx1Q0FPbUI7QUFDbkIsK0VBQTBFO0FBQzFFLHlEQUE0RTtBQUs1RSx5REFBMEU7QUFHbkUsSUFBTSxhQUFhLHFCQUFuQixNQUFNLGFBQWE7SUFLdEIsWUFDWSxvQkFBMEMsRUFDMUMsZ0JBQWtDLEVBQ2xDLEtBQXVCLEVBQ3ZCLHFCQUE0QyxFQUM1QyxVQUE2QixFQUM3QixPQUE0QztRQUw1Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQUM3QixZQUFPLEdBQVAsT0FBTyxDQUFxQztRQUVwRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBSSxPQUFnQjtRQUM5QixPQUFPLElBQUksZUFBYSxDQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckI7WUFDSSxHQUFHLElBQUksQ0FBQyxLQUFLO1lBQ2IsY0FBYyxFQUFFLE9BQU87U0FDRSxFQUM3QixJQUFJLENBQUMscUJBQXFCLEVBQzFCLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBWSxFQUFFLElBQTBCO1FBQzNELE1BQU0sTUFBTSxHQUErQixF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M0Isd0JBQVU7UUFDTSwrQ0FBcUI7UUFDaEMsdUNBQWlCO0dBVmhDLGFBQWEsQ0E4cEJ6QjtBQTlwQlksc0NBQWEiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7XG4gICAgQ291bnRPcHRpb25zLFxuICAgIEZpbmRPcHRpb25zLFxuICAgIEluY2x1ZGVhYmxlLFxuICAgIEluY2x1ZGVPcHRpb25zLFxuICAgIGxpdGVyYWwsXG4gICAgT3AsXG4gICAgT3JkZXIsXG4gICAgT3JkZXJJdGVtLFxuICAgIFdoZXJlT3B0aW9uc1xufSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiwgUHJvamVjdGlvbkFsaWFzIH0gZnJvbSBcInNlcXVlbGl6ZS90eXBlcy9tb2RlbFwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMsIEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclJlc3VsdE1vZGVsLCBGaWx0ZXJTZWFyY2hNb2RlbCwgT3JkZXJNb2RlbCB9IGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL2FjY2Vzcy1jb250cm9sLmFkYXB0ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJSZXBvc2l0b3J5IH0gZnJvbSBcIi4uL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnlcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL2RhdGEtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IEluY2x1ZGVXaGVyZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9pbmNsdWRlLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyVXNlck1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy91c2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi4vc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXJcIjtcbmltcG9ydCB7IE0sIFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgQmFzZUZpbHRlciB9IGZyb20gXCIuL2Jhc2UtZmlsdGVyXCI7XG5pbXBvcnQgeyBGaWx0ZXJVdGlscyB9IGZyb20gXCIuL2ZpbHRlci51dGlsc1wiO1xuaW1wb3J0IHtcbiAgICBGaWx0ZXIsXG4gICAgRmlsdGVyQ29uZGl0aW9uLFxuICAgIEZpbHRlckNvbmRpdGlvblJ1bGUsXG4gICAgRmlsdGVyRGVmaW5pdGlvbixcbiAgICBTZWxlY3RGaWx0ZXIsXG4gICAgU2VsZWN0RmlsdGVyVmFsdWVcbn0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgR2VvTG9jYWxpemF0aW9uRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVycy9nZW8tbG9jYWxpemF0aW9uLmZpbHRlclwiO1xuaW1wb3J0IHsgR3JvdXBGaWx0ZXIsIEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCIuL2ZpbHRlcnMvZ3JvdXAuZmlsdGVyXCI7XG5pbXBvcnQgeyBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLXJlc291cmNlLXZhbHVlLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlclJ1bGUsIE9yZGVyUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9vcmRlci1ydWxlcy9vcmRlci1ydWxlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlPERhdGE+IHtcbiAgICBwcml2YXRlIGRlZmluaXRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBGaWx0ZXJEZWZpbml0aW9uIHwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIHwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9O1xuICAgIHByaXZhdGUgcmVwb3NpdG9yeTogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT47XG4gICAgcHJpdmF0ZSBleHBvcnRSZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBCYXNlRmlsdGVyPERhdGE+LFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXI6IERhdGFGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG9wdGlvbnM/OiB7IGRpc2FibGVBY2Nlc3NDb250cm9sPzogYm9vbGVhbiB9XG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEYXRhPFQ+KGRhdGFEZWY6IFR5cGU8VD4pOiBGaWx0ZXJTZXJ2aWNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIGRhdGFEZWZpbml0aW9uOiBkYXRhRGVmXG4gICAgICAgICAgICB9IGFzIHVua25vd24gYXMgQmFzZUZpbHRlcjxUPixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZyhyZXF1ZXN0OiBhbnksIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IE9yZGVyUnVsZS52YWxpZGF0ZSh0aGlzLmRlZmluaXRpb25zW2tleV0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKS5nZXRDb25maWcoa2V5LCByZXF1ZXN0LCB1c2VyKTtcbiAgICAgICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy50cmFuc2xhdGVBZGFwdGVyLmdldFRyYW5zbGF0aW9uKHVzZXIubGFuZ3VhZ2UsIEZpbHRlclV0aWxzLmdldEZpbHRlclRyYW5zbGF0aW9uS2V5KGtleSkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaENvbmZpZ1ZhbHVlcyhcbiAgICAgICAgcmVxdWVzdDogYW55LFxuICAgICAgICBzZWFyY2g6IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCxcbiAgICAgICAgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWxcbiAgICApOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlW10+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHNlYXJjaC5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbc2VhcmNoLmlkXTtcbiAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFNlbGVjdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci52YWx1ZXMoeyB2YWx1ZTogc2VhcmNoLnZhbHVlLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kUmVzb3VyY2VWYWx1ZUJ5SWQocmVxdWVzdDogYW55LCBzZWFyY2g6IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyICYmIGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIuZ2V0UmVzb3VyY2VCeUlkKHsgaWQ6IHNlYXJjaC5yZXNvdXJjZUlkLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudChvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudCguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgY291bnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIob3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsP10pOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnksIG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGNvdW50T3B0aW9ucywgb3B0aW9ucy5kYXRhKTtcbiAgICAgICAgdGhpcy5hZGRHcm91cE9wdGlvbihvcHRpb25zLm9yZGVyLCBjb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgKHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgY291bnRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCxcbiAgICAgICAgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIGV4cG9ydE9wdGlvbnM/OiBvYmplY3RcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5leHBvcnRSZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5KTtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgZmluZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGZpbmRPcHRpb25zLCBvcHRpb25zLmRhdGEpO1xuICAgICAgICBkZWxldGUgb3B0aW9ucy5wYWdlO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCAodXNlciA/IHRoaXMuZmluZFZhbHVlcyh1c2VyLCBvcHRpb25zLCBmaW5kT3B0aW9ucywgdGhpcy5leHBvcnRSZXBvc2l0b3J5KSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBmaW5kT3B0aW9ucywgdGhpcy5leHBvcnRSZXBvc2l0b3J5KSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLm1vZGVsLmdldEV4cG9ydGVkRmllbGRzS2V5cyh0eXBlKTtcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMubW9kZWwuZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgdHlwZSkpKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZG93bmxvYWREYXRhKGhlYWRlcnMsIGRhdGEsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YSh2YWx1ZXMsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmluZE9wdGlvbnMobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8RmluZE9wdGlvbnM+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlc2V0IEdlbyBsb2NhbGl6YXRpb24gZmlsdGVyIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIucmVzZXQoKTtcblxuICAgICAgICBxdWVyeSA9IHRoaXMuYWRkRGVmYXVsdEZpbHRlcihxdWVyeSk7XG4gICAgICAgIGxldCBvcHRpb246IEZpbmRPcHRpb25zID0ge307XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gW107XG4gICAgICAgICAgICBjb25zdCBoYXZpbmdDb25kaXRpb25zID0gW107XG5cbiAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBxdWVyeSwgZGF0YSksXG4gICAgICAgICAgICAgICAgd2hlcmU6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IHdoZXJlQ29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiB3aGVyZUNvbmRpdGlvbnMgfSxcbiAgICAgICAgICAgICAgICBoYXZpbmc6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGhhdmluZ0NvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogaGF2aW5nQ29uZGl0aW9ucyB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbm9pZCA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnksIHdoZXJlQ29uZGl0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeSwgaGF2aW5nQ29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmICghcGFyYW5vaWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24ucGFyYW5vaWQgPSBwYXJhbm9pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXZpbmdDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb24uaGF2aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHRoaXMuZGF0YUZpbHRlci5mb3IodGhpcy5tb2RlbC5kYXRhRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuZXhwb3J0UmVwb3NpdG9yeSA9IHRoaXMuZGF0YUZpbHRlci5mb3IodGhpcy5tb2RlbC5leHBvcnREYXRhRGVmaW5pdGlvbiA/PyB0aGlzLm1vZGVsLmRhdGFEZWZpbml0aW9uKTtcbiAgICAgICAgdGhpcy5tb2RlbC50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy50cmFuc2xhdGVBZGFwdGVyO1xuXG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFGaWx0ZXIudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIEZpbHRlckRlZmluaXRpb24pICYmXG4gICAgICAgICAgICAgICAgIUdyb3VwRmlsdGVyLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pICYmXG4gICAgICAgICAgICAgICAgIU9yZGVyUnVsZS52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRlZmluaXRpb25zW2tleV0gPSB0aGlzLm1vZGVsW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0SW5jbHVkZShtb2RlbDogdHlwZW9mIE0sIHF1ZXJ5OiBRdWVyeU1vZGVsLCBkYXRhPzogb2JqZWN0KTogUHJvbWlzZTxJbmNsdWRlYWJsZVtdPiB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBtID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKG0uY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaChhd2FpdCB0aGlzLmdldEluY2x1ZGUobW9kZWwsIG0sIGRhdGEpIGFzIEluY2x1ZGVPcHRpb25zW10pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdO1xuICAgICAgICAgICAgaWYgKChmaWx0ZXIgYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKS5yb290RmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IGZpbHRlciBhcyBHcm91cEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGYucm9vdEZpbHRlciwgciwgZGF0YSkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmLmxhenlMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmLnZhbHVlRmlsdGVyLCByLCBkYXRhKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWVGaWxlciA9IGF3YWl0IGYuZ2V0VmFsdWVGaWx0ZXIoci52YWx1ZVswXSk7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCB2YWx1ZUZpbGVyIGFzIEZpbHRlckRlZmluaXRpb24sIHIsIGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmaWx0ZXIgYXMgRmlsdGVyRGVmaW5pdGlvbiwgciwgZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhpbmNsdWRlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgY29uZGl0aW9uOiBGaWx0ZXJDb25kaXRpb24pOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBjb25kaXRpb24ucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBjb25kaXRpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBpZiAoci5wYXRoKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwgeyBwYXRoOiByLnBhdGggfSwgW10sIHsgaW5jbHVkZTogW10gfSwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmNsdWRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5OiBRdWVyeU1vZGVsLCBvcHRpb25zOiBXaGVyZU9wdGlvbnNbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyYW5vaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IE9wLmFuZCA6IE9wLm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdoZXJlID0geyBbb3BdOiBjb25kaXRpb25zIH07XG4gICAgICAgICAgICAgICAgcGFyYW5vaWQgPSBwYXJhbm9pZCAmJiBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKGMsIGNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdoZXJlW29wIGFzIGFueV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaCh3aGVyZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghT3JkZXJSdWxlLnZhbGlkYXRlKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gYXdhaXQgZmlsdGVyLmdldFdoZXJlT3B0aW9ucyhyKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChmaWx0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbm9pZCA9IGZpbHRlci5wYXJhbm9pZCA/PyB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFub2lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVIYXZpbmdPcHRpb25zKHF1ZXJ5OiBRdWVyeU1vZGVsLCBvcHRpb25zOiBXaGVyZU9wdGlvbnNbXSkge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IE9wLmFuZCA6IE9wLm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhdmluZyA9IHsgW29wXTogY29uZGl0aW9ucyB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVIYXZpbmdPcHRpb25zKGMsIGNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhhdmluZ1tvcCBhcyBhbnldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goaGF2aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFPcmRlclJ1bGUudmFsaWRhdGUoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBhd2FpdCBmaWx0ZXIuZ2V0SGF2aW5nT3B0aW9ucyhyKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goZmlsdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBGaWx0ZXJTZWFyY2hNb2RlbCwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2VhcmNoPy52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKCF2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcG9zaXRvcnkuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaC52YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRPcmRlckNvbmRpdGlvbihvcmRlcnM6IE9yZGVyTW9kZWxbXSwgb3B0aW9uczogQ291bnRPcHRpb25zLCBkYXRhPzogb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGlmIChvcmRlcnMuZXZlcnkob3JkZXIgPT4gIW9yZGVyLmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcmRlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlcilcbiAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlclxuICAgICAgICAgICAgICAgIDogW3RoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlcl07XG5cbiAgICAgICAgICAgIG9yZGVycyA9IFsuLi5kZWZhdWx0T3JkZXJzLCAuLi5vcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVzID0gcnVsZSAmJiBPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkgP1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgeyBwYXRoOiBydWxlLnBhdGggfSwgW10pIDpcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkuZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXIsIGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9ucyB8IEluY2x1ZGVPcHRpb25zW10sXG4gICAgICAgICAgICAgICAgaW5jbHVkZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cE9wdGlvbihvcmRlcnM6IE9yZGVyTW9kZWxbXSwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yZXBvc2l0b3J5Lm1vZGVsO1xuICAgICAgICBvcHRpb25zLmdyb3VwID0gW2Ake21vZGVsLm5hbWV9LmlkYF07XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmIChydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goYCR7bW9kZWwubmFtZX0uJHtTZXF1ZWxpemVVdGlscy5maW5kQ29sdW1uRmllbGROYW1lKG1vZGVsLCBjb2x1bW4pfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0R3JvdXAobW9kZWwsIG9yZGVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXModXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucz9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmluZE9wdGlvbnM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBjb3VudFRvdGFsVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbihvcHRpb25zLndoZXJlLCB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXZpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuY291bnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pIGFzIGFueTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPih1c2VyOiBVc2VycywgZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucywgcmVwb3NpdG9yeT86IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+KTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KGZpbHRlcjogRmlsdGVyUXVlcnlNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMsIHJlcG9zaXRvcnk/OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPik6IFByb21pc2U8RGF0YVtdPjtcbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPiguLi5hcmdzOiBbVXNlcnMgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsIHwgRmluZE9wdGlvbnMsIEZpbmRPcHRpb25zIHwgRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT4sIERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+P10pOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT0ZpbHRlciwgZmlsdGVyT3JPcHQsIG9wdE9yUmVwbywgcmVwb10gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRPclJlcG9Jc1JlcG8gPSBvcHRPclJlcG8gaW5zdGFuY2VvZiBEYXRhRmlsdGVyUmVwb3NpdG9yeTtcblxuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0T3JSZXBvICYmICFvcHRPclJlcG9Jc1JlcG8gPyBvcHRPclJlcG8gOiBmaWx0ZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcbiAgICAgICAgY29uc3QgZmlsdGVyID0gb3B0T3JSZXBvICYmICFvcHRPclJlcG9Jc1JlcG8gPyBmaWx0ZXJPck9wdCBhcyBGaWx0ZXJRdWVyeU1vZGVsIDogdXNlck9yT0ZpbHRlciBhcyBGaWx0ZXJRdWVyeU1vZGVsO1xuXG4gICAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSByZXBvID8/IChvcHRPclJlcG9Jc1JlcG8gPyBvcHRPclJlcG8gOiB0aGlzLnJlcG9zaXRvcnkpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIG1lYW5zIHRoYXQgZmluZFZhbHVlcyB3YXMgY2FsbGVkIHdpdGggYSB1c2VyXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocmVwbykge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9GaWx0ZXIgYXMgVXNlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldE9yZGVyT3B0aW9ucyhmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKTtcblxuICAgICAgICBjb25zdCBub25OZXN0ZWRPcmRlckNvbHVtbnMgPSAoZmlsdGVyLm9yZGVyIGFzIE9yZGVyTW9kZWxbXSlcbiAgICAgICAgICAgIC5tYXAob3JkZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIXJ1bGUgfHwgIU9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbcnVsZS5wYXRoID8/IFwiXCIsIHJ1bGUuYXR0cmlidXRlXS5qb2luKFwiLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uICYmICFjb2x1bW4uaW5jbHVkZXMoXCIuXCIpICYmICFyZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShjb2x1bW4pKTtcbiAgICAgICAgY29uc3QgY3VzdG9tQXR0cmlidXRlcyA9IHRoaXMuZ2V0T3JkZXJDdXN0b21BdHRyaWJ1dGUoZmlsdGVyLm9yZGVyIGFzIE9yZGVyTW9kZWxbXSwgZmlsdGVyLmRhdGEpO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1wiaWRcIiwgLi4ubm9uTmVzdGVkT3JkZXJDb2x1bW5zLCAuLi5jdXN0b21BdHRyaWJ1dGVzXSxcbiAgICAgICAgICAgIGxpbWl0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLnNpemUgOiBudWxsLFxuICAgICAgICAgICAgb2Zmc2V0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLm51bWJlciAqIGZpbHRlci5wYWdlLnNpemUgKyAoZmlsdGVyLnBhZ2Uub2Zmc2V0ID8/IDApIDogbnVsbCxcbiAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZW5lcmF0ZVJlcG9zaXRvcnlHcm91cEJ5KGZpbHRlcik7XG4gICAgICAgIHJldHVybiBhd2FpdCByZXBvc2l0b3J5LmZpbmRBbGwoe1xuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICBpZDogdmFsdWVzLm1hcCh4ID0+IHguaWQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3JkZXIsXG4gICAgICAgICAgICBwYXJhbm9pZDogb3B0aW9ucy5wYXJhbm9pZCxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgIH0sIGZpbHRlci5kYXRhID8/IHt9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbih3aGVyZTogV2hlcmVPcHRpb25zLCB1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8uZGlzYWJsZUFjY2Vzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiB3aGVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdXNlciBmb3VuZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzQ29udHJvbCBpc24ndCBlbmFibGUgaW4geW91ciBwcm9qZWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUgPz8ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZXMud2hlcmUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICB3aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmNsdWRlKFxuICAgICAgICBtb2RlbDogdHlwZW9mIE0sXG4gICAgICAgIGZpbHRlcjogRmlsdGVyRGVmaW5pdGlvbixcbiAgICAgICAgcnVsZTogUXVlcnlSdWxlTW9kZWwsXG4gICAgICAgIGRhdGE/OiBvYmplY3RcbiAgICApOiBJbmNsdWRlT3B0aW9uc1tdW10ge1xuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXVtdID0gW107XG4gICAgICAgIGNvbnN0IHBhdGhzID0gZmlsdGVyLmdldEluY2x1ZGVQYXRocyhydWxlLCBkYXRhKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICBpbmNsdWRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCBwYXRoLCBbXSwgW10sIHRydWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaWx0ZXIucGF0aCkge1xuICAgICAgICAgICAgaW5jbHVkZXMucHVzaCh0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pKTtcbiAgICAgICAgICAgIHJldHVybiBpbmNsdWRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5pbmNsdWRlcyxcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7XG4gICAgICAgICAgICAgICAgcGF0aDogZmlsdGVyLnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IGZpbHRlci5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICB3aGVyZTogRmlsdGVyVXRpbHMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoZmlsdGVyLndoZXJlLCBkYXRhKVxuICAgICAgICAgICAgfSwgW10sIFtdLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbilcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyT3B0aW9ucyhvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10pOiBPcmRlciB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbb3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRlZmF1bHRPcmRlclJ1bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcmRlcnMgPSBBcnJheS5pc0FycmF5KHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlcilcbiAgICAgICAgICAgICAgICA/IHRoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlclxuICAgICAgICAgICAgICAgIDogW3RoaXMubW9kZWwuZGVmYXVsdE9yZGVyUnVsZS5vcmRlcl07XG5cbiAgICAgICAgICAgIG9yZGVycyA9IFsuLi5kZWZhdWx0T3JkZXJzLCAuLi5vcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVkT3JkZXI6IE9yZGVyID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGlmICghb3JkZXI/LmNvbHVtbiB8fCAhb3JkZXIuZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBvcmRlci5udWxsTGFzdCA/IGAtJHtvcmRlci5jb2x1bW59YCA6IG9yZGVyLmNvbHVtbjtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBvcmRlci5udWxsTGFzdCA/IG9yZGVyLmRpcmVjdGlvbiA9PT0gXCJhc2NcIiA/IFwiZGVzY1wiIDogXCJhc2NcIiA6IG9yZGVyLmRpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRPcmRlci5wdXNoKFtsaXRlcmFsKGNvbHVtbiksIGRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghcnVsZSB8fCAhT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaCh0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRPcmRlcih0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9yZGVyKSBhcyBPcmRlckl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRPcmRlci5wdXNoKFtydWxlLmdldE9yZGVyT3B0aW9uKHRoaXMucmVwb3NpdG9yeS5tb2RlbCksIG9yZGVyLmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JkZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlckN1c3RvbUF0dHJpYnV0ZShvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10sIGRhdGE/OiBvYmplY3QpOiBQcm9qZWN0aW9uQWxpYXNbXSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbb3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFByb2plY3Rpb25BbGlhc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXN0b21BdHRyaWJ1dGUgPSB0aGlzLnJlcG9zaXRvcnkuZ2V0Q3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbik7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBjdXN0b21BdHRyaWJ1dGUudHJhbnNmb3JtKGRhdGEpIGFzIFByb2plY3Rpb25BbGlhcztcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlUmVwb3NpdG9yeUdyb3VwQnkoZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsKTogR3JvdXBPcHRpb24gfCBudWxsIHtcbiAgICAgICAgY29uc3QgZ3JvdXA6IEdyb3VwT3B0aW9uID0gW107XG4gICAgICAgIGlmIChmaWx0ZXIuZ3JvdXBCeSkge1xuICAgICAgICAgICAgZ3JvdXAucHVzaChTZXF1ZWxpemVVdGlscy5nZXRHcm91cExpdGVyYWwodGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBmaWx0ZXIuZ3JvdXBCeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBCeSA9IHRoaXMucmVwb3NpdG9yeS5nZXRDdXN0b21BdHRyaWJ1dGVHcm91cEJ5KCk7XG4gICAgICAgIGlmICghZ3JvdXBCeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdyb3VwLnB1c2goLi4uZ3JvdXBCeSk7XG4gICAgICAgIGlmICghZmlsdGVyLm9yZGVyIHx8IChmaWx0ZXIub3JkZXIgaW5zdGFuY2VvZiBBcnJheSAmJiAhZmlsdGVyLm9yZGVyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9yZGVycyA9IHRoaXMubm9ybWFsaXplT3JkZXIoZmlsdGVyLm9yZGVyKTtcbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGlmICghb3JkZXI/LmNvbHVtbiB8fCAhb3JkZXIuZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFydWxlIHx8ICFPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5wdXNoKGAke3RoaXMucmVwb3NpdG9yeS5tb2RlbC5uYW1lfS4ke1NlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUodGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcmRlci5jb2x1bW4pfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncm91cC5wdXNoKC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEdyb3VwKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3JkZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZERlZmF1bHRGaWx0ZXIocXVlcnk6IFF1ZXJ5TW9kZWwpOiBRdWVyeU1vZGVsIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeT8uY29uZGl0aW9uICE9PSBcImFuZFwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJhbmRcIixcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IFtxdWVyeV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwib3JcIikge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IFwib3JcIixcbiAgICAgICAgICAgICAgICAgICAgcnVsZXM6IFtxdWVyeV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXJ5LnJ1bGVzLnB1c2godGhpcy5tb2RlbC5kZWZhdWx0RmlsdGVyLmZpbHRlcik7XG4gICAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5vcm1hbGl6ZU9yZGVyKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSk6IE9yZGVyTW9kZWxbXSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbb3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9yZGVycyA9IG9yZGVycz8uZmlsdGVyKG9yZGVyID0+IG9yZGVyPy5jb2x1bW4pO1xuXG4gICAgICAgIGlmICghb3JkZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFt7XG4gICAgICAgICAgICAgICAgY29sdW1uOiBcImlkXCIsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBcImFzY1wiXG4gICAgICAgICAgICB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcmRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROb25OZXN0ZWRPcmRlckNvbHVtbnMob3JkZXJzOiBPcmRlck1vZGVsW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBvcmRlcnMuZmlsdGVyKG9yZGVyID0+IG9yZGVyLmNvbHVtbiAmJiAhb3JkZXIuY29sdW1uLmluY2x1ZGVzKFwiLlwiKSkubWFwKG9yZGVyID0+IG9yZGVyLmNvbHVtbik7XG4gICAgfVxufVxuIl19
@@ -22,7 +22,7 @@ export interface JsonConfig {
22
22
  type: "array" | "object";
23
23
  path?: string;
24
24
  }
25
- export declare type PathCondition = boolean | {
25
+ export type PathCondition = boolean | {
26
26
  [filter: string]: any;
27
27
  };
28
28
  export interface EnabledConfig<User = any, Request = any> {