@ngx-formly/core 5.10.27 → 5.10.31

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 (47) hide show
  1. package/README.md +10 -8
  2. package/bundles/ngx-formly-core-json-schema.umd.js +6 -2
  3. package/bundles/ngx-formly-core-json-schema.umd.js.map +1 -1
  4. package/bundles/ngx-formly-core-json-schema.umd.min.js +1 -1
  5. package/bundles/ngx-formly-core-json-schema.umd.min.js.map +1 -1
  6. package/bundles/ngx-formly-core.umd.js +89 -142
  7. package/bundles/ngx-formly-core.umd.js.map +1 -1
  8. package/bundles/ngx-formly-core.umd.min.js +1 -1
  9. package/bundles/ngx-formly-core.umd.min.js.map +1 -1
  10. package/esm2015/json-schema/formly-json-schema.service.js +8 -4
  11. package/esm2015/lib/components/formly.attributes.js +33 -24
  12. package/esm2015/lib/core.js +2 -2
  13. package/esm2015/lib/extensions/core/core.js +2 -1
  14. package/esm2015/lib/extensions/field-expression/field-expression.js +3 -6
  15. package/esm2015/lib/extensions/field-form/field-form.js +16 -51
  16. package/esm2015/lib/extensions/field-form/utils.js +9 -3
  17. package/esm2015/lib/services/formly.form.builder.js +3 -3
  18. package/esm2015/lib/templates/formly.validation-message.js +14 -3
  19. package/esm2015/lib/utils.js +16 -41
  20. package/esm2015/ngx-formly-core.js +2 -2
  21. package/esm2015/public_api.js +2 -2
  22. package/esm5/json-schema/formly-json-schema.service.js +8 -4
  23. package/esm5/lib/components/formly.attributes.js +32 -21
  24. package/esm5/lib/core.js +2 -2
  25. package/esm5/lib/extensions/core/core.js +2 -1
  26. package/esm5/lib/extensions/field-expression/field-expression.js +3 -6
  27. package/esm5/lib/extensions/field-form/field-form.js +16 -51
  28. package/esm5/lib/extensions/field-form/utils.js +10 -3
  29. package/esm5/lib/services/formly.form.builder.js +3 -3
  30. package/esm5/lib/templates/formly.validation-message.js +15 -3
  31. package/esm5/lib/utils.js +19 -58
  32. package/esm5/ngx-formly-core.js +2 -2
  33. package/esm5/public_api.js +2 -2
  34. package/fesm2015/ngx-formly-core-json-schema.js +7 -3
  35. package/fesm2015/ngx-formly-core-json-schema.js.map +1 -1
  36. package/fesm2015/ngx-formly-core.js +87 -124
  37. package/fesm2015/ngx-formly-core.js.map +1 -1
  38. package/fesm5/ngx-formly-core-json-schema.js +7 -3
  39. package/fesm5/ngx-formly-core-json-schema.js.map +1 -1
  40. package/fesm5/ngx-formly-core.js +92 -139
  41. package/fesm5/ngx-formly-core.js.map +1 -1
  42. package/json-schema/ngx-formly-core-json-schema.metadata.json +1 -1
  43. package/lib/core.d.ts +1 -1
  44. package/lib/extensions/field-form/utils.d.ts +1 -1
  45. package/lib/utils.d.ts +1 -2
  46. package/ngx-formly-core.metadata.json +1 -1
  47. package/package.json +1 -1
@@ -5,7 +5,7 @@
5
5
  import * as tslib_1 from "tslib";
6
6
  import { Injectable } from '@angular/core';
7
7
  import { FormGroup } from '@angular/forms';
8
- import { ɵreverseDeepMerge as reverseDeepMerge, ɵgetFieldInitialValue as getFieldInitialValue, ɵclone as clone, } from '@ngx-formly/core';
8
+ import { ɵreverseDeepMerge as reverseDeepMerge, ɵgetFieldValue as getFieldValue, ɵclone as clone, } from '@ngx-formly/core';
9
9
  import { tap } from 'rxjs/operators';
10
10
  import * as i0 from "@angular/core";
11
11
  /**
@@ -67,14 +67,18 @@ function isConst(schema) {
67
67
  */
68
68
  function totalMatchedFields(field) {
69
69
  if (!field.fieldGroup) {
70
- return field.key && getFieldInitialValue(field) !== undefined ? 1 : 0;
70
+ return field.key && getFieldValue(field) !== undefined ? 1 : 0;
71
71
  }
72
- return field.fieldGroup.reduce((/**
72
+ /** @type {?} */
73
+ const total = field.fieldGroup.reduce((/**
73
74
  * @param {?} s
74
75
  * @param {?} f
75
76
  * @return {?}
76
77
  */
77
78
  (s, f) => totalMatchedFields(f) + s), 0);
79
+ return total === 0
80
+ ? field.key && getFieldValue(field) !== undefined ? 1 : 0
81
+ : total;
78
82
  }
79
83
  /**
80
84
  * @record
@@ -765,4 +769,4 @@ FormlyJsonschema.decorators = [
765
769
  { type: Injectable, args: [{ providedIn: 'root' },] }
766
770
  ];
767
771
  /** @nocollapse */ FormlyJsonschema.ngInjectableDef = i0.defineInjectable({ factory: function FormlyJsonschema_Factory() { return new FormlyJsonschema(); }, token: FormlyJsonschema, providedIn: "root" });
768
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlL2pzb24tc2NoZW1hLyIsInNvdXJjZXMiOlsiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGlCQUFpQixJQUFJLGdCQUFnQixFQUNyQyxxQkFBcUIsSUFBSSxvQkFBb0IsRUFDN0MsTUFBTSxJQUFJLEtBQUssR0FDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXJDLDZDQU9DOzs7Ozs7OztJQURDLHNDQUFvRjs7Ozs7OztBQUl0RixTQUFTLGFBQWEsQ0FBQyxDQUFTO0lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEIsT0FBTyxDQUFDLENBQUM7S0FDVjs7UUFFRyxDQUFDLEdBQUcsQ0FBQzs7UUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQUMsQ0FBQyxFQUFFLENBQUM7S0FBRTtJQUVyRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7Ozs7O0FBRUQsU0FBUyxPQUFPLENBQUMsQ0FBTTtJQUNyQixPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ25ELENBQUM7Ozs7O0FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBTTtJQUN0QixPQUFPLENBQUMsSUFBSSxJ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S0FBSyxDQUFDO0lBQ3BCLENBQUM7Ozs7Ozs7SUFFTyxXQUFXLENBQUMsRUFBcUIsRUFBRSxFQUFxQjtRQUM5RCxLQUFLLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUNuQixJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNqRDtpQkFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckI7U0FDRjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7O1lBdGZGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcsIEpTT05TY2hlbWE3VHlwZU5hbWUgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIMm1cmV2ZXJzZURlZXBNZXJnZSBhcyByZXZlcnNlRGVlcE1lcmdlLFxuICDJtWdldEZpZWxkSW5pdGlhbFZhbHVlIGFzIGdldEZpZWxkSW5pdGlhbFZhbHVlLFxuICDJtWNsb25lIGFzIGNsb25lLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBhbGxvd3MgdG8gaW50ZXJjZXB0IHRoZSBtYXBwaW5nLCB0YWtpbmcgdGhlIGFscmVhZHkgbWFwcGVkXG4gICAqIGZvcm1seSBmaWVsZCBhbmQgdGhlIG9yaWdpbmFsIEpTT05TY2hlbWEgc291cmNlIGZyb20gd2hpY2ggaXRcbiAgICogd2FzIG1hcHBlZC5cbiAgICovXG4gIG1hcD86IChtYXBwZWRGaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG1hcFNvdXJjZTogSlNPTlNjaGVtYTcpID0+IEZvcm1seUZpZWxkQ29uZmlnO1xufVxuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc4NjUyODVcbmZ1bmN0aW9uIGRlY2ltYWxQbGFjZXMoYTogbnVtYmVyKSB7XG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBlID0gMSwgcCA9IDA7XG4gIHdoaWxlIChNYXRoLnJvdW5kKGEgKiBlKSAvIGUgIT09IGEpIHsgZSAqPSAxMDsgcCsrOyB9XG5cbiAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkodjogYW55KSB7XG4gIHJldHVybiB2ID09PSAnJyB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogYW55KSB7XG4gIHJldHVybiB2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnN0KHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgcmV0dXJuIHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSB8fCAoc2NoZW1hLmVudW0gJiYgc2NoZW1hLmVudW0ubGVuZ3RoID09PSAxKTtcbn1cblxuZnVuY3Rpb24gdG90YWxNYXRjaGVkRmllbGRzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IG51bWJlciB7XG4gIGlmICghZmllbGQuZmllbGRHcm91cCkge1xuICAgIHJldHVybiBmaWVsZC5rZXkgJiYgZ2V0RmllbGRJbml0aWFsVmFsdWUoZmllbGQpICE9PSB1bmRlZmluZWQgPyAxIDogMDtcbiAgfVxuXG4gIHJldHVybiBmaWVsZC5maWVsZEdyb3VwLnJlZHVjZSgocywgZikgPT4gdG90YWxNYXRjaGVkRmllbGRzKGYpICsgcywgMCk7XG59XG5cbmludGVyZmFjZSBJT3B0aW9ucyBleHRlbmRzIEZvcm1seUpzb25zY2hlbWFPcHRpb25zIHtcbiAgc2NoZW1hOiBKU09OU2NoZW1hNztcbiAgcmVzZXRPbkhpZGU/OiBib29sZWFuO1xuICBzaGFyZUZvcm1Db250cm9sPzogYm9vbGVhbjtcbiAgaWdub3JlRGVmYXVsdD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAga2V5PzogRm9ybWx5RmllbGRDb25maWdbJ2tleSddO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZvcm1seUpzb25zY2hlbWEge1xuICB0b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIG9wdGlvbnM/OiBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWEsIHsgc2NoZW1hLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIHsga2V5LCAuLi5vcHRpb25zIH06IElPcHRpb25zKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgIHR5cGU6IHRoaXMuZ3Vlc3NUeXBlKHNjaGVtYSksXG4gICAgICBkZWZhdWx0VmFsdWU6IHNjaGVtYS5kZWZhdWx0LFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBzY2hlbWEudGl0bGUsXG4gICAgICAgIHJlYWRvbmx5OiBzY2hlbWEucmVhZE9ubHksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzY2hlbWEuZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlRGVmYXVsdCAmJiAoc2NoZW1hLnJlYWRPbmx5IHx8IG9wdGlvbnMucmVhZE9ubHkpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgcmVhZE9ubHk6IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZXNldE9uSGlkZSkge1xuICAgICAgZmllbGRbJ3Jlc2V0T25IaWRlJ10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNoYXJlRm9ybUNvbnRyb2wgPT09IGZhbHNlKSB7XG4gICAgICBmaWVsZFsnc2hhcmVGb3JtQ29udHJvbCddID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRGVmYXVsdCkge1xuICAgICAgZGVsZXRlIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bGwnOiB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbnVsbCcsICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnaW50ZWdlcic6IHtcbiAgICAgICAgZmllbGQucGFyc2VycyA9IFt2ID0+IGlzRW1wdHkodikgPyAodiA9PT0gJycgPyBudWxsIDogdikgOiBOdW1iZXIodildO1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5pbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWluID0gc2NoZW1hLm1pbmltdW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhpbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWF4ID0gc2NoZW1hLm1heGltdW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNaW5pbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZXhjbHVzaXZlTWluaW11bSA9IHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnZXhjbHVzaXZlTWluaW11bScsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZSA+IHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNYXhpbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZXhjbHVzaXZlTWF4aW11bSA9IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnZXhjbHVzaXZlTWF4aW11bScsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZSA8IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtdWx0aXBsZU9mJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuc3RlcCA9IHNjaGVtYS5tdWx0aXBsZU9mO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbXVsdGlwbGVPZicsICh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IHZhbHVlID09PSAwIHx8IHNjaGVtYS5tdWx0aXBsZU9mIDw9IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvNjUyI2lzc3VlLTI4MzYxMDg1OVxuICAgICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKHNjaGVtYS5tdWx0aXBsZU9mKSk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIG11bHRpcGxpZXIpICUgTWF0aC5yb3VuZChzY2hlbWEubXVsdGlwbGVPZiAqIG11bHRpcGxpZXIpID09PSAwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICBjb25zdCBzY2hlbWFUeXBlID0gc2NoZW1hLnR5cGUgYXMgSlNPTlNjaGVtYTdUeXBlTmFtZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgJiYgKHNjaGVtYVR5cGUuaW5kZXhPZignbnVsbCcpICE9PSAtMSkpIHtcbiAgICAgICAgICBmaWVsZC5wYXJzZXJzID0gW3YgPT4gaXNFbXB0eSh2KSA/IG51bGwgOiB2XTtcbiAgICAgICAgfVxuXG4gICAgICAgIFsnbWluTGVuZ3RoJywgJ21heExlbmd0aCcsICdwYXR0ZXJuJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0gPSBzY2hlbWFbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAgIGZpZWxkLmZpZWxkR3JvdXAgPSBbXTtcblxuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaGVtYURlcHNdID0gdGhpcy5yZXNvbHZlRGVwZW5kZW5jaWVzKHNjaGVtYSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9KS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgICBjb25zdCBmID0gdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSwgeyAuLi5vcHRpb25zLCBrZXk6IHByb3BlcnR5IH0pO1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaChmKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShzY2hlbWEucmVxdWlyZWQpICYmIHNjaGVtYS5yZXF1aXJlZC5pbmRleE9mKHByb3BlcnR5KSAhPT0gLTEpXG4gICAgICAgICAgICB8fCBwcm9wRGVwc1twcm9wZXJ0eV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGYuZXhwcmVzc2lvblByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgIC4uLihmLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgICAgJ3RlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCc6IChtLCBzLCBmKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGYucGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZi5maWVsZEdyb3VwICYmIGYua2V5ICE9IG51bGwgPyBwYXJlbnQubW9kZWwgOiBmLm1vZGVsO1xuICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQua2V5ID09IG51bGwgJiYgcGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmVudCAmJiBwYXJlbnQudGVtcGxhdGVPcHRpb25zID8gcGFyZW50LnRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwgJiYgIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcERlcHNbcHJvcGVydHldICYmIChtICYmIHByb3BEZXBzW3Byb3BlcnR5XS5zb21lKGsgPT4gIWlzRW1wdHkobVtrXSkpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYURlcHNbcHJvcGVydHldKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb25zdFZhbHVlID0gKHM6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBzLmhhc093blByb3BlcnR5KCdjb25zdCcpID8gcy5jb25zdCA6IHMuZW51bVswXTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG9uZU9mU2NoZW1hID0gc2NoZW1hRGVwc1twcm9wZXJ0eV0ub25lT2Y7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9uZU9mU2NoZW1hXG4gICAgICAgICAgICAgICYmIG9uZU9mU2NoZW1hLmV2ZXJ5KG8gPT4gby5wcm9wZXJ0aWVzICYmIG8ucHJvcGVydGllc1twcm9wZXJ0eV0gJiYgaXNDb25zdChvLnByb3BlcnRpZXNbcHJvcGVydHldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBvbmVPZlNjaGVtYS5mb3JFYWNoKG9uZU9mU2NoZW1hSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBbcHJvcGVydHldOiBjb25zdFNjaGVtYSwgLi4ucHJvcGVydGllcyB9ID0gb25lT2ZTY2hlbWFJdGVtLnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoeyAuLi5vbmVPZlNjaGVtYUl0ZW0sIHByb3BlcnRpZXMgfSwgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGdldENvbnN0VmFsdWUoY29uc3RTY2hlbWEpICE9PSBtW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoc2NoZW1hRGVwc1twcm9wZXJ0eV0sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGlzRW1wdHkobVtwcm9wZXJ0eV0pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5vbmVPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdvbmVPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLm9uZU9mLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBzaGFyZUZvcm1Db250cm9sOiBmYWxzZSB9LFxuICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5hbnlPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdhbnlPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLmFueU9mLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5JdGVtcycpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbkl0ZW1zID0gc2NoZW1hLm1pbkl0ZW1zO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbWluSXRlbXMnLCAoeyB2YWx1ZSB9KSA9PiBpc0VtcHR5KHZhbHVlKSB8fCAodmFsdWUubGVuZ3RoID49IHNjaGVtYS5taW5JdGVtcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heEl0ZW1zJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWF4SXRlbXMgPSBzY2hlbWEubWF4SXRlbXM7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdtYXhJdGVtcycsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZS5sZW5ndGggPD0gc2NoZW1hLm1heEl0ZW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndW5pcXVlSXRlbXMnKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy51bmlxdWVJdGVtcyA9IHNjaGVtYS51bmlxdWVJdGVtcztcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ3VuaXF1ZUl0ZW1zJywgKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8ICFzY2hlbWEudW5pcXVlSXRlbXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUl0ZW1zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgbmV3IFNldCh2YWx1ZS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB1bmlxdWVJdGVtcy5sZW5ndGggPT09IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc29sdmUgaXRlbXMgc2NoZW1hIG5lZWRlZCBmb3IgaXNFbnVtIGNoZWNrXG4gICAgICAgIGlmIChzY2hlbWEuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IHRoaXMucmVzb2x2ZVNjaGVtYSg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgaXNFbnVtIGNoZWNrIG9uY2UgYWRkaW5nIGFuIG9wdGlvbiB0byBza2lwIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXRoaXMuaXNFbnVtKHNjaGVtYSkpIHtcbiAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnZmllbGRBcnJheScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoc2NoZW1hLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGl0ZW1zIGlzIGEgc2luZ2xlIHNjaGVtYSwgdGhlIGFkZGl0aW9uYWxJdGVtcyBrZXl3b3JkIGlzIG1lYW5pbmdsZXNzLCBhbmQgaXQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmZpZWxkR3JvdXAgPyB0aGlzLmZpZWxkR3JvdXAubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYS5pdGVtcyAmJiBzY2hlbWEuaXRlbXNbbGVuZ3RoXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBfdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtc1tsZW5ndGhdLCB7IC4uLm9wdGlvbnN9KTtcbiAgICAgICAgICAgICAgICBmLnRlbXBsYXRlT3B0aW9ucy5yZW1vdmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXNcbiAgICAgICAgICAgICAgICA/IF90aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IHt9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdjb25zdCcpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuY29uc3QgPSBzY2hlbWEuY29uc3Q7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ2NvbnN0JywgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHNjaGVtYS5jb25zdCk7XG4gICAgICBpZiAoIWZpZWxkLnR5cGUpIHtcbiAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlID0gc2NoZW1hLmNvbnN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRW51bShzY2hlbWEpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubXVsdGlwbGUgPSBmaWVsZC50eXBlID09PSAnYXJyYXknO1xuICAgICAgZmllbGQudHlwZSA9ICdlbnVtJztcbiAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5vcHRpb25zID0gdGhpcy50b0VudW1PcHRpb25zKHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gbWFwIGluIHBvc3NpYmxlIGZvcm1seUNvbmZpZyBvcHRpb25zIGZyb20gdGhlIHdpZGdldCBwcm9wZXJ0eVxuICAgIGlmIChzY2hlbWFbJ3dpZGdldCddICYmIHNjaGVtYVsnd2lkZ2V0J10uZm9ybWx5Q29uZmlnKSB7XG4gICAgICBmaWVsZCA9IHRoaXMubWVyZ2VGaWVsZHMoZmllbGQsIHNjaGVtYVsnd2lkZ2V0J10uZm9ybWx5Q29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBhIG1hcCBmdW5jdGlvbiBwYXNzZWQgaW4sIHVzZSBpdCB0byBhbGxvdyB0aGUgdXNlciB0b1xuICAgIC8vIGZ1cnRoZXIgY3VzdG9taXplIGhvdyBmaWVsZHMgYXJlIGJlaW5nIG1hcHBlZFxuICAgIHJldHVybiBvcHRpb25zLm1hcCA/IG9wdGlvbnMubWFwKGZpZWxkLCBzY2hlbWEpIDogZmllbGQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTY2hlbWEoc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpIHtcbiAgICBpZiAoc2NoZW1hICYmIHNjaGVtYS4kcmVmKSB7XG4gICAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVEZWZpbml0aW9uKHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYSAmJiBzY2hlbWEuYWxsT2YpIHtcbiAgICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZUFsbE9mKHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbE9mKHsgYWxsT2YsIC4uLmJhc2VTY2hlbWEgfTogSlNPTlNjaGVtYTcsIG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgaWYgKCFhbGxPZi5sZW5ndGgpIHtcbiAgICAgIHRocm93IEVycm9yKGBhbGxPZiBhcnJheSBjYW4gbm90IGJlIGVtcHR5ICR7YWxsT2Z9LmApO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxPZi5yZWR1Y2UoKGJhc2U6IEpTT05TY2hlbWE3LCBzY2hlbWE6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKTtcbiAgICAgIGlmIChiYXNlLnJlcXVpcmVkICYmIHNjaGVtYS5yZXF1aXJlZCkge1xuICAgICAgICBiYXNlLnJlcXVpcmVkID0gWy4uLmJhc2UucmVxdWlyZWQsIC4uLnNjaGVtYS5yZXF1aXJlZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMpIHtcbiAgICAgICAgYmFzZS51bmlxdWVJdGVtcyA9IHNjaGVtYS51bmlxdWVJdGVtcztcbiAgICAgIH1cblxuICAgICAgLy8gcmVzb2x2ZSB0byBtaW4gdmFsdWVcbiAgICAgIFsnbWF4TGVuZ3RoJywgJ21heGltdW0nLCAnZXhjbHVzaXZlTWF4aW11bScsICdtYXhJdGVtcycsICdtYXhQcm9wZXJ0aWVzJ11cbiAgICAgICAgLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgaWYgKCFpc0VtcHR5KGJhc2VbcHJvcF0pICYmICFpc0VtcHR5KHNjaGVtYVtwcm9wXSkpIHtcbiAgICAgICAgICAgIGJhc2VbcHJvcF0gPSBiYXNlW3Byb3BdIDwgc2NoZW1hW3Byb3BdID8gYmFzZVtwcm9wXSA6IHNjaGVtYVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyByZXNvbHZlIHRvIG1heCB2YWx1ZVxuICAgICAgWydtaW5MZW5ndGgnLCAnbWluaW11bScsICdleGNsdXNpdmVNaW5pbXVtJywgJ21pbkl0ZW1zJywgJ21pblByb3BlcnRpZXMnXVxuICAgICAgICAuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoIWlzRW1wdHkoYmFzZVtwcm9wXSkgJiYgIWlzRW1wdHkoc2NoZW1hW3Byb3BdKSkge1xuICAgICAgICAgICAgYmFzZVtwcm9wXSA9IGJhc2VbcHJvcF0gPiBzY2hlbWFbcHJvcF0gPyBiYXNlW3Byb3BdIDogc2NoZW1hW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXZlcnNlRGVlcE1lcmdlKGJhc2UsIHNjaGVtYSk7XG4gICAgfSwgYmFzZVNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVNdWx0aVNjaGVtYShcbiAgICBtb2RlOiAnb25lT2YnIHwgJ2FueU9mJyxcbiAgICBzY2hlbWFzOiBKU09OU2NoZW1hN1tdLFxuICAgIG9wdGlvbnM6IElPcHRpb25zLFxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdtdWx0aXNjaGVtYScsXG4gICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZW51bScsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiAtMSxcbiAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIG11bHRpcGxlOiBtb2RlID09PSAnYW55T2YnLFxuICAgICAgICAgICAgb3B0aW9uczogc2NoZW1hc1xuICAgICAgICAgICAgICAubWFwKChzLCBpKSA9PiAoeyBsYWJlbDogcy50aXRsZSwgdmFsdWU6IGksIGRpc2FibGVkOiBzLnJlYWRPbmx5IH0pKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBvbkluaXQ6IGYgPT4gZi5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+IChmLm9wdGlvbnMgYXMgYW55KS5fY2hlY2tGaWVsZChmLnBhcmVudCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGRHcm91cDogc2NoZW1hcy5tYXAoKHMsIGkpID0+ICh7XG4gICAgICAgICAgICAuLi50aGlzLl90b0ZpZWxkQ29uZmlnKHMsIHsgLi4ub3B0aW9ucywgcmVzZXRPbkhpZGU6IHRydWUgfSksXG4gICAgICAgICAgICBoaWRlRXhwcmVzc2lvbjogKG0sIGZzLCBmLCBmb3JjZVVwZGF0ZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGYucGFyZW50LnBhcmVudC5maWVsZEdyb3VwWzBdLmZvcm1Db250cm9sO1xuICAgICAgICAgICAgICBpZiAoKGNvbnRyb2wudmFsdWUgPT09IC0xKSB8fCBmb3JjZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGYucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGYsIGkpID0+IFtmLCBpXSBhcyBbRm9ybWx5RmllbGRDb25maWcsIG51bWJlcl0pXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChbZiwgaV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWVsZFZhbGlkKGYsIHNjaGVtYXNbaV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KChbZjFdLCBbZjJdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRGaWVsZHMxID0gdG90YWxNYXRjaGVkRmllbGRzKGYxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEZpZWxkczIgPSB0b3RhbE1hdGNoZWRGaWVsZHMoZjIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZEZpZWxkczEgPT09IG1hdGNoZWRGaWVsZHMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGYxLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCA9PT0gZjIudGVtcGxhdGVPcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjEudGVtcGxhdGVPcHRpb25zLmRpc2FibGVkID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRGaWVsZHMyID4gbWF0Y2hlZEZpZWxkczEgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLm1hcCgoWywgaV0pID0+IGkpXG4gICAgICAgICAgICAgICAgICA7XG5cbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2FueU9mJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGVmaW5lZFZhbHVlID0gdmFsdWUuZmlsdGVyKGkgPT4gdG90YWxNYXRjaGVkRmllbGRzKGYucGFyZW50LmZpZWxkR3JvdXBbaV0pKTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmaW5lZFZhbHVlLmxlbmd0aCA+IDAgPyBkZWZpbmVkVmFsdWUgOiBbdmFsdWVbMF0gfHwgMF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBbMF07XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShtb2RlID09PSAnYW55T2YnID8gdmFsdWUgOiB2YWx1ZVswXSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gY29udHJvbC52YWx1ZS5pbmRleE9mKGkpID09PSAtMVxuICAgICAgICAgICAgICAgIDogY29udHJvbC52YWx1ZSAhPT0gaTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVmaW5pdGlvbihzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zOiBJT3B0aW9ucyk6IEpTT05TY2hlbWE3IHtcbiAgICBjb25zdCBbdXJpLCBwb2ludGVyXSA9IHNjaGVtYS4kcmVmLnNwbGl0KCcjLycpO1xuICAgIGlmICh1cmkpIHtcbiAgICAgIHRocm93IEVycm9yKGBSZW1vdGUgc2NoZW1hcyBmb3IgJHtzY2hlbWEuJHJlZn0gbm90IHN1cHBvcnRlZCB5ZXQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9ICFwb2ludGVyID8gbnVsbCA6IHBvaW50ZXIuc3BsaXQoJy8nKS5yZWR1Y2UoXG4gICAgICAoZGVmLCBwYXRoKSA9PiBkZWYgJiYgZGVmLmhhc093blByb3BlcnR5KHBhdGgpID8gZGVmW3BhdGhdIDogbnVsbCxcbiAgICAgIG9wdGlvbnMuc2NoZW1hLFxuICAgICk7XG5cbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIHRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRlZmluaXRpb24gZm9yICR7c2NoZW1hLiRyZWZ9LmApO1xuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uLiRyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVEZWZpbml0aW9uKGRlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgLi4uWyd0aXRsZScsICdkZXNjcmlwdGlvbicsICdkZWZhdWx0JywgJ3dpZGdldCddLnJlZHVjZSgoYW5ub3RhdGlvbiwgcCkgPT4ge1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbltwXSA9IHNjaGVtYVtwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9uO1xuICAgICAgfSwge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEZXBlbmRlbmNpZXMoc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIGNvbnN0IGRlcHMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFEZXBzID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhzY2hlbWEuZGVwZW5kZW5jaWVzIHx8IHt9KS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHNjaGVtYS5kZXBlbmRlbmNpZXNbcHJvcF0gYXMgSlNPTlNjaGVtYTc7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgICAvLyBQcm9wZXJ0eSBkZXBlbmRlbmNpZXNcbiAgICAgICAgZGVwZW5kZW5jeS5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgaWYgKCFkZXBzW2RlcF0pIHtcbiAgICAgICAgICAgIGRlcHNbZGVwXSA9IFtwcm9wXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVwc1tkZXBdLnB1c2gocHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNjaGVtYSBkZXBlbmRlbmNpZXNcbiAgICAgICAgc2NoZW1hRGVwc1twcm9wXSA9IGRlcGVuZGVuY3k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW2RlcHMsIHNjaGVtYURlcHNdO1xuICB9XG5cbiAgcHJpdmF0ZSBndWVzc1R5cGUoc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEgPyBzY2hlbWEudHlwZSBhcyBKU09OU2NoZW1hN1R5cGVOYW1lIDogbnVsbDtcbiAgICBpZiAoIXR5cGUgJiYgc2NoZW1hICYmIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgIGlmICh0eXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdHlwZVswXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUubGVuZ3RoID09PSAyICYmIHR5cGUuaW5kZXhPZignbnVsbCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdHlwZVt0eXBlWzBdID09PSAnbnVsbCcgPyAxIDogMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFZhbGlkYXRvcihmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuKSB7XG4gICAgZmllbGQudmFsaWRhdG9ycyA9IGZpZWxkLnZhbGlkYXRvcnMgfHwge307XG4gICAgZmllbGQudmFsaWRhdG9yc1tuYW1lXSA9IHZhbGlkYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbnVtKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICByZXR1cm4gc2NoZW1hLmVudW1cbiAgICAgIHx8IChzY2hlbWEuYW55T2YgJiYgc2NoZW1hLmFueU9mLmV2ZXJ5KGlzQ29uc3QpKVxuICAgICAgfHwgKHNjaGVtYS5vbmVPZiAmJiBzY2hlbWEub25lT2YuZXZlcnkoaXNDb25zdCkpXG4gICAgICB8fCBzY2hlbWEudW5pcXVlSXRlbXMgJiYgc2NoZW1hLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykgJiYgdGhpcy5pc0VudW0oPEpTT05TY2hlbWE3PiBzY2hlbWEuaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0VudW1PcHRpb25zKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBpZiAoc2NoZW1hLmVudW0pIHtcbiAgICAgIHJldHVybiBzY2hlbWEuZW51bS5tYXAodmFsdWUgPT4gKHsgdmFsdWUsIGxhYmVsOiB2YWx1ZSB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9FbnVtID0gKHM6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgPyBzLmNvbnN0IDogcy5lbnVtWzBdO1xuICAgICAgY29uc3Qgb3B0aW9uOiBhbnkgPSB7IHZhbHVlOiB2YWx1ZSwgbGFiZWw6IHMudGl0bGUgfHwgdmFsdWUgfTtcbiAgICAgIGlmIChzLnJlYWRPbmx5KSB7XG4gICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfTtcblxuICAgIGlmIChzY2hlbWEuYW55T2YpIHtcbiAgICAgIHJldHVybiBzY2hlbWEuYW55T2YubWFwKHRvRW51bSk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5vbmVPZikge1xuICAgICAgcmV0dXJuIHNjaGVtYS5vbmVPZi5tYXAodG9FbnVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b0VudW1PcHRpb25zKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWVsZFZhbGlkKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZvcm0gfSA9IChmaWVsZC5vcHRpb25zIGFzIGFueSkuX2J1aWxkRmllbGQoe1xuICAgICAgZm9ybTogbmV3IEZvcm1Hcm91cCh7fSksXG4gICAgICBmaWVsZEdyb3VwOiBbdGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWEsIHsgLi4ub3B0aW9ucywgcmVzZXRPbkhpZGU6IHRydWUsIGlnbm9yZURlZmF1bHQ6IHRydWUsIG1hcDogbnVsbCB9KV0sXG4gICAgICBtb2RlbDogZmllbGQubW9kZWwgPyBjbG9uZShmaWVsZC5tb2RlbCkgOiAoZmllbGQuZmllbGRBcnJheSA/IFtdIDoge30pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm0udmFsaWQ7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmllbGRzKGYxOiBGb3JtbHlGaWVsZENvbmZpZywgZjI6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBmMikge1xuICAgICAgaWYgKGlzT2JqZWN0KGYxW3Byb3BdKSAmJiBpc09iamVjdChmMltwcm9wXSkpIHtcbiAgICAgICAgZjFbcHJvcF0gPSB0aGlzLm1lcmdlRmllbGRzKGYxW3Byb3BdLCBmMltwcm9wXSk7XG4gICAgICB9IGVsc2UgaWYgKGYyW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgZjFbcHJvcF0gPSBmMltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZjE7XG4gIH1cbn1cbiJdfQ==
772
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlL2pzb24tc2NoZW1hLyIsInNvdXJjZXMiOlsiZm9ybWx5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUNMLGlCQUFpQixJQUFJLGdCQUFnQixFQUNyQyxjQUFjLElBQUksYUFBYSxFQUMvQixNQUFNLElBQUksS0FBSyxHQUNoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFckMsNkNBT0M7Ozs7Ozs7O0lBREMsc0NBQW9GOzs7Ozs7O0FBSXRGLFNBQVMsYUFBYSxDQUFDLENBQVM7SUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNoQixPQUFPLENBQUMsQ0FBQztLQUNWOztRQUVHLENBQUMsR0FBRyxDQUFDOztRQUFFLENBQUMsR0FBRyxDQUFDO0lBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFBQyxDQUFDLEVBQUUsQ0FBQztLQUFFO0lBRXJELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQzs7Ozs7QUFFRCxTQUFTLE9BQU8sQ0FBQyxDQUFNO0lBQ3JCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDbkQsQ0FBQzs7Ozs7QUFFRCxTQUFTLFFBQVEsQ0FBQyxDQUFNO0lBQ3RCLE9BQU8sQ0FBQyxJQUFJLElBQUks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LENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3ZFLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQzs7Ozs7OztJQUVPLFdBQVcsQ0FBQyxFQUFxQixFQUFFLEVBQXFCO1FBQzlELEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO1lBQ25CLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDNUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtnQkFDM0IsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzs7WUF0ZkYsVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBKU09OU2NoZW1hNywgSlNPTlNjaGVtYTdUeXBlTmFtZSB9IGZyb20gJ2pzb24tc2NoZW1hJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgybVyZXZlcnNlRGVlcE1lcmdlIGFzIHJldmVyc2VEZWVwTWVyZ2UsXG4gIMm1Z2V0RmllbGRWYWx1ZSBhcyBnZXRGaWVsZFZhbHVlLFxuICDJtWNsb25lIGFzIGNsb25lLFxufSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBhbGxvd3MgdG8gaW50ZXJjZXB0IHRoZSBtYXBwaW5nLCB0YWtpbmcgdGhlIGFscmVhZHkgbWFwcGVkXG4gICAqIGZvcm1seSBmaWVsZCBhbmQgdGhlIG9yaWdpbmFsIEpTT05TY2hlbWEgc291cmNlIGZyb20gd2hpY2ggaXRcbiAgICogd2FzIG1hcHBlZC5cbiAgICovXG4gIG1hcD86IChtYXBwZWRGaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG1hcFNvdXJjZTogSlNPTlNjaGVtYTcpID0+IEZvcm1seUZpZWxkQ29uZmlnO1xufVxuXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjc4NjUyODVcbmZ1bmN0aW9uIGRlY2ltYWxQbGFjZXMoYTogbnVtYmVyKSB7XG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGxldCBlID0gMSwgcCA9IDA7XG4gIHdoaWxlIChNYXRoLnJvdW5kKGEgKiBlKSAvIGUgIT09IGEpIHsgZSAqPSAxMDsgcCsrOyB9XG5cbiAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHkodjogYW55KSB7XG4gIHJldHVybiB2ID09PSAnJyB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodjogYW55KSB7XG4gIHJldHVybiB2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpO1xufVxuXG5mdW5jdGlvbiBpc0NvbnN0KHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgcmV0dXJuIHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgnY29uc3QnKSB8fCAoc2NoZW1hLmVudW0gJiYgc2NoZW1hLmVudW0ubGVuZ3RoID09PSAxKTtcbn1cblxuZnVuY3Rpb24gdG90YWxNYXRjaGVkRmllbGRzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyk6IG51bWJlciB7XG4gIGlmICghZmllbGQuZmllbGRHcm91cCkge1xuICAgIHJldHVybiBmaWVsZC5rZXkgJiYgZ2V0RmllbGRWYWx1ZShmaWVsZCkgIT09IHVuZGVmaW5lZCA/IDEgOiAwO1xuICB9XG5cbiAgY29uc3QgdG90YWwgPSBmaWVsZC5maWVsZEdyb3VwLnJlZHVjZSgocywgZikgPT4gdG90YWxNYXRjaGVkRmllbGRzKGYpICsgcywgMCk7XG4gIHJldHVybiB0b3RhbCA9PT0gMFxuICAgID8gZmllbGQua2V5ICYmIGdldEZpZWxkVmFsdWUoZmllbGQpICE9PSB1bmRlZmluZWQgPyAxIDogMFxuICAgIDogdG90YWw7XG59XG5cbmludGVyZmFjZSBJT3B0aW9ucyBleHRlbmRzIEZvcm1seUpzb25zY2hlbWFPcHRpb25zIHtcbiAgc2NoZW1hOiBKU09OU2NoZW1hNztcbiAgcmVzZXRPbkhpZGU/OiBib29sZWFuO1xuICBzaGFyZUZvcm1Db250cm9sPzogYm9vbGVhbjtcbiAgaWdub3JlRGVmYXVsdD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAga2V5PzogRm9ybWx5RmllbGRDb25maWdbJ2tleSddO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZvcm1seUpzb25zY2hlbWEge1xuICB0b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIG9wdGlvbnM/OiBGb3JtbHlKc29uc2NoZW1hT3B0aW9ucyk6IEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWEsIHsgc2NoZW1hLCAuLi4ob3B0aW9ucyB8fCB7fSkgfSk7XG4gIH1cblxuICBwcml2YXRlIF90b0ZpZWxkQ29uZmlnKHNjaGVtYTogSlNPTlNjaGVtYTcsIHsga2V5LCAuLi5vcHRpb25zIH06IElPcHRpb25zKTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZVNjaGVtYShzY2hlbWEsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZyA9IHtcbiAgICAgIHR5cGU6IHRoaXMuZ3Vlc3NUeXBlKHNjaGVtYSksXG4gICAgICBkZWZhdWx0VmFsdWU6IHNjaGVtYS5kZWZhdWx0LFxuICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBzY2hlbWEudGl0bGUsXG4gICAgICAgIHJlYWRvbmx5OiBzY2hlbWEucmVhZE9ubHksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzY2hlbWEuZGVzY3JpcHRpb24sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgIGZpZWxkLmtleSA9IGtleTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlRGVmYXVsdCAmJiAoc2NoZW1hLnJlYWRPbmx5IHx8IG9wdGlvbnMucmVhZE9ubHkpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgcmVhZE9ubHk6IHRydWUgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5yZXNldE9uSGlkZSkge1xuICAgICAgZmllbGRbJ3Jlc2V0T25IaWRlJ10gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNoYXJlRm9ybUNvbnRyb2wgPT09IGZhbHNlKSB7XG4gICAgICBmaWVsZFsnc2hhcmVGb3JtQ29udHJvbCddID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRGVmYXVsdCkge1xuICAgICAgZGVsZXRlIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bGwnOiB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbnVsbCcsICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnaW50ZWdlcic6IHtcbiAgICAgICAgZmllbGQucGFyc2VycyA9IFt2ID0+IGlzRW1wdHkodikgPyAodiA9PT0gJycgPyBudWxsIDogdikgOiBOdW1iZXIodildO1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5pbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWluID0gc2NoZW1hLm1pbmltdW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtYXhpbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWF4ID0gc2NoZW1hLm1heGltdW07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNaW5pbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZXhjbHVzaXZlTWluaW11bSA9IHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnZXhjbHVzaXZlTWluaW11bScsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZSA+IHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdleGNsdXNpdmVNYXhpbXVtJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuZXhjbHVzaXZlTWF4aW11bSA9IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnZXhjbHVzaXZlTWF4aW11bScsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZSA8IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtdWx0aXBsZU9mJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuc3RlcCA9IHNjaGVtYS5tdWx0aXBsZU9mO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbXVsdGlwbGVPZicsICh7IHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8IHZhbHVlID09PSAwIHx8IHNjaGVtYS5tdWx0aXBsZU9mIDw9IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9pc3N1ZXMvNjUyI2lzc3VlLTI4MzYxMDg1OVxuICAgICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBkZWNpbWFsUGxhY2VzKHNjaGVtYS5tdWx0aXBsZU9mKSk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIG11bHRpcGxpZXIpICUgTWF0aC5yb3VuZChzY2hlbWEubXVsdGlwbGVPZiAqIG11bHRpcGxpZXIpID09PSAwO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3RyaW5nJzoge1xuICAgICAgICBjb25zdCBzY2hlbWFUeXBlID0gc2NoZW1hLnR5cGUgYXMgSlNPTlNjaGVtYTdUeXBlTmFtZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hVHlwZSkgJiYgKHNjaGVtYVR5cGUuaW5kZXhPZignbnVsbCcpICE9PSAtMSkpIHtcbiAgICAgICAgICBmaWVsZC5wYXJzZXJzID0gW3YgPT4gaXNFbXB0eSh2KSA/IG51bGwgOiB2XTtcbiAgICAgICAgfVxuXG4gICAgICAgIFsnbWluTGVuZ3RoJywgJ21heExlbmd0aCcsICdwYXR0ZXJuJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0gPSBzY2hlbWFbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICAgIGZpZWxkLmZpZWxkR3JvdXAgPSBbXTtcblxuICAgICAgICBjb25zdCBbcHJvcERlcHMsIHNjaGVtYURlcHNdID0gdGhpcy5yZXNvbHZlRGVwZW5kZW5jaWVzKHNjaGVtYSk7XG4gICAgICAgIE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzIHx8IHt9KS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgICBjb25zdCBmID0gdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSwgeyAuLi5vcHRpb25zLCBrZXk6IHByb3BlcnR5IH0pO1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaChmKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShzY2hlbWEucmVxdWlyZWQpICYmIHNjaGVtYS5yZXF1aXJlZC5pbmRleE9mKHByb3BlcnR5KSAhPT0gLTEpXG4gICAgICAgICAgICB8fCBwcm9wRGVwc1twcm9wZXJ0eV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGYuZXhwcmVzc2lvblByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgIC4uLihmLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgICAgJ3RlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCc6IChtLCBzLCBmKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcmVudCA9IGYucGFyZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZi5maWVsZEdyb3VwICYmIGYua2V5ICE9IG51bGwgPyBwYXJlbnQubW9kZWwgOiBmLm1vZGVsO1xuICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnQua2V5ID09IG51bGwgJiYgcGFyZW50LnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZCA9IHBhcmVudCAmJiBwYXJlbnQudGVtcGxhdGVPcHRpb25zID8gcGFyZW50LnRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWwgJiYgIXJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hLnJlcXVpcmVkKSAmJiBzY2hlbWEucmVxdWlyZWQuaW5kZXhPZihwcm9wZXJ0eSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcERlcHNbcHJvcGVydHldICYmIChtICYmIHByb3BEZXBzW3Byb3BlcnR5XS5zb21lKGsgPT4gIWlzRW1wdHkobVtrXSkpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNjaGVtYURlcHNbcHJvcGVydHldKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb25zdFZhbHVlID0gKHM6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBzLmhhc093blByb3BlcnR5KCdjb25zdCcpID8gcy5jb25zdCA6IHMuZW51bVswXTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG9uZU9mU2NoZW1hID0gc2NoZW1hRGVwc1twcm9wZXJ0eV0ub25lT2Y7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9uZU9mU2NoZW1hXG4gICAgICAgICAgICAgICYmIG9uZU9mU2NoZW1hLmV2ZXJ5KG8gPT4gby5wcm9wZXJ0aWVzICYmIG8ucHJvcGVydGllc1twcm9wZXJ0eV0gJiYgaXNDb25zdChvLnByb3BlcnRpZXNbcHJvcGVydHldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBvbmVPZlNjaGVtYS5mb3JFYWNoKG9uZU9mU2NoZW1hSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBbcHJvcGVydHldOiBjb25zdFNjaGVtYSwgLi4ucHJvcGVydGllcyB9ID0gb25lT2ZTY2hlbWFJdGVtLnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgZmllbGQuZmllbGRHcm91cC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoeyAuLi5vbmVPZlNjaGVtYUl0ZW0sIHByb3BlcnRpZXMgfSwgeyAuLi5vcHRpb25zLCByZXNldE9uSGlkZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGdldENvbnN0VmFsdWUoY29uc3RTY2hlbWEpICE9PSBtW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWVsZC5maWVsZEdyb3VwLnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX3RvRmllbGRDb25maWcoc2NoZW1hRGVwc1twcm9wZXJ0eV0sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIGhpZGVFeHByZXNzaW9uOiBtID0+ICFtIHx8IGlzRW1wdHkobVtwcm9wZXJ0eV0pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5vbmVPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdvbmVPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLm9uZU9mLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBzaGFyZUZvcm1Db250cm9sOiBmYWxzZSB9LFxuICAgICAgICAgICkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjaGVtYS5hbnlPZikge1xuICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAucHVzaCh0aGlzLnJlc29sdmVNdWx0aVNjaGVtYShcbiAgICAgICAgICAgICdhbnlPZicsXG4gICAgICAgICAgICA8SlNPTlNjaGVtYTdbXT4gc2NoZW1hLmFueU9mLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdtaW5JdGVtcycpKSB7XG4gICAgICAgICAgZmllbGQudGVtcGxhdGVPcHRpb25zLm1pbkl0ZW1zID0gc2NoZW1hLm1pbkl0ZW1zO1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdG9yKGZpZWxkLCAnbWluSXRlbXMnLCAoeyB2YWx1ZSB9KSA9PiBpc0VtcHR5KHZhbHVlKSB8fCAodmFsdWUubGVuZ3RoID49IHNjaGVtYS5taW5JdGVtcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ21heEl0ZW1zJykpIHtcbiAgICAgICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubWF4SXRlbXMgPSBzY2hlbWEubWF4SXRlbXM7XG4gICAgICAgICAgdGhpcy5hZGRWYWxpZGF0b3IoZmllbGQsICdtYXhJdGVtcycsICh7IHZhbHVlIH0pID0+IGlzRW1wdHkodmFsdWUpIHx8ICh2YWx1ZS5sZW5ndGggPD0gc2NoZW1hLm1heEl0ZW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5oYXNPd25Qcm9wZXJ0eSgndW5pcXVlSXRlbXMnKSkge1xuICAgICAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy51bmlxdWVJdGVtcyA9IHNjaGVtYS51bmlxdWVJdGVtcztcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ3VuaXF1ZUl0ZW1zJywgKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkodmFsdWUpIHx8ICFzY2hlbWEudW5pcXVlSXRlbXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuaXF1ZUl0ZW1zID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAgICAgbmV3IFNldCh2YWx1ZS5tYXAoKHY6IGFueSkgPT4gSlNPTi5zdHJpbmdpZnkodikpKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB1bmlxdWVJdGVtcy5sZW5ndGggPT09IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlc29sdmUgaXRlbXMgc2NoZW1hIG5lZWRlZCBmb3IgaXNFbnVtIGNoZWNrXG4gICAgICAgIGlmIChzY2hlbWEuaXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgIHNjaGVtYS5pdGVtcyA9IHRoaXMucmVzb2x2ZVNjaGVtYSg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiByZW1vdmUgaXNFbnVtIGNoZWNrIG9uY2UgYWRkaW5nIGFuIG9wdGlvbiB0byBza2lwIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXRoaXMuaXNFbnVtKHNjaGVtYSkpIHtcbiAgICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnZmllbGRBcnJheScsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBpZiAoc2NoZW1hLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGl0ZW1zIGlzIGEgc2luZ2xlIHNjaGVtYSwgdGhlIGFkZGl0aW9uYWxJdGVtcyBrZXl3b3JkIGlzIG1lYW5pbmdsZXNzLCBhbmQgaXQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB0aGlzLmZpZWxkR3JvdXAgPyB0aGlzLmZpZWxkR3JvdXAubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgaWYgKHNjaGVtYS5pdGVtcyAmJiBzY2hlbWEuaXRlbXNbbGVuZ3RoXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBfdGhpcy5fdG9GaWVsZENvbmZpZyg8SlNPTlNjaGVtYTc+IHNjaGVtYS5pdGVtc1tsZW5ndGhdLCB7IC4uLm9wdGlvbnN9KTtcbiAgICAgICAgICAgICAgICBmLnRlbXBsYXRlT3B0aW9ucy5yZW1vdmFibGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHNjaGVtYS5hZGRpdGlvbmFsSXRlbXNcbiAgICAgICAgICAgICAgICA/IF90aGlzLl90b0ZpZWxkQ29uZmlnKDxKU09OU2NoZW1hNz4gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IHt9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdjb25zdCcpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMuY29uc3QgPSBzY2hlbWEuY29uc3Q7XG4gICAgICB0aGlzLmFkZFZhbGlkYXRvcihmaWVsZCwgJ2NvbnN0JywgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IHNjaGVtYS5jb25zdCk7XG4gICAgICBpZiAoIWZpZWxkLnR5cGUpIHtcbiAgICAgICAgZmllbGQuZGVmYXVsdFZhbHVlID0gc2NoZW1hLmNvbnN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRW51bShzY2hlbWEpKSB7XG4gICAgICBmaWVsZC50ZW1wbGF0ZU9wdGlvbnMubXVsdGlwbGUgPSBmaWVsZC50eXBlID09PSAnYXJyYXknO1xuICAgICAgZmllbGQudHlwZSA9ICdlbnVtJztcbiAgICAgIGZpZWxkLnRlbXBsYXRlT3B0aW9ucy5vcHRpb25zID0gdGhpcy50b0VudW1PcHRpb25zKHNjaGVtYSk7XG4gICAgfVxuXG4gICAgLy8gbWFwIGluIHBvc3NpYmxlIGZvcm1seUNvbmZpZyBvcHRpb25zIGZyb20gdGhlIHdpZGdldCBwcm9wZXJ0eVxuICAgIGlmIChzY2hlbWFbJ3dpZGdldCddICYmIHNjaGVtYVsnd2lkZ2V0J10uZm9ybWx5Q29uZmlnKSB7XG4gICAgICBmaWVsZCA9IHRoaXMubWVyZ2VGaWVsZHMoZmllbGQsIHNjaGVtYVsnd2lkZ2V0J10uZm9ybWx5Q29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBhIG1hcCBmdW5jdGlvbiBwYXNzZWQgaW4sIHVzZSBpdCB0byBhbGxvdyB0aGUgdXNlciB0b1xuICAgIC8vIGZ1cnRoZXIgY3VzdG9taXplIGhvdyBmaWVsZHMgYXJlIGJlaW5nIG1hcHBlZFxuICAgIHJldHVybiBvcHRpb25zLm1hcCA/IG9wdGlvbnMubWFwKGZpZWxkLCBzY2hlbWEpIDogZmllbGQ7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTY2hlbWEoc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpIHtcbiAgICBpZiAoc2NoZW1hICYmIHNjaGVtYS4kcmVmKSB7XG4gICAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVEZWZpbml0aW9uKHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYSAmJiBzY2hlbWEuYWxsT2YpIHtcbiAgICAgIHNjaGVtYSA9IHRoaXMucmVzb2x2ZUFsbE9mKHNjaGVtYSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjaGVtYTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbE9mKHsgYWxsT2YsIC4uLmJhc2VTY2hlbWEgfTogSlNPTlNjaGVtYTcsIG9wdGlvbnM6IElPcHRpb25zKSB7XG4gICAgaWYgKCFhbGxPZi5sZW5ndGgpIHtcbiAgICAgIHRocm93IEVycm9yKGBhbGxPZiBhcnJheSBjYW4gbm90IGJlIGVtcHR5ICR7YWxsT2Z9LmApO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxPZi5yZWR1Y2UoKGJhc2U6IEpTT05TY2hlbWE3LCBzY2hlbWE6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICBzY2hlbWEgPSB0aGlzLnJlc29sdmVTY2hlbWEoc2NoZW1hLCBvcHRpb25zKTtcbiAgICAgIGlmIChiYXNlLnJlcXVpcmVkICYmIHNjaGVtYS5yZXF1aXJlZCkge1xuICAgICAgICBiYXNlLnJlcXVpcmVkID0gWy4uLmJhc2UucmVxdWlyZWQsIC4uLnNjaGVtYS5yZXF1aXJlZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlbWEudW5pcXVlSXRlbXMpIHtcbiAgICAgICAgYmFzZS51bmlxdWVJdGVtcyA9IHNjaGVtYS51bmlxdWVJdGVtcztcbiAgICAgIH1cblxuICAgICAgLy8gcmVzb2x2ZSB0byBtaW4gdmFsdWVcbiAgICAgIFsnbWF4TGVuZ3RoJywgJ21heGltdW0nLCAnZXhjbHVzaXZlTWF4aW11bScsICdtYXhJdGVtcycsICdtYXhQcm9wZXJ0aWVzJ11cbiAgICAgICAgLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAgICAgaWYgKCFpc0VtcHR5KGJhc2VbcHJvcF0pICYmICFpc0VtcHR5KHNjaGVtYVtwcm9wXSkpIHtcbiAgICAgICAgICAgIGJhc2VbcHJvcF0gPSBiYXNlW3Byb3BdIDwgc2NoZW1hW3Byb3BdID8gYmFzZVtwcm9wXSA6IHNjaGVtYVtwcm9wXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyByZXNvbHZlIHRvIG1heCB2YWx1ZVxuICAgICAgWydtaW5MZW5ndGgnLCAnbWluaW11bScsICdleGNsdXNpdmVNaW5pbXVtJywgJ21pbkl0ZW1zJywgJ21pblByb3BlcnRpZXMnXVxuICAgICAgICAuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICBpZiAoIWlzRW1wdHkoYmFzZVtwcm9wXSkgJiYgIWlzRW1wdHkoc2NoZW1hW3Byb3BdKSkge1xuICAgICAgICAgICAgYmFzZVtwcm9wXSA9IGJhc2VbcHJvcF0gPiBzY2hlbWFbcHJvcF0gPyBiYXNlW3Byb3BdIDogc2NoZW1hW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXZlcnNlRGVlcE1lcmdlKGJhc2UsIHNjaGVtYSk7XG4gICAgfSwgYmFzZVNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVNdWx0aVNjaGVtYShcbiAgICBtb2RlOiAnb25lT2YnIHwgJ2FueU9mJyxcbiAgICBzY2hlbWFzOiBKU09OU2NoZW1hN1tdLFxuICAgIG9wdGlvbnM6IElPcHRpb25zLFxuICApOiBGb3JtbHlGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdtdWx0aXNjaGVtYScsXG4gICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnZW51bScsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiAtMSxcbiAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIG11bHRpcGxlOiBtb2RlID09PSAnYW55T2YnLFxuICAgICAgICAgICAgb3B0aW9uczogc2NoZW1hc1xuICAgICAgICAgICAgICAubWFwKChzLCBpKSA9PiAoeyBsYWJlbDogcy50aXRsZSwgdmFsdWU6IGksIGRpc2FibGVkOiBzLnJlYWRPbmx5IH0pKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhvb2tzOiB7XG4gICAgICAgICAgICBvbkluaXQ6IGYgPT4gZi5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+IChmLm9wdGlvbnMgYXMgYW55KS5fY2hlY2tGaWVsZChmLnBhcmVudCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmllbGRHcm91cDogc2NoZW1hcy5tYXAoKHMsIGkpID0+ICh7XG4gICAgICAgICAgICAuLi50aGlzLl90b0ZpZWxkQ29uZmlnKHMsIHsgLi4ub3B0aW9ucywgcmVzZXRPbkhpZGU6IHRydWUgfSksXG4gICAgICAgICAgICBoaWRlRXhwcmVzc2lvbjogKG0sIGZzLCBmLCBmb3JjZVVwZGF0ZT86IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGYucGFyZW50LnBhcmVudC5maWVsZEdyb3VwWzBdLmZvcm1Db250cm9sO1xuICAgICAgICAgICAgICBpZiAoKGNvbnRyb2wudmFsdWUgPT09IC0xKSB8fCBmb3JjZVVwZGF0ZSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGYucGFyZW50LmZpZWxkR3JvdXBcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGYsIGkpID0+IFtmLCBpXSBhcyBbRm9ybWx5RmllbGRDb25maWcsIG51bWJlcl0pXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChbZiwgaV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWVsZFZhbGlkKGYsIHNjaGVtYXNbaV0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5zb3J0KChbZjFdLCBbZjJdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRGaWVsZHMxID0gdG90YWxNYXRjaGVkRmllbGRzKGYxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEZpZWxkczIgPSB0b3RhbE1hdGNoZWRGaWVsZHMoZjIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZEZpZWxkczEgPT09IG1hdGNoZWRGaWVsZHMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGYxLnRlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCA9PT0gZjIudGVtcGxhdGVPcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjEudGVtcGxhdGVPcHRpb25zLmRpc2FibGVkID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRGaWVsZHMyID4gbWF0Y2hlZEZpZWxkczEgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLm1hcCgoWywgaV0pID0+IGkpXG4gICAgICAgICAgICAgICAgICA7XG5cbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2FueU9mJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGVmaW5lZFZhbHVlID0gdmFsdWUuZmlsdGVyKGkgPT4gdG90YWxNYXRjaGVkRmllbGRzKGYucGFyZW50LmZpZWxkR3JvdXBbaV0pKTtcbiAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmaW5lZFZhbHVlLmxlbmd0aCA+IDAgPyBkZWZpbmVkVmFsdWUgOiBbdmFsdWVbMF0gfHwgMF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiBbMF07XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShtb2RlID09PSAnYW55T2YnID8gdmFsdWUgOiB2YWx1ZVswXSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gY29udHJvbC52YWx1ZS5pbmRleE9mKGkpID09PSAtMVxuICAgICAgICAgICAgICAgIDogY29udHJvbC52YWx1ZSAhPT0gaTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRGVmaW5pdGlvbihzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zOiBJT3B0aW9ucyk6IEpTT05TY2hlbWE3IHtcbiAgICBjb25zdCBbdXJpLCBwb2ludGVyXSA9IHNjaGVtYS4kcmVmLnNwbGl0KCcjLycpO1xuICAgIGlmICh1cmkpIHtcbiAgICAgIHRocm93IEVycm9yKGBSZW1vdGUgc2NoZW1hcyBmb3IgJHtzY2hlbWEuJHJlZn0gbm90IHN1cHBvcnRlZCB5ZXQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9ICFwb2ludGVyID8gbnVsbCA6IHBvaW50ZXIuc3BsaXQoJy8nKS5yZWR1Y2UoXG4gICAgICAoZGVmLCBwYXRoKSA9PiBkZWYgJiYgZGVmLmhhc093blByb3BlcnR5KHBhdGgpID8gZGVmW3BhdGhdIDogbnVsbCxcbiAgICAgIG9wdGlvbnMuc2NoZW1hLFxuICAgICk7XG5cbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIHRocm93IEVycm9yKGBDYW5ub3QgZmluZCBhIGRlZmluaXRpb24gZm9yICR7c2NoZW1hLiRyZWZ9LmApO1xuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uLiRyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVEZWZpbml0aW9uKGRlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZpbml0aW9uLFxuICAgICAgLi4uWyd0aXRsZScsICdkZXNjcmlwdGlvbicsICdkZWZhdWx0JywgJ3dpZGdldCddLnJlZHVjZSgoYW5ub3RhdGlvbiwgcCkgPT4ge1xuICAgICAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbltwXSA9IHNjaGVtYVtwXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9uO1xuICAgICAgfSwge30pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVEZXBlbmRlbmNpZXMoc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIGNvbnN0IGRlcHMgPSB7fTtcbiAgICBjb25zdCBzY2hlbWFEZXBzID0ge307XG5cbiAgICBPYmplY3Qua2V5cyhzY2hlbWEuZGVwZW5kZW5jaWVzIHx8IHt9KS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHNjaGVtYS5kZXBlbmRlbmNpZXNbcHJvcF0gYXMgSlNPTlNjaGVtYTc7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5KSkge1xuICAgICAgICAvLyBQcm9wZXJ0eSBkZXBlbmRlbmNpZXNcbiAgICAgICAgZGVwZW5kZW5jeS5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgaWYgKCFkZXBzW2RlcF0pIHtcbiAgICAgICAgICAgIGRlcHNbZGVwXSA9IFtwcm9wXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVwc1tkZXBdLnB1c2gocHJvcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNjaGVtYSBkZXBlbmRlbmNpZXNcbiAgICAgICAgc2NoZW1hRGVwc1twcm9wXSA9IGRlcGVuZGVuY3k7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW2RlcHMsIHNjaGVtYURlcHNdO1xuICB9XG5cbiAgcHJpdmF0ZSBndWVzc1R5cGUoc2NoZW1hOiBKU09OU2NoZW1hNykge1xuICAgIGNvbnN0IHR5cGUgPSBzY2hlbWEgPyBzY2hlbWEudHlwZSBhcyBKU09OU2NoZW1hN1R5cGVOYW1lIDogbnVsbDtcbiAgICBpZiAoIXR5cGUgJiYgc2NoZW1hICYmIHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgIGlmICh0eXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdHlwZVswXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUubGVuZ3RoID09PSAyICYmIHR5cGUuaW5kZXhPZignbnVsbCcpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdHlwZVt0eXBlWzBdID09PSAnbnVsbCcgPyAxIDogMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBwcml2YXRlIGFkZFZhbGlkYXRvcihmaWVsZDogRm9ybWx5RmllbGRDb25maWcsIG5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuKSB7XG4gICAgZmllbGQudmFsaWRhdG9ycyA9IGZpZWxkLnZhbGlkYXRvcnMgfHwge307XG4gICAgZmllbGQudmFsaWRhdG9yc1tuYW1lXSA9IHZhbGlkYXRvcjtcbiAgfVxuXG4gIHByaXZhdGUgaXNFbnVtKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICByZXR1cm4gc2NoZW1hLmVudW1cbiAgICAgIHx8IChzY2hlbWEuYW55T2YgJiYgc2NoZW1hLmFueU9mLmV2ZXJ5KGlzQ29uc3QpKVxuICAgICAgfHwgKHNjaGVtYS5vbmVPZiAmJiBzY2hlbWEub25lT2YuZXZlcnkoaXNDb25zdCkpXG4gICAgICB8fCBzY2hlbWEudW5pcXVlSXRlbXMgJiYgc2NoZW1hLml0ZW1zICYmICFBcnJheS5pc0FycmF5KHNjaGVtYS5pdGVtcykgJiYgdGhpcy5pc0VudW0oPEpTT05TY2hlbWE3PiBzY2hlbWEuaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0VudW1PcHRpb25zKHNjaGVtYTogSlNPTlNjaGVtYTcpIHtcbiAgICBpZiAoc2NoZW1hLmVudW0pIHtcbiAgICAgIHJldHVybiBzY2hlbWEuZW51bS5tYXAodmFsdWUgPT4gKHsgdmFsdWUsIGxhYmVsOiB2YWx1ZSB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9FbnVtID0gKHM6IEpTT05TY2hlbWE3KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHMuaGFzT3duUHJvcGVydHkoJ2NvbnN0JykgPyBzLmNvbnN0IDogcy5lbnVtWzBdO1xuICAgICAgY29uc3Qgb3B0aW9uOiBhbnkgPSB7IHZhbHVlOiB2YWx1ZSwgbGFiZWw6IHMudGl0bGUgfHwgdmFsdWUgfTtcbiAgICAgIGlmIChzLnJlYWRPbmx5KSB7XG4gICAgICAgIG9wdGlvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfTtcblxuICAgIGlmIChzY2hlbWEuYW55T2YpIHtcbiAgICAgIHJldHVybiBzY2hlbWEuYW55T2YubWFwKHRvRW51bSk7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5vbmVPZikge1xuICAgICAgcmV0dXJuIHNjaGVtYS5vbmVPZi5tYXAodG9FbnVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b0VudW1PcHRpb25zKDxKU09OU2NoZW1hNz4gc2NoZW1hLml0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaWVsZFZhbGlkKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZywgc2NoZW1hOiBKU09OU2NoZW1hNywgb3B0aW9uczogSU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZvcm0gfSA9IChmaWVsZC5vcHRpb25zIGFzIGFueSkuX2J1aWxkRmllbGQoe1xuICAgICAgZm9ybTogbmV3IEZvcm1Hcm91cCh7fSksXG4gICAgICBmaWVsZEdyb3VwOiBbdGhpcy5fdG9GaWVsZENvbmZpZyhzY2hlbWEsIHsgLi4ub3B0aW9ucywgcmVzZXRPbkhpZGU6IHRydWUsIGlnbm9yZURlZmF1bHQ6IHRydWUsIG1hcDogbnVsbCB9KV0sXG4gICAgICBtb2RlbDogZmllbGQubW9kZWwgPyBjbG9uZShmaWVsZC5tb2RlbCkgOiAoZmllbGQuZmllbGRBcnJheSA/IFtdIDoge30pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm0udmFsaWQ7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmllbGRzKGYxOiBGb3JtbHlGaWVsZENvbmZpZywgZjI6IEZvcm1seUZpZWxkQ29uZmlnKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBmMikge1xuICAgICAgaWYgKGlzT2JqZWN0KGYxW3Byb3BdKSAmJiBpc09iamVjdChmMltwcm9wXSkpIHtcbiAgICAgICAgZjFbcHJvcF0gPSB0aGlzLm1lcmdlRmllbGRzKGYxW3Byb3BdLCBmMltwcm9wXSk7XG4gICAgICB9IGVsc2UgaWYgKGYyW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgZjFbcHJvcF0gPSBmMltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZjE7XG4gIH1cbn1cbiJdfQ==
@@ -15,14 +15,7 @@ export class FormlyAttributes {
15
15
  this.renderer = renderer;
16
16
  this.elementRef = elementRef;
17
17
  this.uiAttributesCache = {};
18
- this.uiAttributes = [
19
- ...FORMLY_VALIDATORS,
20
- 'tabindex',
21
- 'placeholder',
22
- 'readonly',
23
- 'disabled',
24
- 'step',
25
- ];
18
+ this.uiAttributes = null;
26
19
  /**
27
20
  * HostBinding doesn't register listeners conditionally which may produce some perf issues.
28
21
  *
@@ -30,12 +23,24 @@ export class FormlyAttributes {
30
23
  */
31
24
  this.uiEvents = {
32
25
  listeners: [],
33
- events: [
34
- 'click',
35
- 'keyup',
36
- 'keydown',
37
- 'keypress',
38
- ],
26
+ events: ['click', 'keyup', 'keydown', 'keypress', 'focus', 'blur', 'change'],
27
+ callback: (/**
28
+ * @param {?} eventName
29
+ * @param {?} $event
30
+ * @return {?}
31
+ */
32
+ (eventName, $event) => {
33
+ switch (eventName) {
34
+ case 'focus':
35
+ return this.onFocus($event);
36
+ case 'blur':
37
+ return this.onBlur($event);
38
+ case 'change':
39
+ return this.onChange($event);
40
+ default:
41
+ return this.to[eventName](this.field, $event);
42
+ }
43
+ }),
39
44
  };
40
45
  this.document = _document;
41
46
  }
@@ -59,18 +64,18 @@ export class FormlyAttributes {
59
64
  * @param {?} listener
60
65
  * @return {?}
61
66
  */
62
- listener => listener()));
67
+ (listener) => listener()));
63
68
  this.uiEvents.events.forEach((/**
64
69
  * @param {?} eventName
65
70
  * @return {?}
66
71
  */
67
- eventName => {
68
- if (this.to && this.to[eventName]) {
72
+ (eventName) => {
73
+ if ((this.to && this.to[eventName]) || ['focus', 'blur', 'change'].indexOf(eventName) !== -1) {
69
74
  this.uiEvents.listeners.push(this.renderer.listen(this.elementRef.nativeElement, eventName, (/**
70
75
  * @param {?} e
71
76
  * @return {?}
72
77
  */
73
- (e) => this.to[eventName](this.field, e))));
78
+ (e) => this.uiEvents.callback(eventName, e))));
74
79
  }
75
80
  }));
76
81
  if (this.to && this.to.attributes) {
@@ -126,6 +131,15 @@ export class FormlyAttributes {
126
131
  * @return {?}
127
132
  */
128
133
  ngDoCheck() {
134
+ if (!this.uiAttributes) {
135
+ /** @type {?} */
136
+ const element = (/** @type {?} */ (this.elementRef.nativeElement));
137
+ this.uiAttributes = [...FORMLY_VALIDATORS, 'tabindex', 'placeholder', 'readonly', 'disabled', 'step'].filter((/**
138
+ * @param {?} attr
139
+ * @return {?}
140
+ */
141
+ (attr) => !element.hasAttribute || !element.hasAttribute(attr)));
142
+ }
129
143
  this.uiAttributes.forEach((/**
130
144
  * @param {?} attr
131
145
  * @return {?}
@@ -262,11 +276,6 @@ export class FormlyAttributes {
262
276
  FormlyAttributes.decorators = [
263
277
  { type: Directive, args: [{
264
278
  selector: '[formlyAttributes]',
265
- host: {
266
- '(focus)': 'onFocus($event)',
267
- '(blur)': 'onBlur($event)',
268
- '(change)': 'onChange($event)',
269
- },
270
279
  },] }
271
280
  ];
272
281
  /** @nocollapse */
@@ -318,4 +327,4 @@ if (false) {
318
327
  */
319
328
  FormlyAttributes.prototype.elementRef;
320
329
  }
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybWx5LmF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEIsU0FBUyxFQUFXLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU5SCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVUzQyxNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUFrQzNCLFlBQ1UsUUFBbUIsRUFDbkIsVUFBc0IsRUFDWixTQUFjO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9CeEIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQUc7WUFDckIsR0FBRyxpQkFBaUI7WUFDcEIsVUFBVTtZQUNWLGFBQWE7WUFDYixVQUFVO1lBQ1YsVUFBVTtZQUNWLE1BQU07U0FDUCxDQUFDOzs7Ozs7UUFPTSxhQUFRLEdBQUc7WUFDakIsU0FBUyxFQUFFLEVBQUU7WUFDYixNQUFNLEVBQUU7Z0JBQ04sT0FBTztnQkFDUCxPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsVUFBVTthQUNYO1NBQ0YsQ0FBQztRQVdBLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7Ozs7SUFWRCxJQUFJLEVBQUUsS0FBNEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7OztJQUU1RSxJQUFZLGlCQUFpQixLQUFtQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMs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WSxFQUFFLEtBQWE7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Ozs7OztJQUVPLGVBQWUsQ0FBQyxJQUFZO1FBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OztZQWpNRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsSUFBSSxFQUFFO29CQUNKLFNBQVMsRUFBRSxpQkFBaUI7b0JBQzVCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxrQkFBa0I7aUJBQy9CO2FBQ0Y7Ozs7WUFaZ0UsU0FBUztZQUF0RCxVQUFVOzRDQWtEekIsTUFBTSxTQUFDLFFBQVE7OztvQkFwQ2pCLEtBQUssU0FBQyxrQkFBa0I7aUJBQ3hCLEtBQUs7Ozs7SUFETixpQ0FBb0Q7O0lBQ3BELDhCQUFvQjs7Ozs7SUFFcEIsb0NBQTJCOzs7OztJQUMzQiw2Q0FBb0M7Ozs7O0lBQ3BDLHdDQU9FOzs7Ozs7OztJQU9GLG9DQVFFOzs7OztJQU9BLG9DQUEyQjs7Ozs7SUFDM0Isc0NBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBSZW5kZXJlcjIsIERvQ2hlY2ssIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5VGVtcGxhdGVPcHRpb25zIH0gZnJvbSAnLi9mb3JtbHkuZmllbGQuY29uZmlnJztcbmltcG9ydCB7IHdyYXBQcm9wZXJ0eSwgZGVmaW5lSGlkZGVuUHJvcCwgRk9STUxZX1ZBTElEQVRPUlMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmb3JtbHlBdHRyaWJ1dGVzXScsXG4gIGhvc3Q6IHtcbiAgICAnKGZvY3VzKSc6ICdvbkZvY3VzKCRldmVudCknLFxuICAgICcoYmx1ciknOiAnb25CbHVyKCRldmVudCknLFxuICAgICcoY2hhbmdlKSc6ICdvbkNoYW5nZSgkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5QXR0cmlidXRlcyBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgQElucHV0KCdmb3JtbHlBdHRyaWJ1dGVzJykgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50O1xuICBwcml2YXRlIHVpQXR0cmlidXRlc0NhY2hlOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSB1aUF0dHJpYnV0ZXMgPSBbXG4gICAgLi4uRk9STUxZX1ZBTElEQVRPUlMsXG4gICAgJ3RhYmluZGV4JyxcbiAgICAncGxhY2Vob2xkZXInLFxuICAgICdyZWFkb25seScsXG4gICAgJ2Rpc2FibGVkJyxcbiAgICAnc3RlcCcsXG4gIF07XG5cbiAgLyoqXG4gICAqIEhvc3RCaW5kaW5nIGRvZXNuJ3QgcmVnaXN0ZXIgbGlzdGVuZXJzIGNvbmRpdGlvbmFsbHkgd2hpY2ggbWF5IHByb2R1Y2Ugc29tZSBwZXJmIGlzc3Vlcy5cbiAgICpcbiAgICogRm9ybWx5IGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbmd4LWZvcm1seS9uZ3gtZm9ybWx5L2lzc3Vlcy8xOTkxXG4gICAqL1xuICBwcml2YXRlIHVpRXZlbnRzID0ge1xuICAgIGxpc3RlbmVyczogW10sXG4gICAgZXZlbnRzOiBbXG4gICAgICAnY2xpY2snLFxuICAgICAgJ2tleXVwJyxcbiAgICAgICdrZXlkb3duJyxcbiAgICAgICdrZXlwcmVzcycsXG4gICAgXSxcbiAgfTtcblxuICBnZXQgdG8oKTogRm9ybWx5VGVtcGxhdGVPcHRpb25zIHsgcmV0dXJuIHRoaXMuZmllbGQudGVtcGxhdGVPcHRpb25zIHx8IHt9OyB9XG5cbiAgcHJpdmF0ZSBnZXQgZmllbGRBdHRyRWxlbWVudHMoKTogRWxlbWVudFJlZltdIHsgcmV0dXJuICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGRbJ19lbGVtZW50UmVmcyddKSB8fCBbXTsgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgX2RvY3VtZW50OiBhbnksXG4gICkge1xuICAgIHRoaXMuZG9jdW1lbnQgPSBfZG9jdW1lbnQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuZmllbGQpIHtcbiAgICAgIHRoaXMuZmllbGQubmFtZSAmJiB0aGlzLnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMuZmllbGQubmFtZSk7XG4gICAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5mb3JFYWNoKGxpc3RlbmVyID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy51aUV2ZW50cy5ldmVudHMuZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgICBpZiAodGhpcy50byAmJiB0aGlzLnRvW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICB0aGlzLnVpRXZlbnRzLmxpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgIChlKSA9PiB0aGlzLnRvW2V2ZW50TmFtZV0odGhpcy5maWVsZCwgZSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy50byAmJiB0aGlzLnRvLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgd3JhcFByb3BlcnR5KHRoaXMudG8sICdhdHRyaWJ1dGVzJywgKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNWYWx1ZSkuZm9yRWFjaChhdHRyID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVbYXR0cl0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGF0dHIsIGN1cnJlbnRWYWx1ZVthdHRyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGV0YWNoRWxlbWVudFJlZihjaGFuZ2VzLmZpZWxkLnByZXZpb3VzVmFsdWUpO1xuICAgICAgdGhpcy5hdHRhY2hFbGVtZW50UmVmKGNoYW5nZXMuZmllbGQuY3VycmVudFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmZpZWxkQXR0ckVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAhdGhpcy5pZCAmJiB0aGlzLmZpZWxkLmlkICYmIHRoaXMuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuZmllbGQuaWQpO1xuICAgICAgICB3cmFwUHJvcGVydHkodGhpcy5maWVsZCwgJ2ZvY3VzJywgKHsgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUZvY3VzKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmlkKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgbmVlZCB0byByZS1ldmFsdWF0ZSBhbGwgdGhlIGF0dHJpYnV0ZXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZVxuICAgKiBieSB1c2luZyBhIEhvc3RCaW5kaW5nIHdlIHJ1biBpbnRvIGNlcnRhaW4gZWRnZSBjYXNlcy4gVGhpcyBtZWFucyB0aGF0IHdoYXRldmVyIGxvZ2ljXG4gICAqIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBzZXJpb3VzbHkgZGFtYWdpbmcgb3IgZGVzdHJveWluZyB0aGUgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEZvcm1seSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL25neC1mb3JtbHkvbmd4LWZvcm1seS9pc3N1ZXMvMTMxN1xuICAgKiBNYXRlcmlhbCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTQwMjRcbiAgICovXG4gIG5nRG9DaGVjaygpIHtcbiAgICB0aGlzLnVpQXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRvW2F0dHJdO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnVpQXR0cmlidXRlc0NhY2hlW2F0dHJdICE9PSB2YWx1ZVxuICAgICAgICAmJiAoIXRoaXMudG8uYXR0cmlidXRlcyB8fCAhdGhpcy50by5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIudG9Mb3dlckNhc2UoKSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy51aUF0dHJpYnV0ZXNDYWNoZVthdHRyXSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShhdHRyLCB2YWx1ZSA9PT0gdHJ1ZSA/IGF0dHIgOiBgJHt2YWx1ZX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51aUV2ZW50cy5saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcigpKTtcbiAgICB0aGlzLmRldGFjaEVsZW1lbnRSZWYodGhpcy5maWVsZCk7XG4gIH1cblxuICB0b2dnbGVGb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzID8gdGhpcy5maWVsZEF0dHJFbGVtZW50c1swXSA6IG51bGw7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZvY3VzZWQgPSAhIXRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgJiYgdGhpcy5maWVsZEF0dHJFbGVtZW50c1xuICAgICAgICAuc29tZSgoeyBuYXRpdmVFbGVtZW50IH0pID0+IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbmF0aXZlRWxlbWVudCB8fCBuYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpO1xuXG4gICAgaWYgKHZhbHVlICYmICFpc0ZvY3VzZWQpIHtcbiAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlICYmIGlzRm9jdXNlZCkge1xuICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5maWVsZFsnX19fJGZvY3VzJ10gPSB0cnVlO1xuICAgIGlmICh0aGlzLnRvLmZvY3VzKSB7XG4gICAgICB0aGlzLnRvLmZvY3VzKHRoaXMuZmllbGQsICRldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5maWVsZFsnX19fJGZvY3VzJ10gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50by5ibHVyKSB7XG4gICAgICB0aGlzLnRvLmJsdXIodGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRvLmNoYW5nZSkge1xuICAgICAgdGhpcy50by5jaGFuZ2UodGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoRWxlbWVudFJlZihmOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGlmICghZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmWydfZWxlbWVudFJlZnMnXSAmJiBmWydfZWxlbWVudFJlZnMnXS5pbmRleE9mKHRoaXMuZWxlbWVudFJlZikgPT09IC0xKSB7XG4gICAgICBmWydfZWxlbWVudFJlZnMnXS5wdXNoKHRoaXMuZWxlbWVudFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3AoZiwgJ19lbGVtZW50UmVmcycsIFt0aGlzLmVsZW1lbnRSZWZdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGFjaEVsZW1lbnRSZWYoZjogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBjb25zdCBpbmRleCA9IGYgJiYgZlsnX2VsZW1lbnRSZWZzJ10gPyB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzLmluZGV4T2YodGhpcy5lbGVtZW50UmVmKSA6IC0xO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmllbGRbJ19lbGVtZW50UmVmcyddLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdHRyaWJ1dGUoYXR0cjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGF0dHIsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXR0cmlidXRlKGF0dHI6IHN0cmluZykge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBhdHRyKTtcbiAgfVxufVxuIl19
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LmF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LWZvcm1seS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZm9ybWx5LmF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBNEIsU0FBUyxFQUFXLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU5SCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUszQyxNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUFrQzNCLFlBQ1UsUUFBbUIsRUFDbkIsVUFBc0IsRUFDWixTQUFjO1FBRnhCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9CeEIsc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQWEsSUFBSSxDQUFDOzs7Ozs7UUFPOUIsYUFBUSxHQUFHO1lBQ2pCLFNBQVMsRUFBRSxFQUFFO1lBQ2IsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDO1lBQzVFLFFBQVE7Ozs7O1lBQUUsQ0FBQyxTQUFpQixFQUFFLE1BQVcsRUFBRSxFQUFFO2dCQUMzQyxRQUFRLFNBQVMsRUFBRTtvQkFDakIsS0FBSyxPQUFPO3dCQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDOUIsS0FBSyxNQUFNO3dCQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0IsS0FBSyxRQUFRO3dCQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FB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Q0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7OztZQS9MRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjthQUMvQjs7OztZQVBnRSxTQUFTO1lBQXRELFVBQVU7NENBNkN6QixNQUFNLFNBQUMsUUFBUTs7O29CQXBDakIsS0FBSyxTQUFDLGtCQUFrQjtpQkFDeEIsS0FBSzs7OztJQUROLGlDQUFvRDs7SUFDcEQsOEJBQW9COzs7OztJQUVwQixvQ0FBMkI7Ozs7O0lBQzNCLDZDQUFvQzs7Ozs7SUFDcEMsd0NBQXNDOzs7Ozs7OztJQU90QyxvQ0FlRTs7Ozs7SUFPQSxvQ0FBMkI7Ozs7O0lBQzNCLHNDQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgUmVuZGVyZXIyLCBEb0NoZWNrLCBJbmplY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seVRlbXBsYXRlT3B0aW9ucyB9IGZyb20gJy4vZm9ybWx5LmZpZWxkLmNvbmZpZyc7XG5pbXBvcnQgeyB3cmFwUHJvcGVydHksIGRlZmluZUhpZGRlblByb3AsIEZPUk1MWV9WQUxJREFUT1JTIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZm9ybWx5QXR0cmlidXRlc10nLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtbHlBdHRyaWJ1dGVzIGltcGxlbWVudHMgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ2Zvcm1seUF0dHJpYnV0ZXMnKSBmaWVsZDogRm9ybWx5RmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIHByaXZhdGUgdWlBdHRyaWJ1dGVzQ2FjaGU6IGFueSA9IHt9O1xuICBwcml2YXRlIHVpQXR0cmlidXRlczogc3RyaW5nW10gPSBudWxsO1xuXG4gIC8qKlxuICAgKiBIb3N0QmluZGluZyBkb2Vzbid0IHJlZ2lzdGVyIGxpc3RlbmVycyBjb25kaXRpb25hbGx5IHdoaWNoIG1heSBwcm9kdWNlIHNvbWUgcGVyZiBpc3N1ZXMuXG4gICAqXG4gICAqIEZvcm1seSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL25neC1mb3JtbHkvbmd4LWZvcm1seS9pc3N1ZXMvMTk5MVxuICAgKi9cbiAgcHJpdmF0ZSB1aUV2ZW50cyA9IHtcbiAgICBsaXN0ZW5lcnM6IFtdLFxuICAgIGV2ZW50czogWydjbGljaycsICdrZXl1cCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJ10sXG4gICAgY2FsbGJhY2s6IChldmVudE5hbWU6IHN0cmluZywgJGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnROYW1lKSB7XG4gICAgICAgIGNhc2UgJ2ZvY3VzJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5vbkZvY3VzKCRldmVudCk7XG4gICAgICAgIGNhc2UgJ2JsdXInOlxuICAgICAgICAgIHJldHVybiB0aGlzLm9uQmx1cigkZXZlbnQpO1xuICAgICAgICBjYXNlICdjaGFuZ2UnOlxuICAgICAgICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlKCRldmVudCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudG9bZXZlbnROYW1lXSh0aGlzLmZpZWxkLCAkZXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgZ2V0IHRvKCk6IEZvcm1seVRlbXBsYXRlT3B0aW9ucyB7IHJldHVybiB0aGlzLmZpZWxkLnRlbXBsYXRlT3B0aW9ucyB8fCB7fTsgfVxuXG4gIHByaXZhdGUgZ2V0IGZpZWxkQXR0ckVsZW1lbnRzKCk6IEVsZW1lbnRSZWZbXSB7IHJldHVybiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkWydfZWxlbWVudFJlZnMnXSkgfHwgW107IH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIF9kb2N1bWVudDogYW55LFxuICApIHtcbiAgICB0aGlzLmRvY3VtZW50ID0gX2RvY3VtZW50O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmZpZWxkKSB7XG4gICAgICB0aGlzLmZpZWxkLm5hbWUgJiYgdGhpcy5zZXRBdHRyaWJ1dGUoJ25hbWUnLCB0aGlzLmZpZWxkLm5hbWUpO1xuICAgICAgdGhpcy51aUV2ZW50cy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy51aUV2ZW50cy5ldmVudHMuZm9yRWFjaCgoZXZlbnROYW1lKSA9PiB7XG4gICAgICAgIGlmICgodGhpcy50byAmJiB0aGlzLnRvW2V2ZW50TmFtZV0pIHx8IFsnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnXS5pbmRleE9mKGV2ZW50TmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy51aUV2ZW50cy5saXN0ZW5lcnMucHVzaChcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBldmVudE5hbWUsIChlKSA9PiB0aGlzLnVpRXZlbnRzLmNhbGxiYWNrKGV2ZW50TmFtZSwgZSkpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy50byAmJiB0aGlzLnRvLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgd3JhcFByb3BlcnR5KHRoaXMudG8sICdhdHRyaWJ1dGVzJywgKHsgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlIH0pID0+IHtcbiAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocHJldmlvdXNWYWx1ZSkuZm9yRWFjaChhdHRyID0+IHRoaXMucmVtb3ZlQXR0cmlidXRlKGF0dHIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWVbYXR0cl0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGF0dHIsIGN1cnJlbnRWYWx1ZVthdHRyXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGV0YWNoRWxlbWVudFJlZihjaGFuZ2VzLmZpZWxkLnByZXZpb3VzVmFsdWUpO1xuICAgICAgdGhpcy5hdHRhY2hFbGVtZW50UmVmKGNoYW5nZXMuZmllbGQuY3VycmVudFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmZpZWxkQXR0ckVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAhdGhpcy5pZCAmJiB0aGlzLmZpZWxkLmlkICYmIHRoaXMuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuZmllbGQuaWQpO1xuICAgICAgICB3cmFwUHJvcGVydHkodGhpcy5maWVsZCwgJ2ZvY3VzJywgKHsgY3VycmVudFZhbHVlIH0pID0+IHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZUZvY3VzKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmlkKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2UgbmVlZCB0byByZS1ldmFsdWF0ZSBhbGwgdGhlIGF0dHJpYnV0ZXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZVxuICAgKiBieSB1c2luZyBhIEhvc3RCaW5kaW5nIHdlIHJ1biBpbnRvIGNlcnRhaW4gZWRnZSBjYXNlcy4gVGhpcyBtZWFucyB0aGF0IHdoYXRldmVyIGxvZ2ljXG4gICAqIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBzZXJpb3VzbHkgZGFtYWdpbmcgb3IgZGVzdHJveWluZyB0aGUgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEZvcm1seSBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL25neC1mb3JtbHkvbmd4LWZvcm1seS9pc3N1ZXMvMTMxN1xuICAgKiBNYXRlcmlhbCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTQwMjRcbiAgICovXG4gIG5nRG9DaGVjaygpIHtcbiAgICBpZiAoIXRoaXMudWlBdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICB0aGlzLnVpQXR0cmlidXRlcyA9IFsuLi5GT1JNTFlfVkFMSURBVE9SUywgJ3RhYmluZGV4JywgJ3BsYWNlaG9sZGVyJywgJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJywgJ3N0ZXAnXS5maWx0ZXIoXG4gICAgICAgIChhdHRyKSA9PiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUgfHwgIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnVpQXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRvW2F0dHJdO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnVpQXR0cmlidXRlc0NhY2hlW2F0dHJdICE9PSB2YWx1ZVxuICAgICAgICAmJiAoIXRoaXMudG8uYXR0cmlidXRlcyB8fCAhdGhpcy50by5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIudG9Mb3dlckNhc2UoKSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy51aUF0dHJpYnV0ZXNDYWNoZVthdHRyXSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShhdHRyLCB2YWx1ZSA9PT0gdHJ1ZSA/IGF0dHIgOiBgJHt2YWx1ZX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51aUV2ZW50cy5saXN0ZW5lcnMuZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcigpKTtcbiAgICB0aGlzLmRldGFjaEVsZW1lbnRSZWYodGhpcy5maWVsZCk7XG4gIH1cblxuICB0b2dnbGVGb2N1cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzID8gdGhpcy5maWVsZEF0dHJFbGVtZW50c1swXSA6IG51bGw7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0ZvY3VzZWQgPSAhIXRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgICAgJiYgdGhpcy5maWVsZEF0dHJFbGVtZW50c1xuICAgICAgICAuc29tZSgoeyBuYXRpdmVFbGVtZW50IH0pID0+IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbmF0aXZlRWxlbWVudCB8fCBuYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpO1xuXG4gICAgaWYgKHZhbHVlICYmICFpc0ZvY3VzZWQpIHtcbiAgICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlICYmIGlzRm9jdXNlZCkge1xuICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5maWVsZFsnX19fJGZvY3VzJ10gPSB0cnVlO1xuICAgIGlmICh0aGlzLnRvLmZvY3VzKSB7XG4gICAgICB0aGlzLnRvLmZvY3VzKHRoaXMuZmllbGQsICRldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5maWVsZFsnX19fJGZvY3VzJ10gPSBmYWxzZTtcbiAgICBpZiAodGhpcy50by5ibHVyKSB7XG4gICAgICB0aGlzLnRvLmJsdXIodGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRvLmNoYW5nZSkge1xuICAgICAgdGhpcy50by5jaGFuZ2UodGhpcy5maWVsZCwgJGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoRWxlbWVudFJlZihmOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGlmICghZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmWydfZWxlbWVudFJlZnMnXSAmJiBmWydfZWxlbWVudFJlZnMnXS5pbmRleE9mKHRoaXMuZWxlbWVudFJlZikgPT09IC0xKSB7XG4gICAgICBmWydfZWxlbWVudFJlZnMnXS5wdXNoKHRoaXMuZWxlbWVudFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZUhpZGRlblByb3AoZiwgJ19lbGVtZW50UmVmcycsIFt0aGlzLmVsZW1lbnRSZWZdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGFjaEVsZW1lbnRSZWYoZjogRm9ybWx5RmllbGRDb25maWcpIHtcbiAgICBjb25zdCBpbmRleCA9IGYgJiYgZlsnX2VsZW1lbnRSZWZzJ10gPyB0aGlzLmZpZWxkQXR0ckVsZW1lbnRzLmluZGV4T2YodGhpcy5lbGVtZW50UmVmKSA6IC0xO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmllbGRbJ19lbGVtZW50UmVmcyddLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRBdHRyaWJ1dGUoYXR0cjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGF0dHIsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXR0cmlidXRlKGF0dHI6IHN0cmluZykge1xuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBhdHRyKTtcbiAgfVxufVxuIl19
@@ -13,7 +13,7 @@ export { FieldWrapper } from './templates/field.wrapper';
13
13
  export { FormlyModule } from './core.module';
14
14
  export { defineHiddenProp as ɵdefineHiddenProp } from './utils';
15
15
  export { reverseDeepMerge as ɵreverseDeepMerge } from './utils';
16
- export { getFieldInitialValue as ɵgetFieldInitialValue } from './utils';
16
+ export { getFieldValue as ɵgetFieldValue } from './utils';
17
17
  export { clone as ɵclone } from './utils';
18
18
  export { wrapProperty as ɵwrapProperty } from './utils';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtZm9ybWx5L2NvcmUvIiwic291cmNlcyI6WyJsaWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBaUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxJQUFJLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEZvcm1seUZvcm0gfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZvcm0nO1xuZXhwb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seVRlbXBsYXRlT3B0aW9ucywgRm9ybWx5Rm9ybU9wdGlvbnMgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZpZWxkLmNvbmZpZyc7XG5leHBvcnQgeyBGb3JtbHlGaWVsZCB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtbHkuZmllbGQnO1xuZXhwb3J0IHsgRm9ybWx5QXR0cmlidXRlcyB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtbHkuYXR0cmlidXRlcyc7XG5leHBvcnQgeyBGT1JNTFlfQ09ORklHLCBGb3JtbHlDb25maWcsIENvbmZpZ09wdGlvbiwgRm9ybWx5RXh0ZW5zaW9uIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3JtbHkuY29uZmlnJztcbmV4cG9ydCB7IEZvcm1seUZvcm1CdWlsZGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy9mb3JtbHkuZm9ybS5idWlsZGVyJztcbmV4cG9ydCB7IEZpZWxkVHlwZSwgRmllbGQgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC50eXBlJztcbmV4cG9ydCB7IEZpZWxkQXJyYXlUeXBlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZmllbGQtYXJyYXkudHlwZSc7XG5leHBvcnQgeyBGaWVsZFdyYXBwZXIgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC53cmFwcGVyJztcbmV4cG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJy4vY29yZS5tb2R1bGUnO1xuZXhwb3J0IHsgZGVmaW5lSGlkZGVuUHJvcCBhcyDJtWRlZmluZUhpZGRlblByb3AgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IHJldmVyc2VEZWVwTWVyZ2UgYXMgybVyZXZlcnNlRGVlcE1lcmdlIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBnZXRGaWVsZEluaXRpYWxWYWx1ZSBhcyDJtWdldEZpZWxkSW5pdGlhbFZhbHVlIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBjbG9uZSBhcyDJtWNsb25lIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyB3cmFwUHJvcGVydHkgYXMgybV3cmFwUHJvcGVydHkgfSBmcm9tICcuL3V0aWxzJztcbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtZm9ybWx5L2NvcmUvIiwic291cmNlcyI6WyJsaWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBaUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLElBQUksY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLElBQUksYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRm9ybWx5Rm9ybSB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtbHkuZm9ybSc7XG5leHBvcnQgeyBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5VGVtcGxhdGVPcHRpb25zLCBGb3JtbHlGb3JtT3B0aW9ucyB9IGZyb20gJy4vY29tcG9uZW50cy9mb3JtbHkuZmllbGQuY29uZmlnJztcbmV4cG9ydCB7IEZvcm1seUZpZWxkIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1seS5maWVsZCc7XG5leHBvcnQgeyBGb3JtbHlBdHRyaWJ1dGVzIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zvcm1seS5hdHRyaWJ1dGVzJztcbmV4cG9ydCB7IEZPUk1MWV9DT05GSUcsIEZvcm1seUNvbmZpZywgQ29uZmlnT3B0aW9uLCBGb3JtbHlFeHRlbnNpb24gfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuZXhwb3J0IHsgRm9ybWx5Rm9ybUJ1aWxkZXIgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5mb3JtLmJ1aWxkZXInO1xuZXhwb3J0IHsgRmllbGRUeXBlLCBGaWVsZCB9IGZyb20gJy4vdGVtcGxhdGVzL2ZpZWxkLnR5cGUnO1xuZXhwb3J0IHsgRmllbGRBcnJheVR5cGUgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC1hcnJheS50eXBlJztcbmV4cG9ydCB7IEZpZWxkV3JhcHBlciB9IGZyb20gJy4vdGVtcGxhdGVzL2ZpZWxkLndyYXBwZXInO1xuZXhwb3J0IHsgRm9ybWx5TW9kdWxlIH0gZnJvbSAnLi9jb3JlLm1vZHVsZSc7XG5leHBvcnQgeyBkZWZpbmVIaWRkZW5Qcm9wIGFzIMm1ZGVmaW5lSGlkZGVuUHJvcCB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHsgcmV2ZXJzZURlZXBNZXJnZSBhcyDJtXJldmVyc2VEZWVwTWVyZ2UgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IGdldEZpZWxkVmFsdWUgYXMgybVnZXRGaWVsZFZhbHVlIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyBjbG9uZSBhcyDJtWNsb25lIH0gZnJvbSAnLi91dGlscyc7XG5leHBvcnQgeyB3cmFwUHJvcGVydHkgYXMgybV3cmFwUHJvcGVydHkgfSBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -103,6 +103,7 @@ export class CoreExtension {
103
103
  id: getFieldId(`formly_${this.formId}`, field, field['index']),
104
104
  hooks: {},
105
105
  modelOptions: {},
106
+ validation: { messages: {} },
106
107
  templateOptions: !field.type || !field.key ? {} : {
107
108
  label: '',
108
109
  placeholder: '',
@@ -227,4 +228,4 @@ if (false) {
227
228
  */
228
229
  CoreExtension.prototype.formlyConfig;
229
230
  }
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtZm9ybWx5L2NvcmUvIiwic291cmNlcyI6WyJsaWIvZXh0ZW5zaW9ucy9jb3JlL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQUd6RyxNQUFNLE9BQU8sYUFBYTs7OztJQUV4QixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUR0QyxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQytCLENBQUM7Ozs7O0lBRW5ELFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU87U0FDUjs7Y0FFSyxlQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYztRQUNsSCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxjQUFjLENBQUMsRUFBRTtZQUM5RixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDOztzQkFDNUYsVUFBVSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsbUJBQVcsS0FBSyxDQUFDLFdBQVcsRUFBQSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdHLElBQUksQ0FB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Q0FBQyxXQUFXLENBQUMsR0FBRzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFDO1NBQzVELENBQUMsTUFBTTs7Ozs7O1FBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7SUFDcEQsQ0FBQzs7Ozs7O0lBRU8seUJBQXlCLENBQUMsS0FBNkI7O2NBQ3ZELFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQzs7Y0FDM0QsUUFBUSxHQUFvQixZQUFZLENBQUMsQ0FBQyxDQUFDLG1CQUFBLFlBQVksQ0FBQyxRQUFRLEVBQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUVsRixPQUFPO1lBQ0wsV0FBVzs7O1lBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3RFLFVBQVU7OztZQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuRSxZQUFZOzs7WUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDMUUsQ0FBQztJQUNKLENBQUM7Q0FDRjs7Ozs7O0lBM0lDLCtCQUFtQjs7Ozs7SUFDUCxxQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtbHlFeHRlbnNpb24sIEZvcm1seUNvbmZpZywgVGVtcGxhdGVNYW5pcHVsYXRvcnMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtbHkuY29uZmlnJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtbHkuZmllbGQuY29uZmlnJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldEZpZWxkSWQsIGlzVW5kZWZpbmVkLCBnZXRGaWVsZFZhbHVlLCByZXZlcnNlRGVlcE1lcmdlLCBhc3NpZ25GaWVsZFZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vKiogQGV4cGVyaW1lbnRhbCAqL1xuZXhwb3J0IGNsYXNzIENvcmVFeHRlbnNpb24gaW1wbGVtZW50cyBGb3JtbHlFeHRlbnNpb24ge1xuICBwcml2YXRlIGZvcm1JZCA9IDA7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybWx5Q29uZmlnOiBGb3JtbHlDb25maWcpIHsgfVxuXG4gIHByZVBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgdGhpcy5nZXRGaWVsZENvbXBvbmVudEluc3RhbmNlKGZpZWxkKS5wcmVQb3B1bGF0ZSgpO1xuICAgIGlmIChmaWVsZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFRyYW5zZm9ybXMgPSAoZmllbGQub3B0aW9ucyAmJiBmaWVsZC5vcHRpb25zLmZpZWxkVHJhbnNmb3JtKSB8fCB0aGlzLmZvcm1seUNvbmZpZy5leHRyYXMuZmllbGRUcmFuc2Zvcm07XG4gICAgKEFycmF5LmlzQXJyYXkoZmllbGRUcmFuc2Zvcm1zKSA/IGZpZWxkVHJhbnNmb3JtcyA6IFtmaWVsZFRyYW5zZm9ybXNdKS5mb3JFYWNoKGZpZWxkVHJhbnNmb3JtID0+IHtcbiAgICAgIGlmIChmaWVsZFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYE5neEZvcm1seTogZmllbGRUcmFuc2Zvcm0gaXMgZGVwcmVjYXRlZCBzaW5jZSB2NS4wLCB1c2UgY3VzdG9tIGV4dGVuc2lvbiBpbnN0ZWFkLmApO1xuICAgICAgICBjb25zdCBmaWVsZEdyb3VwID0gZmllbGRUcmFuc2Zvcm0oZmllbGQuZmllbGRHcm91cCwgZmllbGQubW9kZWwsIDxGb3JtR3JvdXA+ZmllbGQuZm9ybUNvbnRyb2wsIGZpZWxkLm9wdGlvbnMpO1xuICAgICAgICBpZiAoIWZpZWxkR3JvdXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpZWxkVHJhbnNmb3JtIG11c3QgcmV0dXJuIGFuIGFycmF5IG9mIGZpZWxkcycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgdGhpcy5pbml0RmllbGRPcHRpb25zKGZpZWxkKTtcbiAgICB0aGlzLmdldEZpZWxkQ29tcG9uZW50SW5zdGFuY2UoZmllbGQpLm9uUG9wdWxhdGUoKTtcbiAgICBpZiAoZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgZmllbGQuZmllbGRHcm91cC5mb3JFYWNoKChmLCBpbmRleCkgPT4ge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ3BhcmVudCcsIHsgZ2V0OiAoKSA9PiBmaWVsZCwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ2luZGV4JywgeyBnZXQ6ICgpID0+IGluZGV4LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZm9ybUlkKys7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwb3N0UG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmdldEZpZWxkQ29tcG9uZW50SW5zdGFuY2UoZmllbGQpLnBvc3RQb3B1bGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmllbGRPcHRpb25zKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgY29uc3Qgcm9vdCA9IDxGb3JtbHlGaWVsZENvbmZpZ0NhY2hlPiBmaWVsZC5wYXJlbnQ7XG4gICAgaWYgKCFyb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnZm9ybScsIHsgZ2V0OiAoKSA9PiByb290LmZvcm1Db250cm9sLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnb3B0aW9ucycsIHsgZ2V0OiAoKSA9PiByb290Lm9wdGlvbnMsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdtb2RlbCcsIHtcbiAgICAgIGdldDogKCkgPT4gZmllbGQua2V5ICYmIGZpZWxkLmZpZWxkR3JvdXAgPyBnZXRGaWVsZFZhbHVlKGZpZWxkKSA6IHJvb3QubW9kZWwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXZlcnNlRGVlcE1lcmdlKGZpZWxkLCB7XG4gICAgICBpZDogZ2V0RmllbGRJZChgZm9ybWx5XyR7dGhpcy5mb3JtSWR9YCwgZmllbGQsIGZpZWxkWydpbmRleCddKSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIG1vZGVsT3B0aW9uczoge30sXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6ICFmaWVsZC50eXBlIHx8ICFmaWVsZC5rZXkgPyB7fSA6IHtcbiAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmZvcm1seUNvbmZpZy5leHRyYXMucmVzZXRGaWVsZE9uSGlkZSAmJiBmaWVsZC5yZXNldE9uSGlkZSAhPT0gZmFsc2UpIHtcbiAgICAgIGZpZWxkLnJlc2V0T25IaWRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQubGlmZWN5Y2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5neEZvcm1seTogJ2xpZmVjeWNsZScgaXMgZGVwcmVjYXRlZCBzaW5jZSB2NS4wLCB1c2UgJ2hvb2tzJyBpbnN0ZWFkLmApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdmb3JtbHktdGVtcGxhdGUnXG4gICAgICAmJiAoXG4gICAgICAgIGZpZWxkLnRlbXBsYXRlXG4gICAgICAgIHx8IChmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyAmJiBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcy50ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTmd4Rm9ybWx5OiBwYXNzaW5nICd0eXBlJyBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCB3aGVuICd0ZW1wbGF0ZScgaXMgc2V0LmApO1xuICAgICAgfVxuICAgICAgZmllbGQudHlwZSA9ICdmb3JtbHktdGVtcGxhdGUnO1xuICAgIH1cblxuICAgIGlmICghZmllbGQudHlwZSAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ2Zvcm1seS1ncm91cCc7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgIHRoaXMuZm9ybWx5Q29uZmlnLmdldE1lcmdlZEZpZWxkKGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQucGFyZW50KSB7XG4gICAgICBsZXQgc2V0RGVmYXVsdFZhbHVlID0gIWlzVW5kZWZpbmVkKGZpZWxkLmtleSlcbiAgICAgICAgJiYgIWlzVW5kZWZpbmVkKGZpZWxkLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgJiYgaXNVbmRlZmluZWQoZ2V0RmllbGRWYWx1ZShmaWVsZCkpXG4gICAgICAgICYmICghZmllbGQucmVzZXRPbkhpZGUgfHwgIShmaWVsZC5oaWRlIHx8IGZpZWxkLmhpZGVFeHByZXNzaW9uKSk7XG4gICAgICBpZiAoc2V0RGVmYXVsdFZhbHVlICYmIGZpZWxkLnJlc2V0T25IaWRlKSB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBmaWVsZC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC5oaWRlRXhwcmVzc2lvbiAmJiAhcGFyZW50LmhpZGUpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHNldERlZmF1bHRWYWx1ZSA9ICFwYXJlbnQgfHwgIShwYXJlbnQuaGlkZUV4cHJlc3Npb24gfHwgcGFyZW50LmhpZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0RGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RmllbGRXcmFwcGVycyhmaWVsZCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZFdyYXBwZXJzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGZpZWxkLndyYXBwZXJzID0gZmllbGQud3JhcHBlcnMgfHwgW107XG4gICAgY29uc3QgZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9yczogVGVtcGxhdGVNYW5pcHVsYXRvcnMgPSB7XG4gICAgICBwcmVXcmFwcGVyOiBbXSxcbiAgICAgIHBvc3RXcmFwcGVyOiBbXSxcbiAgICAgIC4uLihmaWVsZC50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVNYW5pcHVsYXRvcnMgfHwge30pLFxuICAgIH07XG5cbiAgICBmaWVsZC53cmFwcGVycyA9IFtcbiAgICAgIC4uLnRoaXMuZm9ybWx5Q29uZmlnLnRlbXBsYXRlTWFuaXB1bGF0b3JzLnByZVdyYXBwZXIubWFwKG0gPT4gbShmaWVsZCkpLFxuICAgICAgLi4uZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9ycy5wcmVXcmFwcGVyLm1hcChtID0+IG0oZmllbGQpKSxcbiAgICAgIC4uLmZpZWxkLndyYXBwZXJzLFxuICAgICAgLi4udGhpcy5mb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucG9zdFdyYXBwZXIubWFwKG0gPT4gbShmaWVsZCkpLFxuICAgICAgLi4uZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9ycy5wb3N0V3JhcHBlci5tYXAobSA9PiBtKGZpZWxkKSksXG4gICAgXS5maWx0ZXIoKGVsLCBpLCBhKSA9PiBlbCAmJiBpID09PSBhLmluZGV4T2YoZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuZm9ybWx5Q29uZmlnLnJlc29sdmVGaWVsZFR5cGVSZWYoZmllbGQpO1xuICAgIGNvbnN0IGluc3RhbmNlOiBGb3JtbHlFeHRlbnNpb24gPSBjb21wb25lbnRSZWYgPyBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55IDoge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJlUG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLnByZVBvcHVsYXRlICYmIGluc3RhbmNlLnByZVBvcHVsYXRlKGZpZWxkKSxcbiAgICAgIG9uUG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLm9uUG9wdWxhdGUgJiYgaW5zdGFuY2Uub25Qb3B1bGF0ZShmaWVsZCksXG4gICAgICBwb3N0UG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLnBvc3RQb3B1bGF0ZSAmJiBpbnN0YW5jZS5wb3N0UG9wdWxhdGUoZmllbGQpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3gtZm9ybWx5L2NvcmUvIiwic291cmNlcyI6WyJsaWIvZXh0ZW5zaW9ucy9jb3JlL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQUd6RyxNQUFNLE9BQU8sYUFBYTs7OztJQUV4QixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUR0QyxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQytCLENBQUM7Ozs7O0lBRW5ELFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU87U0FDUjs7Y0FFSyxlQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsY0FBYztRQUNsSCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxjQUFjLENBQUMsRUFBRTtZQUM5RixJQUFJLGNBQWMsRUFBRTtnQkFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxtRkFBbUYsQ0FBQyxDQUFDOztzQkFDNUYsVUFBVSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsbUJBQVcsS0FBSyxDQUFDLFdBQVcsRUFBQSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdHLElBQUksQ0FB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QUMsQ0FBQyxLQUFLLENBQUMsRUFBQztZQUN4RSxHQUFHLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxHQUFHOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUM7U0FDNUQsQ0FBQyxNQUFNOzs7Ozs7UUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztJQUNwRCxDQUFDOzs7Ozs7SUFFTyx5QkFBeUIsQ0FBQyxLQUE2Qjs7Y0FDdkQsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDOztjQUMzRCxRQUFRLEdBQW9CLFlBQVksQ0FBQyxDQUFDLENBQUMsbUJBQUEsWUFBWSxDQUFDLFFBQVEsRUFBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBRWxGLE9BQU87WUFDTCxXQUFXOzs7WUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDdEUsVUFBVTs7O1lBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ25FLFlBQVk7OztZQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUMxRSxDQUFDO0lBQ0osQ0FBQztDQUNGOzs7Ozs7SUE1SUMsK0JBQW1COzs7OztJQUNQLHFDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1seUV4dGVuc2lvbiwgRm9ybWx5Q29uZmlnLCBUZW1wbGF0ZU1hbmlwdWxhdG9ycyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWdDYWNoZSwgRm9ybWx5RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Zvcm1seS5maWVsZC5jb25maWcnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0RmllbGRJZCwgaXNVbmRlZmluZWQsIGdldEZpZWxkVmFsdWUsIHJldmVyc2VEZWVwTWVyZ2UsIGFzc2lnbkZpZWxkVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8qKiBAZXhwZXJpbWVudGFsICovXG5leHBvcnQgY2xhc3MgQ29yZUV4dGVuc2lvbiBpbXBsZW1lbnRzIEZvcm1seUV4dGVuc2lvbiB7XG4gIHByaXZhdGUgZm9ybUlkID0gMDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtbHlDb25maWc6IEZvcm1seUNvbmZpZykgeyB9XG5cbiAgcHJlUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmdldEZpZWxkQ29tcG9uZW50SW5zdGFuY2UoZmllbGQpLnByZVBvcHVsYXRlKCk7XG4gICAgaWYgKGZpZWxkLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkVHJhbnNmb3JtcyA9IChmaWVsZC5vcHRpb25zICYmIGZpZWxkLm9wdGlvbnMuZmllbGRUcmFuc2Zvcm0pIHx8IHRoaXMuZm9ybWx5Q29uZmlnLmV4dHJhcy5maWVsZFRyYW5zZm9ybTtcbiAgICAoQXJyYXkuaXNBcnJheShmaWVsZFRyYW5zZm9ybXMpID8gZmllbGRUcmFuc2Zvcm1zIDogW2ZpZWxkVHJhbnNmb3Jtc10pLmZvckVhY2goZmllbGRUcmFuc2Zvcm0gPT4ge1xuICAgICAgaWYgKGZpZWxkVHJhbnNmb3JtKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTmd4Rm9ybWx5OiBmaWVsZFRyYW5zZm9ybSBpcyBkZXByZWNhdGVkIHNpbmNlIHY1LjAsIHVzZSBjdXN0b20gZXh0ZW5zaW9uIGluc3RlYWQuYCk7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBmaWVsZFRyYW5zZm9ybShmaWVsZC5maWVsZEdyb3VwLCBmaWVsZC5tb2RlbCwgPEZvcm1Hcm91cD5maWVsZC5mb3JtQ29udHJvbCwgZmllbGQub3B0aW9ucyk7XG4gICAgICAgIGlmICghZmllbGRHcm91cCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmllbGRUcmFuc2Zvcm0gbXVzdCByZXR1cm4gYW4gYXJyYXkgb2YgZmllbGRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uUG9wdWxhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICB0aGlzLmluaXRGaWVsZE9wdGlvbnMoZmllbGQpO1xuICAgIHRoaXMuZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZCkub25Qb3B1bGF0ZSgpO1xuICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC5maWVsZEdyb3VwLmZvckVhY2goKGYsIGluZGV4KSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAncGFyZW50JywgeyBnZXQ6ICgpID0+IGZpZWxkLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCAnaW5kZXgnLCB7IGdldDogKCkgPT4gaW5kZXgsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5mb3JtSWQrKztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHBvc3RQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIHRoaXMuZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZCkucG9zdFBvcHVsYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZE9wdGlvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICBjb25zdCByb290ID0gPEZvcm1seUZpZWxkQ29uZmlnQ2FjaGU+IGZpZWxkLnBhcmVudDtcbiAgICBpZiAoIXJvb3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdmb3JtJywgeyBnZXQ6ICgpID0+IHJvb3QuZm9ybUNvbnRyb2wsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdvcHRpb25zJywgeyBnZXQ6ICgpID0+IHJvb3Qub3B0aW9ucywgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ21vZGVsJywge1xuICAgICAgZ2V0OiAoKSA9PiBmaWVsZC5rZXkgJiYgZmllbGQuZmllbGRHcm91cCA/IGdldEZpZWxkVmFsdWUoZmllbGQpIDogcm9vdC5tb2RlbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJldmVyc2VEZWVwTWVyZ2UoZmllbGQsIHtcbiAgICAgIGlkOiBnZXRGaWVsZElkKGBmb3JtbHlfJHt0aGlzLmZvcm1JZH1gLCBmaWVsZCwgZmllbGRbJ2luZGV4J10pLFxuICAgICAgaG9va3M6IHt9LFxuICAgICAgbW9kZWxPcHRpb25zOiB7fSxcbiAgICAgIHZhbGlkYXRpb246IHsgbWVzc2FnZXM6IHt9IH0sXG4gICAgICB0ZW1wbGF0ZU9wdGlvbnM6ICFmaWVsZC50eXBlIHx8ICFmaWVsZC5rZXkgPyB7fSA6IHtcbiAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmZvcm1seUNvbmZpZy5leHRyYXMucmVzZXRGaWVsZE9uSGlkZSAmJiBmaWVsZC5yZXNldE9uSGlkZSAhPT0gZmFsc2UpIHtcbiAgICAgIGZpZWxkLnJlc2V0T25IaWRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQubGlmZWN5Y2xlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYE5neEZvcm1seTogJ2xpZmVjeWNsZScgaXMgZGVwcmVjYXRlZCBzaW5jZSB2NS4wLCB1c2UgJ2hvb2tzJyBpbnN0ZWFkLmApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGZpZWxkLnR5cGUgIT09ICdmb3JtbHktdGVtcGxhdGUnXG4gICAgICAmJiAoXG4gICAgICAgIGZpZWxkLnRlbXBsYXRlXG4gICAgICAgIHx8IChmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyAmJiBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcy50ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChmaWVsZC50eXBlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTmd4Rm9ybWx5OiBwYXNzaW5nICd0eXBlJyBwcm9wZXJ0eSBpcyBub3QgYWxsb3dlZCB3aGVuICd0ZW1wbGF0ZScgaXMgc2V0LmApO1xuICAgICAgfVxuICAgICAgZmllbGQudHlwZSA9ICdmb3JtbHktdGVtcGxhdGUnO1xuICAgIH1cblxuICAgIGlmICghZmllbGQudHlwZSAmJiBmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ2Zvcm1seS1ncm91cCc7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgIHRoaXMuZm9ybWx5Q29uZmlnLmdldE1lcmdlZEZpZWxkKGZpZWxkKTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQucGFyZW50KSB7XG4gICAgICBsZXQgc2V0RGVmYXVsdFZhbHVlID0gIWlzVW5kZWZpbmVkKGZpZWxkLmtleSlcbiAgICAgICAgJiYgIWlzVW5kZWZpbmVkKGZpZWxkLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgJiYgaXNVbmRlZmluZWQoZ2V0RmllbGRWYWx1ZShmaWVsZCkpXG4gICAgICAgICYmICghZmllbGQucmVzZXRPbkhpZGUgfHwgIShmaWVsZC5oaWRlIHx8IGZpZWxkLmhpZGVFeHByZXNzaW9uKSk7XG4gICAgICBpZiAoc2V0RGVmYXVsdFZhbHVlICYmIGZpZWxkLnJlc2V0T25IaWRlKSB7XG4gICAgICAgIGxldCBwYXJlbnQgPSBmaWVsZC5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC5oaWRlRXhwcmVzc2lvbiAmJiAhcGFyZW50LmhpZGUpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHNldERlZmF1bHRWYWx1ZSA9ICFwYXJlbnQgfHwgIShwYXJlbnQuaGlkZUV4cHJlc3Npb24gfHwgcGFyZW50LmhpZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2V0RGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RmllbGRXcmFwcGVycyhmaWVsZCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZFdyYXBwZXJzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZykge1xuICAgIGZpZWxkLndyYXBwZXJzID0gZmllbGQud3JhcHBlcnMgfHwgW107XG4gICAgY29uc3QgZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9yczogVGVtcGxhdGVNYW5pcHVsYXRvcnMgPSB7XG4gICAgICBwcmVXcmFwcGVyOiBbXSxcbiAgICAgIHBvc3RXcmFwcGVyOiBbXSxcbiAgICAgIC4uLihmaWVsZC50ZW1wbGF0ZU9wdGlvbnMudGVtcGxhdGVNYW5pcHVsYXRvcnMgfHwge30pLFxuICAgIH07XG5cbiAgICBmaWVsZC53cmFwcGVycyA9IFtcbiAgICAgIC4uLnRoaXMuZm9ybWx5Q29uZmlnLnRlbXBsYXRlTWFuaXB1bGF0b3JzLnByZVdyYXBwZXIubWFwKG0gPT4gbShmaWVsZCkpLFxuICAgICAgLi4uZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9ycy5wcmVXcmFwcGVyLm1hcChtID0+IG0oZmllbGQpKSxcbiAgICAgIC4uLmZpZWxkLndyYXBwZXJzLFxuICAgICAgLi4udGhpcy5mb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucG9zdFdyYXBwZXIubWFwKG0gPT4gbShmaWVsZCkpLFxuICAgICAgLi4uZmllbGRUZW1wbGF0ZU1hbmlwdWxhdG9ycy5wb3N0V3JhcHBlci5tYXAobSA9PiBtKGZpZWxkKSksXG4gICAgXS5maWx0ZXIoKGVsLCBpLCBhKSA9PiBlbCAmJiBpID09PSBhLmluZGV4T2YoZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuZm9ybWx5Q29uZmlnLnJlc29sdmVGaWVsZFR5cGVSZWYoZmllbGQpO1xuICAgIGNvbnN0IGluc3RhbmNlOiBGb3JtbHlFeHRlbnNpb24gPSBjb21wb25lbnRSZWYgPyBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55IDoge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJlUG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLnByZVBvcHVsYXRlICYmIGluc3RhbmNlLnByZVBvcHVsYXRlKGZpZWxkKSxcbiAgICAgIG9uUG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLm9uUG9wdWxhdGUgJiYgaW5zdGFuY2Uub25Qb3B1bGF0ZShmaWVsZCksXG4gICAgICBwb3N0UG9wdWxhdGU6ICgpID0+IGluc3RhbmNlLnBvc3RQb3B1bGF0ZSAmJiBpbnN0YW5jZS5wb3N0UG9wdWxhdGUoZmllbGQpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==