@po-ui/ng-components 6.13.1 → 6.14.0

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.
@@ -101,6 +101,15 @@ export class PoComboBaseComponent {
101
101
  *
102
102
  */
103
103
  this.ngModelChange = new EventEmitter();
104
+ /**
105
+ * @optional
106
+ *
107
+ * @description
108
+ *
109
+ * Deve ser informada uma função que será disparada quando houver alterações no Search input. A função receberá como argumento o input modificado.
110
+ *
111
+ */
112
+ this.inputChange = new EventEmitter();
104
113
  this.cacheOptions = [];
105
114
  this.firstInWriteValue = true;
106
115
  this.isFirstFilter = true;
@@ -748,7 +757,7 @@ export class PoComboBaseComponent {
748
757
  }
749
758
  }
750
759
  PoComboBaseComponent.ɵfac = function PoComboBaseComponent_Factory(t) { return new (t || PoComboBaseComponent)(i0.ɵɵdirectiveInject(i1.PoLanguageService)); };
751
- PoComboBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoComboBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], help: ["p-help", "help"], name: "name", filterService: ["p-filter-service", "filterService"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], infiniteScrollDistance: ["p-infinite-scroll-distance", "infiniteScrollDistance"], icon: ["p-icon", "icon"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], emitObjectValue: ["p-emit-object-value", "emitObjectValue"], disabledTabFilter: ["p-disabled-tab-filter", "disabledTabFilter"], placeholder: ["p-placeholder", "placeholder"], debounceTime: ["p-debounce-time", "debounceTime"], disabledInitFilter: ["p-disabled-init-filter", "disabledInitFilter"], fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterMinlength: ["p-filter-minlength", "filterMinlength"], required: ["p-required", "required"], changeOnEnter: ["p-change-on-enter", "changeOnEnter"], disabled: ["p-disabled", "disabled"], sort: ["p-sort", "sort"], options: ["p-options", "options"], filterMode: ["p-filter-mode", "filterMode"], filterParams: ["p-filter-params", "filterParams"], literals: ["p-literals", "literals"] }, outputs: { change: "p-change", ngModelChange: "ngModelChange" } });
760
+ PoComboBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoComboBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], help: ["p-help", "help"], name: "name", filterService: ["p-filter-service", "filterService"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], infiniteScrollDistance: ["p-infinite-scroll-distance", "infiniteScrollDistance"], icon: ["p-icon", "icon"], optional: ["p-optional", "optional"], clean: ["p-clean", "clean"], emitObjectValue: ["p-emit-object-value", "emitObjectValue"], disabledTabFilter: ["p-disabled-tab-filter", "disabledTabFilter"], placeholder: ["p-placeholder", "placeholder"], debounceTime: ["p-debounce-time", "debounceTime"], disabledInitFilter: ["p-disabled-init-filter", "disabledInitFilter"], fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterMinlength: ["p-filter-minlength", "filterMinlength"], required: ["p-required", "required"], changeOnEnter: ["p-change-on-enter", "changeOnEnter"], disabled: ["p-disabled", "disabled"], sort: ["p-sort", "sort"], options: ["p-options", "options"], filterMode: ["p-filter-mode", "filterMode"], filterParams: ["p-filter-params", "filterParams"], literals: ["p-literals", "literals"] }, outputs: { change: "p-change", ngModelChange: "ngModelChange", inputChange: "p-input-change" } });
752
761
  __decorate([
753
762
  InputBoolean()
754
763
  ], PoComboBaseComponent.prototype, "autoFocus", void 0);
@@ -805,6 +814,9 @@ __decorate([
805
814
  }], ngModelChange: [{
806
815
  type: Output,
807
816
  args: ['ngModelChange']
817
+ }], inputChange: [{
818
+ type: Output,
819
+ args: ['p-input-change']
808
820
  }], placeholder: [{
809
821
  type: Input,
810
822
  args: ['p-placeholder']
@@ -848,4 +860,4 @@ __decorate([
848
860
  type: Input,
849
861
  args: ['p-literals']
850
862
  }] }); })();
851
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQU9oRSxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUM3QyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxlQUFlO0tBQ3hCO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsc0JBQXNCO0tBQy9CO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsd0JBQXdCO0tBQ2pDO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsbUJBQW1CO0tBQzVCO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUE2ZnhDLFlBQVksZUFBa0M7UUE1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a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBa0JlLHNCQUFzQjtrQkFBOUQsS0FBSzttQkFBQyw0QkFBNEI7WUFpQ2xCLElBQUk7a0JBQXBCLEtBQUs7bUJBQUMsUUFBUTtZQWVNLFFBQVE7a0JBQTVCLEtBQUs7bUJBQUMsWUFBWTtZQUdlLEtBQUs7a0JBQXRDLEtBQUs7bUJBQUMsU0FBUztZQVc4QixlQUFlO2tCQUE1RCxLQUFLO21CQUFDLHFCQUFxQjtZQVdvQixpQkFBaUI7a0JBQWhFLEtBQUs7bUJBQUMsdUJBQXVCO1lBV1YsTUFBTTtrQkFBekIsTUFBTTttQkFBQyxVQUFVO1lBaUJPLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQWlESyxXQUFXO2tCQUF0QyxLQUFLO21CQUFDLGVBQWU7WUFpQlEsWUFBWTtrQkFBekMsS0FBSzttQkFBQyxpQkFBaUI7WUFtQmEsa0JBQWtCO2tCQUF0RCxLQUFLO21CQUFDLHdCQUF3QjtZQW9CSCxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUF3Qk0sVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBb0JXLGVBQWU7a0JBQS9DLEtBQUs7bUJBQUMsb0JBQW9CO1lBa0JGLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQWtCYSxhQUFhO2tCQUE1QyxLQUFLO21CQUFDLG1CQUFtQjtZQWdCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFXRSxJQUFJO2tCQUF4QixLQUFLO21CQUFDLFFBQVE7WUFzQlMsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBcUJVLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQTRCUSxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQWtDQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBpc1R5cGVvZiwgdmFsaWRWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgUG9Db21ib0ZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJNb2RlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXItbW9kZS5lbnVtJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb0NvbWJvR3JvdXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9MaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24tZ3JvdXAuaW50ZXJmYWNlJztcblxuY29uc3QgUE9fQ09NQk9fREVCT1VOQ0VfVElNRV9ERUZBVUxUID0gNDAwO1xuY29uc3QgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVCA9ICdsYWJlbCc7XG5jb25zdCBQT19DT01CT19GSUVMRF9WQUxVRV9ERUZBVUxUID0gJ3ZhbHVlJztcblxuZXhwb3J0IGNvbnN0IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdObyBkYXRhIGZvdW5kJ1xuICB9LFxuICBlczogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAnRGF0b3Mgbm8gZW5jb250cmFkb3MnXG4gIH0sXG4gIHB0OiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJ1xuICB9LFxuICBydTogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAn0JTQsNC90L3Ri9C1INC90LUg0L3QsNC50LTQtdC90YsnXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tY29tYm9gIGV4aWJlIHVtYSBsaXN0YSBkZSBvcMOnw7VlcyBjb20gZsOhY2lsIHNlbGXDp8OjbyBlIGZpbHRyYWdlbS5cbiAqXG4gKiBBbMOpbSBkYSBleGliacOnw6NvIHBhZHLDo28sIG5lbGUgw6kgcG9zc8OtdmVsIGxpc3RhciBhcyBvcMO1ZXMgZW0gYWdydXBhbWVudG9zLlxuICpcbiAqIMOJIHBvc3PDrXZlbCBzZWxlY2lvbmFyIGUgbmF2ZWdhciBlbnRyZSBhcyBvcMOnw7VlcyBkYSBsaXN0YSB0YW50byBhdHJhdsOpcyBkbyAqbW91c2UqIHF1YW50byBkbyB0ZWNsYWRvLiBObyB0ZWNsYWRvIG5hdmVndWUgY29tXG4gKiBhcyBzZXRhcyBlIHByZXNzaW9uZSAqRW50ZXIqIG5hIG9ww6fDo28gcXVlIGRlc2VqYXIuXG4gKlxuICogQ29tIGVsZSB0YW1iw6ltIMOpIHBvc3PDrXZlbCBkZWZpbmlyIHVtYSBsaXN0YSDDoCBwYXJ0aXIgZGEgcmVxdWlzacOnw6NvIGRlIHVtIHNlcnZpw6dvIGRlZmluaWRvIGVtIGBwLWZpbHRlci1zZXJ2aWNlYC5cbiAqXG4gKiBFbSBgcC1maWx0ZXItbW9kZWAsIG8gZmlsdHJvIHBvZGVyw6Egc2VyIGNvbmZpZ3VyYWRvIHBhcmEgYnVzY2FyIG9ww7VlcyBxdWUgY29ycmVzcG9uZGFtIGFvIGluw61jaW8sIGZpbSBvdSBxdWUgY29udGVuaGEgbyB2YWxvciBkaWdpdGFkby5cbiAqXG4gKiBPIGBwby1jb21ib2AgZ3VhcmRhIG8gw7psdGltbyB2YWxvciBjYXNvIG8gdXN1w6FyaW8gZGVzaXN0YSBkZSB1bWEgYnVzY2EsIGRlaXhhbmRvIG8gY2FtcG8gb3UgcHJlc3Npb25hbmRvICpFc2MqLiBDYXNvIHNlamEgZGlnaXRhZG8gbm9cbiAqIGNhbXBvIGRlIGJ1c2NhIGEgZGVzY3Jpw6fDo28gY29tcGxldGEgZGUgdW0gaXRlbSwgZW50w6NvIGEgc2VsZcOnw6NvIHNlcsOhIGF1dG9tYXRpY2FtZW50ZSBlZmV0dWFkYSBhbyBkZWl4YXIgbyBjYW1wbyBvdSBwcmVzc2lvbmFuZG8gKkVudGVyKi5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1mb2N1cycpIEBJbnB1dEJvb2xlYW4oKSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTGFiZWwgbm8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlIGFwb2lvIHBhcmEgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWhlbHAnKSBoZWxwPzogc3RyaW5nO1xuXG4gIC8qKiBOb21lIGRvIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgnbmFtZScpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBpbmZvcm1hZGEgYSBVUkwgZG8gc2VydmnDp28gZW0gcXVlIHNlcsOhIHJlYWxpemFkbyBvIGZpbHRybyBwYXJhIGNhcnJlZ2FtZW50byBkYSBsaXN0YSBkZVxuICAgKiBpdGVucyBubyBjb21wb25lbnRlLlxuICAgKiBDYXNvIGhhamEgYSBuZWNlc3NpZGFkZSBkZSBjdXN0b21pemHDp8OjbywgZW50w6NvIHBvZGUgc2VyIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIFBvQ29tYm9GaWx0ZXIuXG4gICAqXG4gICAqIENhc28gdXRpbGl6YWRvIHVtYSBVUkwsIG8gc2VydmnDp28gZGV2ZSBzZXIgcmV0b3JuYWRvIG5vIHBhZHLDo28gQVBJIFRPVFZTIGUgdXRpbGl6YSBhcyBwcm9wcmllZGFkZXNcbiAgICogYHAtZmllbGQtbGFiZWxgIGUgYHAtZmllbGQtdmFsdWVgIHBhcmEgYSBjb25zdHJ1w6fDo28gZGEgbGlzdGEgZGUgaXRlbnMuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgZW50w6NvIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIHVybCArID9maWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIFNlIGZvciBkZWZpbmlkYSBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1wYXJhbXNgLCBhIG1lc21hIHRhbWLDqW0gc2Vyw6EgY29uY2F0ZW5hZGEuIFBvciBleGVtcGxvLCBwYXJhIG9cbiAgICogcGFyw6JtZXRybyBgeyBhZ2U6IDIzIH1gIGEgVVJMIGZpY2FyaWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmFnZT0yMyZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXNlcnZpY2UnKSBmaWx0ZXJTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8gYXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBvIGNvbWJvLCBBbyBjaGVnYXIgYW8gZmltIGRhIHRhYmVsYSBleGVjdXRhcsOhIG5vdmEgYnVzY2EgZG9zIGRhZG9zIGNvbmZvcm1lIHBhZ2luYcOnw6NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgc2V0IGluZmluaXRlU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBwZXJjZW50dWFsIG5lY2Vzc8OhcmlvIHBhcmEgZGlzcGFyYXIgbyBldmVudG8gYHNob3ctbW9yZWAsIHF1ZSDDqSByZXNwb25zw6F2ZWwgcG9yIGNhcnJlZ2FyIG1haXMgZGFkb3Mgbm8gY29tYm8uIENhc28gbyB2YWxvciBzZWphIG1haW9yIHF1ZSAxMDAgb3UgbWVub3IgcXVlIDAsIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSAxMDAlLlxuICAgKlxuICAgKiAqKkV4ZW1wbG9zKipcbiAgICogLSBwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZSA9IDgwOiBRdWFuZG8gYXRpbmdpciA4MCUgZG8gc2Nyb2xsIGRvIGNvbWJvLCBvIGBzaG93LW1vcmVgIHNlcsOhIGRpc3BhcmFkby5cbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UnKSBzZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZSA9IHZhbHVlID4gMTAwIHx8IHZhbHVlIDwgMCA/IDEwMCA6IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyDDrWNvbmUgcXVlIHNlcsOhIGV4aWJpZG8gbm8gaW7DrWNpbyBkbyBjYW1wby5cbiAgICpcbiAgICogw4kgcG9zc8OtdmVsIHVzYXIgcXVhbHF1ZXIgdW0gZG9zIMOtY29uZXMgZGEgW0JpYmxpb3RlY2EgZGUgw61jb25lc10oL2d1aWRlcy9pY29ucykuIGNvbmZvcm1lIGV4ZW1wbG8gYWJhaXhvOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIHAtaWNvbj1cInBvLWljb24tdXNlclwiIHAtbGFiZWw9XCJQTyBjb21ib1wiPjwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKiBUYW1iw6ltIMOpIHBvc3PDrXZlbCB1dGlsaXphciBvdXRyYXMgZm9udGVzIGRlIMOtY29uZXMsIHBvciBleGVtcGxvIGEgYmlibGlvdGVjYSAqRm9udCBBd2Vzb21lKiwgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gcC1pY29uPVwiZmEgZmEtcG9kY2FzdFwiIHAtbGFiZWw9XCJQTyBjb21ib1wiPjwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKiBPdXRyYSBvcMOnw6NvIHNlcmlhIGEgY3VzdG9taXphw6fDo28gZG8gw61jb25lIGF0cmF2w6lzIGRvIGBUZW1wbGF0ZVJlZmAsIGNvbmZvcm1lIGV4ZW1wbG8gYWJhaXhvOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIFtwLWljb25dPVwidGVtcGxhdGVcIiBwLWxhYmVsPVwiY29tYm8gdGVtcGxhdGUgaW9uaWNcIj48L3BvLWNvbWJvPlxuICAgKlxuICAgKiA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgKiAgPGlvbi1pY29uIHN0eWxlPVwiZm9udC1zaXplOiBpbmhlcml0XCIgbmFtZT1cImhlYXJ0XCI+PC9pb24taWNvbj5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqID4gUGFyYSBvIMOtY29uZSBlbnF1YWRyYXIgY29ycmV0YW1lbnRlLCBkZXZlLXNlIHV0aWxpemFyIGBmb250LXNpemU6IGluaGVyaXRgIGNhc28gbyDDrWNvbmUgdXRpbGl6YWRvIG7Do28gYXBsaXF1ZS1vLlxuICAgKi9cbiAgQElucHV0KCdwLWljb24nKSBpY29uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKiogU2UgdmVyZGFkZWlybywgbyBjYW1wbyByZWNlYmVyw6EgdW0gYm90w6NvIHBhcmEgc2VyIGxpbXBvLiAqL1xuICBASW5wdXQoJ3AtY2xlYW4nKSBASW5wdXRCb29sZWFuKCkgY2xlYW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIG8gZXZlbnRvIGBwLWNoYW5nZWAgcmVjZWJlcsOhIGNvbW8gYXJndW1lbnRvIG8gYFBvQ29tYm9PcHRpb25gIHJlZmVyZW50ZSDDoCBvcMOnw6NvIHNlbGVjaW9uYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtZW1pdC1vYmplY3QtdmFsdWUnKSBASW5wdXRCb29sZWFuKCkgZW1pdE9iamVjdFZhbHVlPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIGRlc2FiaWxpdGFyw6EgYSBidXNjYSBkZSB1bSBpdGVtIHZpYSBUQUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZC10YWItZmlsdGVyJykgQElucHV0Qm9vbGVhbigpIGRpc2FibGVkVGFiRmlsdGVyPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERldmUgc2VyIGluZm9ybWFkYSB1bWEgZnVuw6fDo28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG8gaG91dmVyIGFsdGVyYcOnw7VlcyBubyBuZ01vZGVsLiBBIGZ1bsOnw6NvIHJlY2ViZXLDoSBjb21vIGFyZ3VtZW50byBvIG1vZGVsIG1vZGlmaWNhZG8uXG4gICAqXG4gICAqID4gUG9kZS1zZSBvcHRhciBwZWxvIHJlY2ViaW1lbnRvIGRvIG9iamV0byBzZWxlY2lvbmFkbyBhbyBpbnbDqXMgZG8gbW9kZWwgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtZW1pdC1vYmplY3QtdmFsdWVgLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcGFyYSBhdHVhbGl6YXIgbyBuZ01vZGVsIGRvIGNvbXBvbmVudGUsIG5lY2Vzc8OhcmlvIHF1YW5kbyBuw6NvIGZvciB1dGlsaXphZG8gZGVudHJvIGRhIHRhZyBmb3JtLlxuICAgKlxuICAgKiBOYSB2ZXJzw6NvIDEyLjIuMCBkbyBBbmd1bGFyIGEgdmVyaWZpY2HDp8OjbyBgc3RyaWN0VGVtcGxhdGVzYCB2ZW0gdHJ1ZSBjb21vIGRlZmF1bHQuIFBvcnRhbnRvLCBwYXJhIHV0aWxpemFyXG4gICAqIHR3by13YXkgYmluZGluZyBubyBjb21wb25lbnRlIGRldmUgc2UgdXRpbGl6YXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gLi4uIFtuZ01vZGVsXT1cImNvbWJvTW9kZWxcIiAobmdNb2RlbENoYW5nZSk9XCJjb21ib01vZGVsID0gJGV2ZW50XCI+IDwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY2FjaGVPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBkZWZhdWx0U2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2U7XG4gIGZpcnN0SW5Xcml0ZVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNGaXJzdEZpbHRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGlzRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGtleXVwU3Vic2NyaWJlOiBhbnk7XG4gIG9uTW9kZWxDaGFuZ2U6IGFueTtcbiAgcHJldmlvdXNTZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkT3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwO1xuICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIHNlbGVjdGVkVmlldzogYW55O1xuICBzZXJ2aWNlOiBQb0NvbWJvRmlsdGVyU2VydmljZTtcbiAgdmlzaWJsZU9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+ID0gW107XG4gIHBhZ2U6IG51bWJlciA9IDE7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBjYWNoZVN0YXRpY09wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+ID0gW107XG4gIHByb3RlY3RlZCBjb21ib09wdGlvbnNMaXN0OiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwcm90ZWN0ZWQgb25Nb2RlbFRvdWNoZWQ6IGFueSA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfY2hhbmdlT25FbnRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVib3VuY2VUaW1lPzogbnVtYmVyID0gNDAwO1xuICBwcml2YXRlIF9kaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWRJbml0RmlsdGVyPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWVsZExhYmVsPzogc3RyaW5nID0gJ2xhYmVsJztcbiAgcHJpdmF0ZSBfZmllbGRWYWx1ZT86IHN0cmluZyA9ICd2YWx1ZSc7XG4gIHByaXZhdGUgX2ZpbHRlck1pbmxlbmd0aD86IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX2ZpbHRlck1vZGU/OiBQb0NvbWJvRmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gIHByaXZhdGUgX2ZpbHRlclBhcmFtcz86IGFueTtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM/OiBQb0NvbWJvTGl0ZXJhbHM7XG4gIHByaXZhdGUgX29wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvT3B0aW9uR3JvdXA+ID0gW107XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NvcnQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGxEaXN0YW5jZT86IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGw/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hlaWdodD86IG51bWJlcjtcblxuICAvLyB1dGlsaXphZG8gcGFyYSBmYXplciBvIGNvbnRyb2xlIGRlIGF0dWFsaXphciBvIG1vZGVsLlxuICAvLyBuw6NvIGRldmUgZm9yw6dhciBhIGF0dWFsaXphw6fDo28gc2UgbyBnYXRpbGhvIGZvciBvIHdyaXRlVmFsdWUgcGFyYSBuw6NvIGRlaXhhciBvIGNhbXBvIGRpcnR5LlxuICBwcml2YXRlIGZyb21Xcml0ZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2U6IGFueTtcblxuICAvKiogTWVuc2FnZW0gYXByZXNlbnRhZGEgZW5xdWFudG8gbyBjYW1wbyBlc3RpdmVyIHZhemlvLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWUgfHwgJyc7XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgZW0gcXVhbnRvIHRlbXBvIChlbSBtaWxpc3NlZ3VuZG9zKSwgYWd1YXJkYSBwYXJhIGFjaW9uYXIgbyBldmVudG8gZGUgZmlsdHJvIGFww7NzIGNhZGEgcHJlc3Npb25hbWVudG8gZGUgdGVjbGEuXG4gICAqIFNlcsOhIHV0aWxpemFkYSBhcGVuYXMgcXVhbmRvIGhvdXZlciBzZXJ2acOnbyAoYHAtZmlsdGVyLXNlcnZpY2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDQwMGBcbiAgICovXG4gIEBJbnB1dCgncC1kZWJvdW5jZS10aW1lJykgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCg8YW55PnZhbHVlLCAxMCk7XG5cbiAgICB0aGlzLl9kZWJvdW5jZVRpbWUgPSAhaXNOYU4ocGFyc2VkVmFsdWUpICYmIHBhcnNlZFZhbHVlID4gMCA/IHBhcnNlZFZhbHVlIDogUE9fQ09NQk9fREVCT1VOQ0VfVElNRV9ERUZBVUxUO1xuICB9XG5cbiAgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXNhYmlsaXRhIG8gZmlsdHJvIGluaWNpYWwgbm8gc2VydmnDp28sIHF1ZSDDqSBleGVjdXRhZG8gbm8gcHJpbWVpcm8gY2xpcXVlIG5vIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQtaW5pdC1maWx0ZXInKSBzZXQgZGlzYWJsZWRJbml0RmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWRJbml0RmlsdGVyID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWRJbml0RmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEluaXRGaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHZhbG9yIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB2YWx1ZWBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC12YWx1ZScpIHNldCBmaWVsZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZFZhbHVlID0gdmFsdWUgfHwgUE9fQ09NQk9fRklFTERfVkFMVUVfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZFZhbHVlID0gdGhpcy5fZmllbGRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdGV4dG8gZGUgYXByZXNlbnRhw6fDo28gZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBOZWNlc3PDoXJpbyBxdWFuZG8gaW5mb3JtYXIgbyBzZXJ2acOnbyBjb21vIFVSTCBlIG8gbWVzbW8gbsOjbyBlc3RpdmVyIHJldG9ybmFuZG8gdW1hIGxpc3RhIGRlIG9iamV0b3Mgbm8gcGFkcsOjbyBkYSBpbnRlcmZhY2VcbiAgICogUG9Db21ib09wdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGxhYmVsYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLWxhYmVsJykgc2V0IGZpZWxkTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSB8fCBQT19DT01CT19GSUVMRF9MQUJFTF9ERUZBVUxUO1xuXG4gICAgaWYgKGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZpZWxkTGFiZWwgPSB0aGlzLl9maWVsZExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZExhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZExhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVmFsb3IgbcOtbmltbyBkZSBjYXJhY3RlcmVzIHBhcmEgcmVhbGl6YXIgbyBmaWx0cm8gbm8gc2VydmnDp28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAwYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1taW5sZW5ndGgnKSBzZXQgZmlsdGVyTWlubGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZVZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiB2YWx1ZTtcblxuICAgIHRoaXMuX2ZpbHRlck1pbmxlbmd0aCA9IE51bWJlci5pc0ludGVnZXIocGFyc2VWYWx1ZSkgPyBwYXJzZVZhbHVlIDogMDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJNaW5sZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1pbmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBvYnJpZ2F0w7NyaW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1yZXF1aXJlZCcpIHNldCByZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29udmVydFRvQm9vbGVhbihyZXF1aXJlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2EgcXVlIG8gZXZlbnRvIGBwLWNoYW5nZWAgc8OzIHNlcsOhIGRpc3BhcmFkbyBhbyBjbGljYXIgb3UgcHJlc3Npb25hciBhIHRlY2xhIFwiRW50ZXJcIiBzb2JyZSB1bWEgb3DDp8OjbyBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWNoYW5nZS1vbi1lbnRlcicpIHNldCBjaGFuZ2VPbkVudGVyKGNoYW5nZU9uRW50ZXI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jaGFuZ2VPbkVudGVyID0gY29udmVydFRvQm9vbGVhbihjaGFuZ2VPbkVudGVyKTtcbiAgfVxuXG4gIGdldCBjaGFuZ2VPbkVudGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VPbkVudGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIGRlc2FiaWxpdGFkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKGRpc2FibGVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKiBJbmRpY2EgcXVlIGEgbGlzdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgcC1vcHRpb25zIHNlcsOhIG9yZGVuYWRhIHBlbGEgZGVzY3Jpw6fDo28uICovXG4gIEBJbnB1dCgncC1zb3J0Jykgc2V0IHNvcnQoc29ydDogYm9vbGVhbikge1xuICAgIHRoaXMuX3NvcnQgPSBjb252ZXJ0VG9Cb29sZWFuKHNvcnQpO1xuICAgIHRoaXMuY29tYm9MaXN0RGVmaW5pdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBzb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9zb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIE5lc3RhIHByb3ByaWVkYWRlIGRlZmluZSBhIGxpc3RhIGRlIG9ww6fDtWVzIGRvIGBwby1jb21ib2AuXG4gICAqXG4gICAqID4gQSBsaXN0YSBwb2RlIHNlciBkZWZpbmlkYSBlbSBkb2lzIGZvcm1hdG9zLCBzaW1wbGVzIG91IGNvbSBhZ3J1cGFtZW50b3MuXG4gICAqIC0gVXRpbGl6ZSBgUG9Db21ib09wdGlvbmAgcGFyYSBsaXN0YSBkZSBvcMOnw7VlcyBzaW1wbGVzLlxuICAgKiAtIFV0aWxpemUgYFBvQ29tYm9PcHRpb25Hcm91cGAgcGFyYSBsaXN0YSBkZSBvcMOnw7VlcyBjb20gYWdydXBhbWVudG8uXG4gICAqXG4gICAqICoqSW1wb3J0YW50ZToqKlxuICAgKiAtIEEgbGlzdGEgZGV2ZSBzZWd1aXIgYXMgZGVmaW5pw6fDtWVzIGRlc2NyaXRhcyBuYXMgcmVzcGVjdGl2YXMgaW50ZXJmYWNlcywgY2FzbyBjb250csOhcmlvIG7Do28gZXhpYmlyw6EgYShhcykgb3DDp8OjbyjDtWVzKSBmb3JhIGRvcyBwYWRyw7Vlcy5cbiAgICogLSBPIGNvbXBvbmVudGUgaW50ZXJwcmV0YXLDoSBvIGZvcm1hdG8gZGEgbGlzdGEgZGUgYWNvcmRvIGNvbSBhIGludGVyZmFjZSB1dGlsaXphZGEgZSBzw7MgZXhpYmlyw6EgYXMgb3DDp8O1ZXMgY29ycmVzcG9uZGVudGVzIMOgIGVsYS5cbiAgICogLSBVbSBhZ3J1cGFtZW50byBzw7Mgc2Vyw6EgZXhpYmlkbyBzZSBob3V2ZXIgcGVsbyBtZW5vcyB1bWEgb3DDp8OjbyB2w6FsaWRhLlxuICAgKiAtIEFjb25zZWxoYS1zZSB1dGlsaXphciB2YWxvcmVzIGRpc3RpbnRvcyBubyBgbGFiZWxgIGUgYHZhbHVlYCBkb3MgaXRlbnMuXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9ucycpIHNldCBvcHRpb25zKG9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvT3B0aW9uR3JvdXA+KSB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogW107XG5cbiAgICB0aGlzLmNvbWJvTGlzdERlZmluaXRpb25zKCk7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIG1vZG8gZGUgcGVzcXVpc2EgdXRpbGl6YWRvIG5vIGZpbHRybyBkYSBsaXN0YSBkZSBzZWxlw6fDo286IGBzdGFydHNXaXRoYCwgYGNvbnRhaW5zYCBvdSBgZW5kc1dpdGhgLlxuICAgKlxuICAgKiA+IFF1YW5kbyB1dGlsaXphciBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1zZXJ2aWNlYCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIGlnbm9yYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgc3RhcnRzV2l0aGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbW9kZScpIHNldCBmaWx0ZXJNb2RlKGZpbHRlck1vZGU6IFBvQ29tYm9GaWx0ZXJNb2RlKSB7XG4gICAgdGhpcy5fZmlsdGVyTW9kZSA9IGZpbHRlck1vZGUgaW4gUG9Db21ib0ZpbHRlck1vZGUgPyBmaWx0ZXJNb2RlIDogUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgICBzd2l0Y2ggKHRoaXMuX2ZpbHRlck1vZGUudG9TdHJpbmcoKSkge1xuICAgICAgY2FzZSAnc3RhcnRzV2l0aCc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbnRhaW5zJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLmNvbnRhaW5zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuZHNXaXRoJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLmVuZHNXaXRoO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyTW9kZSgpOiBQb0NvbWJvRmlsdGVyTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBxdWUgc2Vyw6EgcmVwYXNzYWRvIGNvbW8gcGFyw6JtZXRybyBwYXJhIGEgVVJMIG91IGFvcyBtw6l0b2RvcyBkbyBzZXJ2acOnbyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgKlBvQ29tYm9GaWx0ZXIqLlxuICAgKlxuICAgKiA+IENhc28gYSBsaXN0YSBjb250ZW5oYSBhZ3J1cGFtZW50b3MsIG9zIG1lc21vcyBzw7Mgc2Vyw6NvIGV4aWJpZG9zIHNlIGhvdXZlciBubyBtw61uaW1vIHVtYSBvcMOnw6NvIHF1ZSBjb3JyZXNwb25kYSDDoCBwZXNxdWlzYS5cbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItcGFyYW1zJykgc2V0IGZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xuICAgIHRoaXMuX2ZpbHRlclBhcmFtcyA9IGZpbHRlclBhcmFtcyB8fCBmaWx0ZXJQYXJhbXMgPT09IDAgfHwgZmlsdGVyUGFyYW1zID09PSBmYWxzZSA/IGZpbHRlclBhcmFtcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1jb21ib2AuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6YXIgYmFzdGEgcGFzc2FyIGEgbGl0ZXJhbCBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvQ29tYm9MaXRlcmFscyA9IHtcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIHZhbG9yJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhIGxpdGVyYWwgY3VzdG9taXphZGEsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm9cbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICogPiBPIG9iamV0byBwYWRyw6NvIGRlIGxpdGVyYWlzIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGRvXG4gICAqIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91IGRvIGJyb3dzZXIuXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvQ29tYm9MaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9Db21ib0xpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9Db21ib0xpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UpIHtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcbiAgfVxuXG4gIGdldCBpc09wdGlvbkdyb3VwTGlzdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5sZW5ndGggJiYgdGhpcy5fb3B0aW9uc1swXS5oYXNPd25Qcm9wZXJ0eSgnb3B0aW9ucycpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgfVxuXG4gIG9uSW5pdFNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gICAgICB0aGlzLmluaXRJbnB1dE9ic2VydmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTZXJ2aWNlKHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgaWYgKGlzVHlwZW9mKHNlcnZpY2UsICdvYmplY3QnKSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSA8UG9Db21ib0ZpbHRlclNlcnZpY2U+c2VydmljZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHRoaXMuZGVmYXVsdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2VydmljZS5jb25maWdQcm9wZXJ0aWVzKDxzdHJpbmc+c2VydmljZSwgdGhpcy5maWVsZExhYmVsLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBhcmVNZXRob2Qoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCwgZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICBzd2l0Y2ggKGZpbHRlck1vZGUpIHtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRzV2l0aChzZWFyY2gsIG9wdGlvbik7XG4gICAgICBjYXNlIFBvQ29tYm9GaWx0ZXJNb2RlLmNvbnRhaW5zOlxuICAgICAgICByZXR1cm4gdGhpcy5jb250YWlucyhzZWFyY2gsIG9wdGlvbik7XG4gICAgICBjYXNlIFBvQ29tYm9GaWx0ZXJNb2RlLmVuZHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5lbmRzV2l0aChzZWFyY2gsIG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRzV2l0aChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgY29udGFpbnMoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCkge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICB9XG5cbiAgZW5kc1dpdGgoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCkge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBnZXRPcHRpb25Gcm9tVmFsdWUodmFsdWU6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBvcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiB0aGlzLmlzRXF1YWwob3B0aW9uLnZhbHVlLCB2YWx1ZSkpIDogbnVsbDtcbiAgfVxuXG4gIGdldE9wdGlvbkZyb21MYWJlbChsYWJlbDogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IG9wdGlvbi5sYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwLCBpc1VwZGF0ZU1vZGVsOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gKG9wdGlvbiAmJiBvcHRpb24ubGFiZWwpIHx8ICcnO1xuXG4gICAgdGhpcy51cGRhdGVJbnRlcm5hbFZhcmlhYmxlcyhvcHRpb24pO1xuXG4gICAgLy8gYXR1YWxpemEgbyB2YWxvciBkbyBpbnB1dCBxdWFuZG8gZm9yIGNoYW5nZU9uRW50ZXIgYXBlbmFzIHNlIGZvciBwYXJhIGF0dWFsaXphciBvIG1vZGVsLlxuICAgIGlmICh0aGlzLmNoYW5nZU9uRW50ZXIgJiYgaXNVcGRhdGVNb2RlbCkge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG9wdGlvbkxhYmVsKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmNoYW5nZU9uRW50ZXIpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShvcHRpb25MYWJlbCk7XG4gICAgfVxuXG4gICAgaWYgKGlzVXBkYXRlTW9kZWwpIHtcbiAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gb3B0aW9uPy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9uLnZhbHVlIDogdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKG9wdGlvblZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBjYWxsTW9kZWxDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgIC8vIENhc28gbyBjb21wb25lbnRlIGVzdGl2ZXIgZGVudHJvIGRlIHVtIGZvcm0sIHRlcsOhIGFjZXNzbyBhbyBtw6l0b2RvIG9uTW9kZWxDaGFuZ2UuXG4gICAgcmV0dXJuIHRoaXMub25Nb2RlbENoYW5nZSA/IHRoaXMub25Nb2RlbENoYW5nZSh2YWx1ZSkgOiB0aGlzLm5nTW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBpc0VxdWFsKHZhbHVlOiBhbnksIGlucHV0VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGlucHV0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpID09PSBpbnB1dFZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh2YWx1ZSA9PT0gbnVsbCAmJiBpbnB1dFZhbHVlICE9PSBudWxsKSB8fCAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICB2YWx1ZSA9IGAke3ZhbHVlfWA7IC8vIFRyYW5zZm9ybWFuZG8gZW0gc3RyaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlID09PSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgc2VhcmNoRm9yTGFiZWwoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+LCBmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIGlmIChzZWFyY2ggJiYgb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbmV3T3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgICAgIGxldCBhZGRlZE9wdGlvbnNHcm91cFRpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgb3B0aW9uc0dyb3VwVGl0bGU6IFBvQ29tYm9Hcm91cDtcblxuICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgIGlmICgnb3B0aW9ucycgaW4gb3B0aW9uKSB7XG4gICAgICAgICAgYWRkZWRPcHRpb25zR3JvdXBUaXRsZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAob3B0aW9uc0dyb3VwVGl0bGUgPSBvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbi5sYWJlbCAmJiAodGhpcy5jb21wYXJlTWV0aG9kKHNlYXJjaCwgb3B0aW9uLCBmaWx0ZXJNb2RlKSB8fCB0aGlzLnNlcnZpY2UpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNPcHRpb25Hcm91cExpc3QgJiYgIWFkZGVkT3B0aW9uc0dyb3VwVGl0bGUpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaChvcHRpb25zR3JvdXBUaXRsZSk7XG4gICAgICAgICAgICBhZGRlZE9wdGlvbnNHcm91cFRpdGxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gbmV3T3B0aW9uc1t0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ID8gMSA6IDBdO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QobmV3T3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29tYm9MaXN0KG9wdGlvbnM/OiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPikge1xuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gb3B0aW9ucyB8fCBbLi4udGhpcy5jb21ib09wdGlvbnNMaXN0XTtcblxuICAgIGNvbnN0IG5ld09wdGlvbnMgPVxuICAgICAgIW9wdGlvbnMgJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwgJiYgdGhpcy5zZWxlY3RlZFZhbHVlID8gW3sgLi4udGhpcy5zZWxlY3RlZE9wdGlvbiB9XSA6IGNvcHlPcHRpb25zO1xuXG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IG5ld09wdGlvbnM7XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRWaWV3ICYmIHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IGNvcHlPcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBnZXROZXh0T3B0aW9uKHZhbHVlOiBhbnksIG9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+LCByZXZlcnNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCBvcHRpb25zTGlzdCA9IHJldmVyc2UgPyBvcHRpb25zLnNsaWNlKDApLnJldmVyc2UoKSA6IG9wdGlvbnMuc2xpY2UoMCk7XG4gICAgbGV0IG9wdGlvbkZvdW5kID0gbnVsbDtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnNMaXN0KSB7XG4gICAgICBpZiAob3B0aW9uLnZhbHVlICYmICFvcHRpb25Gb3VuZCkge1xuICAgICAgICBvcHRpb25Gb3VuZCA9IG9wdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb24udmFsdWUgJiYgZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRXF1YWwob3B0aW9uLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25Gb3VuZDtcbiAgfVxuXG4gIGdldEluZGV4U2VsZWN0ZWRWaWV3KCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29tcGFyZU9iamVjdHModGhpcy52aXNpYmxlT3B0aW9uc1tpXSwgdGhpcy5zZWxlY3RlZFZpZXcpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbXBhcmVPYmplY3RzKG9iajE6IGFueSwgb2JqMjogYW55KSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpID09PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcbiAgfVxuXG4gIHZlcmlmeVZhbGlkT3B0aW9uKCkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcblxuICAgIGNvbnN0IG9wdGlvbkZvdW5kID0gdGhpcy5nZXRPcHRpb25Gcm9tTGFiZWwoaW5wdXRWYWx1ZSwgdGhpcy5jb21ib09wdGlvbnNMaXN0KTtcblxuICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbLi4udGhpcy5jYWNoZVN0YXRpY09wdGlvbnNdKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uRm91bmQgJiYgb3B0aW9uRm91bmQudmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbkZvdW5kKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gb3B0aW9uRm91bmQubGFiZWw7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVXaXRoT2xkT3B0aW9uKCk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb24ubGFiZWw7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpbnB1dFZhbHVlICYmICFvcHRpb25Gb3VuZCkge1xuICAgICAgY29uc3QgaXNJbnB1dFZhbHVlRGlmZlNlbGVjdGVkTGFiZWwgPSAhISh0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24ubGFiZWwgIT09IGlucHV0VmFsdWUpO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCwgaXNJbnB1dFZhbHVlRGlmZlNlbGVjdGVkTGFiZWwgfHwgdGhpcy5jaGFuZ2VPbkVudGVyKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjZWJlIGFzIGFsdGVyYcOnw7VlcyBkbyBtb2RlbFxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZyb21Xcml0ZVZhbHVlID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZFZhbHVlKHZhbHVlKSAmJiAhdGhpcy5zZXJ2aWNlICYmIHRoaXMuY29tYm9PcHRpb25zTGlzdCAmJiB0aGlzLmNvbWJvT3B0aW9uc0xpc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbkZyb21WYWx1ZSh2YWx1ZSwgdGhpcy5jb21ib09wdGlvbnNMaXN0KTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb24pO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZSBob3V2ZXIgc2VydmnDp28gYnVzY2EgcGVsbyBtb2RlbC5cbiAgICBpZiAodmFsdWUgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeVZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgdmFsaWRhdGUoYWJzdHJhY3RDb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAocmVxdWlyZWRGYWlsZWQodGhpcy5yZXF1aXJlZCwgdGhpcy5kaXNhYmxlZCwgYWJzdHJhY3RDb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVxdWlyZWQ6IHtcbiAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjbGVhcih2YWx1ZSkge1xuICAgIHRoaXMuY2FsbE1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICB0aGlzLmluaXRJbnB1dE9ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWdBZnRlclNldEZpbHRlclNlcnZpY2Uoc2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgPSBbXTtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVLZXl1cE9ic2VydmFibGUoKTtcbiAgICAgIHRoaXMub25Jbml0U2VydmljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLmNhY2hlU3RhdGljT3B0aW9ucztcbiAgICB9XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zID0gW107XG4gICAgdGhpcy5pc0ZpcnN0RmlsdGVyID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpIHtcbiAgICBpZiAodGhpcy5rZXl1cFN1YnNjcmliZSkge1xuICAgICAgdGhpcy5rZXl1cFN1YnNjcmliZS51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKG1vZGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbWJvTGlzdERlZmluaXRpb25zKCkge1xuICAgIHRoaXMuY29tYm9PcHRpb25zTGlzdCA9IHRoaXMub3B0aW9ucy5sZW5ndGggPiAwID8gdGhpcy5saXN0aW5nQ29tYm9PcHRpb25zKHRoaXMub3B0aW9ucykgOiB0aGlzLm9wdGlvbnM7XG4gICAgdGhpcy5jYWNoZVN0YXRpY09wdGlvbnMgPSB0aGlzLmNvbWJvT3B0aW9uc0xpc3Q7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wYXJlT3B0aW9ucyhvcHRpb25BOiBhbnksIG9wdGlvbkI6IGFueSkge1xuICAgIGNvbnN0IGxhYmVsQSA9IG9wdGlvbkEubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGxhYmVsQiA9IG9wdGlvbkIubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIGxhYmVsQSA8IGxhYmVsQiA/IC0xIDogbGFiZWxBID4gbGFiZWxCID8gMSA6IDA7XG4gIH1cblxuICBwcml2YXRlIGhhc0R1cGxpY2F0ZWRPcHRpb24oXG4gICAgb3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4sXG4gICAgY3VycmVudE9wdGlvbjogc3RyaW5nLFxuICAgIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zPzogQXJyYXk8UG9Db21ib0dyb3VwPlxuICApIHtcbiAgICBpZiAoYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucy5zb21lKG9wdGlvbiA9PiBvcHRpb24ubGFiZWwgPT09IGN1cnJlbnRPcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zb21lKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IGN1cnJlbnRPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGlzdGluZ0NvbWJvT3B0aW9ucyhjb21ib09wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvT3B0aW9uR3JvdXA+KSB7XG4gICAgY29uc3QgY29tYm9PcHRpb25zTGlzdCA9IGNvbWJvT3B0aW9ucy5jb25jYXQoKTtcbiAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLnZlcmlmeUNvbWJvT3B0aW9ucyhjb21ib09wdGlvbnNMaXN0KTtcblxuICAgIHRoaXMuc29ydE9wdGlvbnModmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlDb21ib09wdGlvbnNHcm91cCh2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHNvcnRPcHRpb25zKGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PFBvQ29tYm9Hcm91cD4pIHtcbiAgICBpZiAoY29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwICYmIHRoaXMuc29ydCkge1xuICAgICAgcmV0dXJuIGNvbWJvT3B0aW9uc0xpc3Quc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVmFsdWUoY3VycmVudE9wdGlvbjogUG9Db21ib0dyb3VwLCB2ZXJpZnlpbmdPcHRpb25zR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHsgbGFiZWwsIG9wdGlvbnMsIHZhbHVlIH0gPSBjdXJyZW50T3B0aW9uO1xuXG4gICAgaWYgKHRoaXMuaXNPcHRpb25Hcm91cExpc3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh2YWxpZFZhbHVlKGxhYmVsKSAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgfHwgKHZlcmlmeWluZ09wdGlvbnNHcm91cCA9PT0gdHJ1ZSAmJiB2YWxpZFZhbHVlKHZhbHVlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkVmFsdWUodmFsdWUpICYmICFvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlDb21ib09wdGlvbnMoXG4gICAgY29tYm9PcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPixcbiAgICB2ZXJpZnlpbmdPcHRpb25zR3JvdXA6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucz86IEFycmF5PFBvQ29tYm9Hcm91cD5cbiAgKSB7XG4gICAgcmV0dXJuIGNvbWJvT3B0aW9ucy5yZWR1Y2UoKGFjY3VtdWxhdGVkT3B0aW9ucywgY3VycmVudE9wdGlvbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy52ZXJpZnlJZkhhc0xhYmVsKGN1cnJlbnRPcHRpb24pIHx8XG4gICAgICAgIHRoaXMuaGFzRHVwbGljYXRlZE9wdGlvbihcbiAgICAgICAgICBhY2N1bXVsYXRlZE9wdGlvbnMsXG4gICAgICAgICAgY3VycmVudE9wdGlvblsndmFsdWUnXSB8fCBjdXJyZW50T3B0aW9uWydsYWJlbCddLFxuICAgICAgICAgIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zXG4gICAgICAgICkgfHxcbiAgICAgICAgIXRoaXMudmFsaWRhdGVWYWx1ZShjdXJyZW50T3B0aW9uLCB2ZXJpZnlpbmdPcHRpb25zR3JvdXApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkT3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgYWNjdW11bGF0ZWRPcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRPcHRpb25zO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAoY29tYm9PcHRpb25zTGlzdDogQXJyYXk8UG9Db21ib09wdGlvbkdyb3VwPikge1xuICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnJlZHVjZSgoYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgb3B0aW9ucywgbGFiZWwgfSA9IGN1cnJlbnRPcHRpb247XG4gICAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCA9IHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zKG9wdGlvbnMsIHRydWUsIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zKTtcblxuICAgICAgaWYgKHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyh2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCk7XG5cbiAgICAgICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMucHVzaCh7IGxhYmVsOiBsYWJlbCwgb3B0aW9uczogdHJ1ZSB9LCAuLi52ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUlmSGFzTGFiZWwoY3VycmVudE9wdGlvbjogUG9Db21ib0dyb3VwID0ge30pIHtcbiAgICBjb25zdCB7IGxhYmVsLCBvcHRpb25zLCB2YWx1ZSB9ID0gY3VycmVudE9wdGlvbjtcblxuICAgIGlmICgodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiBvcHRpb25zICYmICFsYWJlbCkgfHwgKCFsYWJlbCAmJiAhdmFsdWUpIHx8ICghdGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiBvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudE9wdGlvbi5sYWJlbCkge1xuICAgICAgY3VycmVudE9wdGlvbi5sYWJlbCA9IGN1cnJlbnRPcHRpb24udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnRlcm5hbFZhcmlhYmxlcyhvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IG9wdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmZyb21Xcml0ZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2FsbE1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmVtaXRPYmplY3RWYWx1ZSA/IHRoaXMuc2VsZWN0ZWRPcHRpb24gOiB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpIHtcbiAgICBjb25zdCBvbGRPcHRpb24gPSB0aGlzLmdldE9wdGlvbkZyb21WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAob2xkT3B0aW9uICYmIG9sZE9wdGlvbi5sYWJlbCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvbGRPcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IHNldElucHV0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRJbnB1dFZhbHVlKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpbml0SW5wdXRPYnNlcnZhYmxlKCk6IHZvaWQ7XG59XG4iXX0=
863
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFFNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQU9oRSxNQUFNLDhCQUE4QixHQUFHLEdBQUcsQ0FBQztBQUMzQyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUM3QyxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxlQUFlO0tBQ3hCO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsc0JBQXNCO0tBQy9CO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsd0JBQXdCO0tBQ2pDO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsbUJBQW1CO0tBQzVCO0NBQ0YsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsTUFBTSxPQUFnQixvQkFBb0I7SUF1Z0J4QyxZQUFZLGVBQWtDO1FBdGdCOUM7Ozs7Ozs7Ozs7V0FVRztRQUNvQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBb0hsRTs7Ozs7Ozs7V0FRRztRQUMyQyxvQkFBZSxHQUFhLEtBQUssQ0FBQztRQUVoRjs7Ozs7Ozs7V0FRRztRQUM2QyxzQkFBaUIsR0FBYSxLQUFLLENBQUM7UUFFcEY7Ozs7Ozs7O1dBUUc7UUFDaUIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhFOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ3NCLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEY7Ozs7Ozs7V0FPRztRQUN1QixnQkFBVyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXpGLGlCQUFZLEdBQXdDLEVBQUUsQ0FBQztRQUV2RCxzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0Isd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FBS2pDLG1CQUFjLEdBQXdDLEVBQUUsQ0FBQztRQUN6RCxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBQ2pCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVmLHVCQUFrQixHQUF3QyxFQUFFLENBQUM7UUFDN0QscUJBQWdCLEdBQXdDLEVBQUUsQ0FBQztRQUMzRCxtQkFBYyxHQUFRLElBQUksQ0FBQztRQUU3QixtQkFBYyxHQUFhLEtBQUssQ0FBQztRQUNqQyxrQkFBYSxHQUFZLEdBQUcsQ0FBQztRQUM3QixjQUFTLEdBQWEsS0FBSyxDQUFDO1FBQzVCLHdCQUFtQixHQUFhLEtBQUssQ0FBQztRQUN0QyxnQkFBVyxHQUFZLE9BQU8sQ0FBQztRQUMvQixnQkFBVyxHQUFZLE9BQU8sQ0FBQztRQUMvQixxQkFBZ0IsR0FBWSxDQUFDLENBQUM7UUFDOUIsZ0JBQVcsR0FBdUIsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBRy9ELGFBQVEsR0FBOEMsRUFBRSxDQUFDO1FBQ3pELGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBYSxLQUFLLENBQUM7UUFDNUIsVUFBSyxHQUFhLEtBQUssQ0FBQztRQUV4Qiw0QkFBdUIsR0FBWSxHQUFHLENBQUM7UUFDdkMsb0JBQWUsR0FBYSxLQUFLLENBQUM7UUFHMUMsd0RBQXdEO1FBQ3hELDZGQUE2RjtRQUNyRixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQWtTdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBemREOzs7Ozs7OztPQVFHO0lBQ0gsSUFBZ0MsY0FBYyxDQUFDLEtBQWM7UUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsSUFBeUMsc0JBQXNCLENBQUMsS0FBYTtRQUMzRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQXlKRCwyREFBMkQ7SUFDM0QsSUFBNEIsV0FBVyxDQUFDLEtBQWE7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBOEIsWUFBWSxDQUFDLEtBQWE7UUFDdEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFNLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUM7SUFDN0csQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFxQyxrQkFBa0IsQ0FBQyxLQUFjO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsSUFBNEIsVUFBVSxDQUFDLEtBQWE7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLElBQUksNEJBQTRCLENBQUM7UUFFekQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7U0FDNUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQTRCLFVBQVUsQ0FBQyxLQUFhO1FBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxJQUFJLDRCQUE0QixDQUFDO1FBRXpELElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQWlDLGVBQWUsQ0FBQyxLQUFhO1FBQzVELE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRTNFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBeUIsUUFBUSxDQUFDLFFBQWlCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQWdDLGFBQWEsQ0FBQyxhQUFzQjtRQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUF5QixRQUFRLENBQUMsUUFBaUI7UUFDakQsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsSUFBcUIsSUFBSSxDQUFDLElBQWE7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxJQUF3QixPQUFPLENBQUMsT0FBa0Q7UUFDaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV0RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsSUFBNEIsVUFBVSxDQUFDLFVBQTZCO1FBQ2xFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUMvRixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkMsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDO2dCQUNoRCxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxNQUFNO1lBQ1IsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQThCLFlBQVksQ0FBQyxZQUFpQjtRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksSUFBSSxZQUFZLEtBQUssQ0FBQyxJQUFJLFlBQVksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQy9HLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUJHO0lBQ0gsSUFBeUIsUUFBUSxDQUFDLEtBQXNCO1FBQ3RELElBQUksS0FBSyxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUc7Z0JBQ2YsR0FBRyxzQkFBc0IsQ0FBQyxlQUFlLENBQUM7Z0JBQzFDLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDeEMsR0FBRyxLQUFLO2FBQ1QsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFNRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUErQjtRQUN4QyxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBeUIsT0FBTyxDQUFDO2FBQzlDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBUyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbEY7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBYyxFQUFFLE1BQW9DLEVBQUUsVUFBNkI7UUFDL0YsUUFBUSxVQUFVLEVBQUU7WUFDbEIsS0FBSyxpQkFBaUIsQ0FBQyxVQUFVO2dCQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3pDLEtBQUssaUJBQWlCLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2QyxLQUFLLGlCQUFpQixDQUFDLFFBQVE7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQWMsRUFBRSxNQUFvQztRQUM3RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYyxFQUFFLE1BQW9DO1FBQzNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFjLEVBQUUsTUFBb0M7UUFDM0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVSxFQUFFLE9BQVk7UUFDekMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQVUsRUFBRSxPQUFZO1FBQ3pDLElBQUksT0FBTyxFQUFFO1lBQ1gsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1NBQ2hIO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQW9DLEVBQUUsZ0JBQXlCLElBQUk7UUFDckYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckMsMkZBQTJGO1FBQzNGLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDakM7UUFFRCxJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRTNFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsb0ZBQW9GO1FBQ3BGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVLEVBQUUsVUFBZTtRQUNqQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDeEMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25EO1FBRUQsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDLEVBQUU7WUFDaEcsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQywwQkFBMEI7U0FDL0M7UUFFRCxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjLEVBQUUsT0FBNEMsRUFBRSxVQUE2QjtRQUN4RyxJQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN2QyxNQUFNLFVBQVUsR0FBd0MsRUFBRSxDQUFDO1lBQzNELElBQUksc0JBQXNCLEdBQVksS0FBSyxDQUFDO1lBQzVDLElBQUksaUJBQStCLENBQUM7WUFFcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFO29CQUN2QixzQkFBc0IsR0FBRyxLQUFLLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsQ0FBQztpQkFDckM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDcEYsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxzQkFBc0IsRUFBRTt3QkFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUNuQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7cUJBQy9CO29CQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQzthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUE2QztRQUMzRCxNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFELE1BQU0sVUFBVSxHQUNkLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRXRHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVUsRUFBRSxPQUE0QyxFQUFFLFVBQW1CLEtBQUs7UUFDOUYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUU7WUFDaEMsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQyxXQUFXLEdBQUcsTUFBTSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRTtnQkFDekIsT0FBTyxNQUFNLENBQUM7YUFDZjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNyQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ2Q7U0FDRjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25ELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDbEUsT0FBTyxDQUFDLENBQUM7YUFDVjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVMsRUFBRSxJQUFTO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxpQkFBaUI7UUFDZixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUvRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUM5QzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUNoRyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUV4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDckQsT0FBTztTQUNSO2FBQU0sSUFBSSxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1lBRTFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXBGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDL0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87U0FDUjtRQUVELHNDQUFzQztRQUN0QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxnRUFBZ0U7SUFDaEUsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQWM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxlQUFnQztRQUN2QyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZFLE9BQU87Z0JBQ0wsUUFBUSxFQUFFO29CQUNSLEtBQUssRUFBRSxLQUFLO2lCQUNiO2FBQ0YsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFUywyQkFBMkIsQ0FBQyxPQUErQjtRQUNuRSxJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1NBQ2pEO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVTLDBCQUEwQjtRQUNsQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFUyxhQUFhLENBQUMsS0FBVTtRQUNoQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRWhELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQVksRUFBRSxPQUFZO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0RCxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sbUJBQW1CLENBQ3pCLE9BQTRDLEVBQzVDLGFBQXFCLEVBQ3JCLHVCQUE2QztRQUU3QyxJQUFJLHVCQUF1QixFQUFFO1lBQzNCLE9BQU8sdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQztTQUMvRTthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUF1RDtRQUNqRixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDL0Q7UUFFRCxPQUFPLHdCQUF3QixDQUFDO0lBQ2xDLENBQUM7SUFFTyxXQUFXLENBQUMsZ0JBQXFDO1FBQ3ZELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzVDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsYUFBMkIsRUFBRSx3QkFBaUMsS0FBSztRQUN2RixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFFaEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsT0FBTyxDQUNMLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM5RyxDQUFDO1NBQ0g7UUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLFlBQXVELEVBQ3ZELHdCQUFpQyxLQUFLLEVBQ3RDLHVCQUE2QztRQUU3QyxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsRUFBRTtZQUMvRCxJQUNFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztnQkFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixrQkFBa0IsRUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFDaEQsdUJBQXVCLENBQ3hCO2dCQUNELENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLENBQUMsRUFDekQ7Z0JBQ0EsT0FBTyxrQkFBa0IsQ0FBQzthQUMzQjtZQUVELGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN2QyxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxnQkFBMkM7UUFDekUsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsRUFBRTtZQUN4RSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQztZQUN6QyxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFFdEcsSUFBSSw2QkFBNkIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBRWhELHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsNkJBQTZCLENBQUMsQ0FBQzthQUNqRztZQUVELE9BQU8sdUJBQXVCLENBQUM7UUFDakMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLGdCQUE4QixFQUFFO1FBQ3ZELE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUVoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxFQUFFO1lBQy9HLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN4QixhQUFhLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHVCQUF1QixDQUFDLE1BQW9DO1FBQ2xFLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7U0FDOUI7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVO1FBQzVCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0RTtRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFTyxnQ0FBZ0M7UUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFckYsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7O3dGQS82Qm1CLG9CQUFvQjt1RUFBcEIsb0JBQW9CO0FBWUQ7SUFBZixZQUFZLEVBQUU7dURBQTRCO0FBa0hoQztJQUFmLFlBQVksRUFBRTttREFBaUI7QUFXSjtJQUFmLFlBQVksRUFBRTs2REFBbUM7QUFXaEM7SUFBZixZQUFZLEVBQUU7K0RBQXFDO3VGQXBKaEUsb0JBQW9CO2NBRHpDLFNBQVM7b0VBYStCLFNBQVM7a0JBQS9DLEtBQUs7bUJBQUMsY0FBYztZQUdILEtBQUs7a0JBQXRCLEtBQUs7bUJBQUMsU0FBUztZQUdDLElBQUk7a0JBQXBCLEtBQUs7bUJBQUMsUUFBUTtZQUdBLElBQUk7a0JBQWxCLEtBQUs7bUJBQUMsTUFBTTtZQXlCYyxhQUFhO2tCQUF2QyxLQUFLO21CQUFDLGtCQUFrQjtZQVdPLGNBQWM7a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBa0JlLHNCQUFzQjtrQkFBOUQsS0FBSzttQkFBQyw0QkFBNEI7WUFpQ2xCLElBQUk7a0JBQXBCLEtBQUs7bUJBQUMsUUFBUTtZQWVNLFFBQVE7a0JBQTVCLEtBQUs7bUJBQUMsWUFBWTtZQUdlLEtBQUs7a0JBQXRDLEtBQUs7bUJBQUMsU0FBUztZQVc4QixlQUFlO2tCQUE1RCxLQUFLO21CQUFDLHFCQUFxQjtZQVdvQixpQkFBaUI7a0JBQWhFLEtBQUs7bUJBQUMsdUJBQXVCO1lBV1YsTUFBTTtrQkFBekIsTUFBTTttQkFBQyxVQUFVO1lBaUJPLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQVVHLFdBQVc7a0JBQXBDLE1BQU07bUJBQUMsZ0JBQWdCO1lBaURJLFdBQVc7a0JBQXRDLEtBQUs7bUJBQUMsZUFBZTtZQWlCUSxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQW1CYSxrQkFBa0I7a0JBQXRELEtBQUs7bUJBQUMsd0JBQXdCO1lBb0JILFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXdCTSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUFvQlcsZUFBZTtrQkFBL0MsS0FBSzttQkFBQyxvQkFBb0I7WUFrQkYsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBa0JhLGFBQWE7a0JBQTVDLEtBQUs7bUJBQUMsbUJBQW1CO1lBZ0JELFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWTtZQVdFLElBQUk7a0JBQXhCLEtBQUs7bUJBQUMsUUFBUTtZQXNCUyxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUFxQlUsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBNEJRLFlBQVk7a0JBQXpDLEtBQUs7bUJBQUMsaUJBQWlCO1lBa0NDLFFBQVE7a0JBQWhDLEtBQUs7bUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4sIGlzVHlwZW9mLCB2YWxpZFZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyByZXF1aXJlZEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlck1vZGUgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci1tb2RlLmVudW0nO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib0xpdGVyYWxzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvT3B0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLW9wdGlvbi1ncm91cC5pbnRlcmZhY2UnO1xuXG5jb25zdCBQT19DT01CT19ERUJPVU5DRV9USU1FX0RFRkFVTFQgPSA0MDA7XG5jb25zdCBQT19DT01CT19GSUVMRF9MQUJFTF9ERUZBVUxUID0gJ2xhYmVsJztcbmNvbnN0IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQgPSAndmFsdWUnO1xuXG5leHBvcnQgY29uc3QgcG9Db21ib0xpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ05vIGRhdGEgZm91bmQnXG4gIH0sXG4gIGVzOiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdEYXRvcyBubyBlbmNvbnRyYWRvcydcbiAgfSxcbiAgcHQ6IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ05lbmh1bSBkYWRvIGVuY29udHJhZG8nXG4gIH0sXG4gIHJ1OiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICfQlNCw0L3QvdGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiydcbiAgfVxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBPIGBwby1jb21ib2AgZXhpYmUgdW1hIGxpc3RhIGRlIG9ww6fDtWVzIGNvbSBmw6FjaWwgc2VsZcOnw6NvIGUgZmlsdHJhZ2VtLlxuICpcbiAqIEFsw6ltIGRhIGV4aWJpw6fDo28gcGFkcsOjbywgbmVsZSDDqSBwb3Nzw612ZWwgbGlzdGFyIGFzIG9ww7VlcyBlbSBhZ3J1cGFtZW50b3MuXG4gKlxuICogw4kgcG9zc8OtdmVsIHNlbGVjaW9uYXIgZSBuYXZlZ2FyIGVudHJlIGFzIG9ww6fDtWVzIGRhIGxpc3RhIHRhbnRvIGF0cmF2w6lzIGRvICptb3VzZSogcXVhbnRvIGRvIHRlY2xhZG8uIE5vIHRlY2xhZG8gbmF2ZWd1ZSBjb21cbiAqIGFzIHNldGFzIGUgcHJlc3Npb25lICpFbnRlciogbmEgb3DDp8OjbyBxdWUgZGVzZWphci5cbiAqXG4gKiBDb20gZWxlIHRhbWLDqW0gw6kgcG9zc8OtdmVsIGRlZmluaXIgdW1hIGxpc3RhIMOgIHBhcnRpciBkYSByZXF1aXNpw6fDo28gZGUgdW0gc2VydmnDp28gZGVmaW5pZG8gZW0gYHAtZmlsdGVyLXNlcnZpY2VgLlxuICpcbiAqIEVtIGBwLWZpbHRlci1tb2RlYCwgbyBmaWx0cm8gcG9kZXLDoSBzZXIgY29uZmlndXJhZG8gcGFyYSBidXNjYXIgb3DDtWVzIHF1ZSBjb3JyZXNwb25kYW0gYW8gaW7DrWNpbywgZmltIG91IHF1ZSBjb250ZW5oYSBvIHZhbG9yIGRpZ2l0YWRvLlxuICpcbiAqIE8gYHBvLWNvbWJvYCBndWFyZGEgbyDDumx0aW1vIHZhbG9yIGNhc28gbyB1c3XDoXJpbyBkZXNpc3RhIGRlIHVtYSBidXNjYSwgZGVpeGFuZG8gbyBjYW1wbyBvdSBwcmVzc2lvbmFuZG8gKkVzYyouIENhc28gc2VqYSBkaWdpdGFkbyBub1xuICogY2FtcG8gZGUgYnVzY2EgYSBkZXNjcmnDp8OjbyBjb21wbGV0YSBkZSB1bSBpdGVtLCBlbnTDo28gYSBzZWxlw6fDo28gc2Vyw6EgYXV0b21hdGljYW1lbnRlIGVmZXR1YWRhIGFvIGRlaXhhciBvIGNhbXBvIG91IHByZXNzaW9uYW5kbyAqRW50ZXIqLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb0NvbWJvQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEFwbGljYSBmb2NvIG5vIGVsZW1lbnRvIGFvIHNlciBpbmljaWFkby5cbiAgICpcbiAgICogPiBDYXNvIG1haXMgZGUgdW0gZWxlbWVudG8gc2VqYSBjb25maWd1cmFkbyBjb20gZXNzYSBwcm9wcmllZGFkZSwgYXBlbmFzIG8gw7psdGltbyBlbGVtZW50byBkZWNsYXJhZG8gY29tIGVsYSB0ZXLDoSBvIGZvY28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLWZvY3VzJykgQElucHV0Qm9vbGVhbigpIGF1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMYWJlbCBubyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ3AtbGFiZWwnKSBsYWJlbD86IHN0cmluZztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gcGFyYSBvIGNhbXBvLiAqL1xuICBASW5wdXQoJ3AtaGVscCcpIGhlbHA/OiBzdHJpbmc7XG5cbiAgLyoqIE5vbWUgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIE5lc3RhIHByb3ByaWVkYWRlIGRldmUgc2VyIGluZm9ybWFkYSBhIFVSTCBkbyBzZXJ2acOnbyBlbSBxdWUgc2Vyw6EgcmVhbGl6YWRvIG8gZmlsdHJvIHBhcmEgY2FycmVnYW1lbnRvIGRhIGxpc3RhIGRlXG4gICAqIGl0ZW5zIG5vIGNvbXBvbmVudGUuXG4gICAqIENhc28gaGFqYSBhIG5lY2Vzc2lkYWRlIGRlIGN1c3RvbWl6YcOnw6NvLCBlbnTDo28gcG9kZSBzZXIgaW5mb3JtYWRvIHVtIHNlcnZpw6dvIGltcGxlbWVudGFuZG8gYSBpbnRlcmZhY2UgUG9Db21ib0ZpbHRlci5cbiAgICpcbiAgICogQ2FzbyB1dGlsaXphZG8gdW1hIFVSTCwgbyBzZXJ2acOnbyBkZXZlIHNlciByZXRvcm5hZG8gbm8gcGFkcsOjbyBBUEkgVE9UVlMgZSB1dGlsaXphIGFzIHByb3ByaWVkYWRlc1xuICAgKiBgcC1maWVsZC1sYWJlbGAgZSBgcC1maWVsZC12YWx1ZWAgcGFyYSBhIGNvbnN0cnXDp8OjbyBkYSBsaXN0YSBkZSBpdGVucy5cbiAgICpcbiAgICogUXVhbmRvIHV0aWxpemFkYSB1bWEgVVJMIGRlIHNlcnZpw6dvLCBlbnTDo28gc2Vyw6EgY29uY2F0ZW5hZGEgbmVzdGEgVVJMIG8gdmFsb3IgcXVlIGRlc2VqYS1zZSBmaWx0cmFyIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKiBgYGBcbiAgICogdXJsICsgP2ZpbHRlcj1QZXRlclxuICAgKiBgYGBcbiAgICpcbiAgICogU2UgZm9yIGRlZmluaWRhIGEgcHJvcHJpZWRhZGUgYHAtZmlsdGVyLXBhcmFtc2AsIGEgbWVzbWEgdGFtYsOpbSBzZXLDoSBjb25jYXRlbmFkYS4gUG9yIGV4ZW1wbG8sIHBhcmEgb1xuICAgKiBwYXLDom1ldHJvIGB7IGFnZTogMjMgfWAgYSBVUkwgZmljYXJpYTpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmYWdlPTIzJmZpbHRlcj1QZXRlclxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItc2VydmljZScpIGZpbHRlclNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybyBhdGl2YSBhIGZ1bmNpb25hbGlkYWRlIGRlIHNjcm9sbCBpbmZpbml0byBwYXJhIG8gY29tYm8sIEFvIGNoZWdhciBhbyBmaW0gZGEgdGFiZWxhIGV4ZWN1dGFyw6Egbm92YSBidXNjYSBkb3MgZGFkb3MgY29uZm9ybWUgcGFnaW5hw6fDo28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwnKSBzZXQgaW5maW5pdGVTY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGluZmluaXRlU2Nyb2xsKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIHBlcmNlbnR1YWwgbmVjZXNzw6FyaW8gcGFyYSBkaXNwYXJhciBvIGV2ZW50byBgc2hvdy1tb3JlYCwgcXVlIMOpIHJlc3BvbnPDoXZlbCBwb3IgY2FycmVnYXIgbWFpcyBkYWRvcyBubyBjb21iby4gQ2FzbyBvIHZhbG9yIHNlamEgbWFpb3IgcXVlIDEwMCBvdSBtZW5vciBxdWUgMCwgbyB2YWxvciBwYWRyw6NvIHNlcsOhIDEwMCUuXG4gICAqXG4gICAqICoqRXhlbXBsb3MqKlxuICAgKiAtIHAtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlID0gODA6IFF1YW5kbyBhdGluZ2lyIDgwJSBkbyBzY3JvbGwgZG8gY29tYm8sIG8gYHNob3ctbW9yZWAgc2Vyw6EgZGlzcGFyYWRvLlxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZScpIHNldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlID0gdmFsdWUgPiAxMDAgfHwgdmFsdWUgPCAwID8gMTAwIDogdmFsdWU7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIMOtY29uZSBxdWUgc2Vyw6EgZXhpYmlkbyBubyBpbsOtY2lvIGRvIGNhbXBvLlxuICAgKlxuICAgKiDDiSBwb3Nzw612ZWwgdXNhciBxdWFscXVlciB1bSBkb3Mgw61jb25lcyBkYSBbQmlibGlvdGVjYSBkZSDDrWNvbmVzXSgvZ3VpZGVzL2ljb25zKS4gY29uZm9ybWUgZXhlbXBsbyBhYmFpeG86XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gcC1pY29uPVwicG8taWNvbi11c2VyXCIgcC1sYWJlbD1cIlBPIGNvbWJvXCI+PC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqIFRhbWLDqW0gw6kgcG9zc8OtdmVsIHV0aWxpemFyIG91dHJhcyBmb250ZXMgZGUgw61jb25lcywgcG9yIGV4ZW1wbG8gYSBiaWJsaW90ZWNhICpGb250IEF3ZXNvbWUqLCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBwLWljb249XCJmYSBmYS1wb2RjYXN0XCIgcC1sYWJlbD1cIlBPIGNvbWJvXCI+PC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqIE91dHJhIG9ww6fDo28gc2VyaWEgYSBjdXN0b21pemHDp8OjbyBkbyDDrWNvbmUgYXRyYXbDqXMgZG8gYFRlbXBsYXRlUmVmYCwgY29uZm9ybWUgZXhlbXBsbyBhYmFpeG86XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gW3AtaWNvbl09XCJ0ZW1wbGF0ZVwiIHAtbGFiZWw9XCJjb21ibyB0ZW1wbGF0ZSBpb25pY1wiPjwvcG8tY29tYm8+XG4gICAqXG4gICAqIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gICAqICA8aW9uLWljb24gc3R5bGU9XCJmb250LXNpemU6IGluaGVyaXRcIiBuYW1lPVwiaGVhcnRcIj48L2lvbi1pY29uPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICogPiBQYXJhIG8gw61jb25lIGVucXVhZHJhciBjb3JyZXRhbWVudGUsIGRldmUtc2UgdXRpbGl6YXIgYGZvbnQtc2l6ZTogaW5oZXJpdGAgY2FzbyBvIMOtY29uZSB1dGlsaXphZG8gbsOjbyBhcGxpcXVlLW8uXG4gICAqL1xuICBASW5wdXQoJ3AtaWNvbicpIGljb24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx2b2lkPjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgc2UgYSBpbmRpY2HDp8OjbyBkZSBjYW1wbyBvcGNpb25hbCBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE8gY2FtcG8gY29udGVyIGBwLXJlcXVpcmVkYDtcbiAgICogLSBOw6NvIHBvc3N1aXIgYHAtaGVscGAgZS9vdSBgcC1sYWJlbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25hbCcpIG9wdGlvbmFsOiBib29sZWFuO1xuXG4gIC8qKiBTZSB2ZXJkYWRlaXJvLCBvIGNhbXBvIHJlY2ViZXLDoSB1bSBib3TDo28gcGFyYSBzZXIgbGltcG8uICovXG4gIEBJbnB1dCgncC1jbGVhbicpIEBJbnB1dEJvb2xlYW4oKSBjbGVhbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgbyBldmVudG8gYHAtY2hhbmdlYCByZWNlYmVyw6EgY29tbyBhcmd1bWVudG8gbyBgUG9Db21ib09wdGlvbmAgcmVmZXJlbnRlIMOgIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1lbWl0LW9iamVjdC12YWx1ZScpIEBJbnB1dEJvb2xlYW4oKSBlbWl0T2JqZWN0VmFsdWU/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgZGVzYWJpbGl0YXLDoSBhIGJ1c2NhIGRlIHVtIGl0ZW0gdmlhIFRBQi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkLXRhYi1maWx0ZXInKSBASW5wdXRCb29sZWFuKCkgZGlzYWJsZWRUYWJGaWx0ZXI/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRhIHVtYSBmdW7Dp8OjbyBxdWUgc2Vyw6EgZGlzcGFyYWRhIHF1YW5kbyBob3V2ZXIgYWx0ZXJhw6fDtWVzIG5vIG5nTW9kZWwuIEEgZnVuw6fDo28gcmVjZWJlcsOhIGNvbW8gYXJndW1lbnRvIG8gbW9kZWwgbW9kaWZpY2Fkby5cbiAgICpcbiAgICogPiBQb2RlLXNlIG9wdGFyIHBlbG8gcmVjZWJpbWVudG8gZG8gb2JqZXRvIHNlbGVjaW9uYWRvIGFvIGludsOpcyBkbyBtb2RlbCBhdHJhdsOpcyBkYSBwcm9wcmllZGFkZSBgcC1lbWl0LW9iamVjdC12YWx1ZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBGdW7Dp8OjbyBwYXJhIGF0dWFsaXphciBvIG5nTW9kZWwgZG8gY29tcG9uZW50ZSwgbmVjZXNzw6FyaW8gcXVhbmRvIG7Do28gZm9yIHV0aWxpemFkbyBkZW50cm8gZGEgdGFnIGZvcm0uXG4gICAqXG4gICAqIE5hIHZlcnPDo28gMTIuMi4wIGRvIEFuZ3VsYXIgYSB2ZXJpZmljYcOnw6NvIGBzdHJpY3RUZW1wbGF0ZXNgIHZlbSB0cnVlIGNvbW8gZGVmYXVsdC4gUG9ydGFudG8sIHBhcmEgdXRpbGl6YXJcbiAgICogdHdvLXdheSBiaW5kaW5nIG5vIGNvbXBvbmVudGUgZGV2ZSBzZSB1dGlsaXphciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyAuLi4gW25nTW9kZWxdPVwiY29tYm9Nb2RlbFwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbWJvTW9kZWwgPSAkZXZlbnRcIj4gPC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqXG4gICAqL1xuICBAT3V0cHV0KCduZ01vZGVsQ2hhbmdlJykgbmdNb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZXZlIHNlciBpbmZvcm1hZGEgdW1hIGZ1bsOnw6NvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIGhvdXZlciBhbHRlcmHDp8O1ZXMgbm8gU2VhcmNoIGlucHV0LiBBIGZ1bsOnw6NvIHJlY2ViZXLDoSBjb21vIGFyZ3VtZW50byBvIGlucHV0IG1vZGlmaWNhZG8uXG4gICAqXG4gICAqL1xuICBAT3V0cHV0KCdwLWlucHV0LWNoYW5nZScpIGlucHV0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGNhY2hlT3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlO1xuICBmaXJzdEluV3JpdGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzRmlyc3RGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBrZXl1cFN1YnNjcmliZTogYW55O1xuICBvbk1vZGVsQ2hhbmdlOiBhbnk7XG4gIHByZXZpb3VzU2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZE9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cDtcbiAgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICBzZWxlY3RlZFZpZXc6IGFueTtcbiAgc2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2U7XG4gIHZpc2libGVPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwYWdlOiBudW1iZXIgPSAxO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgY2FjaGVTdGF0aWNPcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiA9IFtdO1xuICBwcm90ZWN0ZWQgY29tYm9PcHRpb25zTGlzdDogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4gPSBbXTtcbiAgcHJvdGVjdGVkIG9uTW9kZWxUb3VjaGVkOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgX2NoYW5nZU9uRW50ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlYm91bmNlVGltZT86IG51bWJlciA9IDQwMDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkSW5pdEZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9ICdsYWJlbCc7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBwcml2YXRlIF9maWx0ZXJNaW5sZW5ndGg/OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9Db21ib0ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9maWx0ZXJQYXJhbXM/OiBhbnk7XG4gIHByaXZhdGUgX2xpdGVyYWxzPzogUG9Db21ib0xpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPiA9IFtdO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zb3J0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U/OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9oZWlnaHQ/OiBudW1iZXI7XG5cbiAgLy8gdXRpbGl6YWRvIHBhcmEgZmF6ZXIgbyBjb250cm9sZSBkZSBhdHVhbGl6YXIgbyBtb2RlbC5cbiAgLy8gbsOjbyBkZXZlIGZvcsOnYXIgYSBhdHVhbGl6YcOnw6NvIHNlIG8gZ2F0aWxobyBmb3IgbyB3cml0ZVZhbHVlIHBhcmEgbsOjbyBkZWl4YXIgbyBjYW1wbyBkaXJ0eS5cbiAgcHJpdmF0ZSBmcm9tV3JpdGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdmFsaWRhdG9yQ2hhbmdlOiBhbnk7XG5cbiAgLyoqIE1lbnNhZ2VtIGFwcmVzZW50YWRhIGVucXVhbnRvIG8gY2FtcG8gZXN0aXZlciB2YXppby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEVzdGEgcHJvcHJpZWRhZGUgZGVmaW5lIGVtIHF1YW50byB0ZW1wbyAoZW0gbWlsaXNzZWd1bmRvcyksIGFndWFyZGEgcGFyYSBhY2lvbmFyIG8gZXZlbnRvIGRlIGZpbHRybyBhcMOzcyBjYWRhIHByZXNzaW9uYW1lbnRvIGRlIHRlY2xhLlxuICAgKiBTZXLDoSB1dGlsaXphZGEgYXBlbmFzIHF1YW5kbyBob3V2ZXIgc2VydmnDp28gKGBwLWZpbHRlci1zZXJ2aWNlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA0MDBgXG4gICAqL1xuICBASW5wdXQoJ3AtZGVib3VuY2UtdGltZScpIHNldCBkZWJvdW5jZVRpbWUodmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VJbnQoPGFueT52YWx1ZSwgMTApO1xuXG4gICAgdGhpcy5fZGVib3VuY2VUaW1lID0gIWlzTmFOKHBhcnNlZFZhbHVlKSAmJiBwYXJzZWRWYWx1ZSA+IDAgPyBwYXJzZWRWYWx1ZSA6IFBPX0NPTUJPX0RFQk9VTkNFX1RJTUVfREVGQVVMVDtcbiAgfVxuXG4gIGdldCBkZWJvdW5jZVRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2VUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGVzYWJpbGl0YSBvIGZpbHRybyBpbmljaWFsIG5vIHNlcnZpw6dvLCBxdWUgw6kgZXhlY3V0YWRvIG5vIHByaW1laXJvIGNsaXF1ZSBubyBjYW1wby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkLWluaXQtZmlsdGVyJykgc2V0IGRpc2FibGVkSW5pdEZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkSW5pdEZpbHRlciA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkSW5pdEZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRJbml0RmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBkbyBvYmpldG8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgY29udmVyc8OjbyBkb3MgaXRlbnMgYXByZXNlbnRhZG9zIG5hIGxpc3RhIGRvIGNvbXBvbmVudGVcbiAgICogKGBwLW9wdGlvbnNgKSwgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSByZXNwb25zw6F2ZWwgcGVsbyB2YWxvciBkZSBjYWRhIGl0ZW0gZGEgbGlzdGEuXG4gICAqXG4gICAqIE5lY2Vzc8OhcmlvIHF1YW5kbyBpbmZvcm1hciBvIHNlcnZpw6dvIGNvbW8gVVJMIGUgbyBtZXNtbyBuw6NvIGVzdGl2ZXIgcmV0b3JuYW5kbyB1bWEgbGlzdGEgZGUgb2JqZXRvcyBubyBwYWRyw6NvIGRhIGludGVyZmFjZVxuICAgKiBQb0NvbWJvT3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdmFsdWVgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBzZXQgZmllbGRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG5cbiAgICBpZiAoaXNUeXBlb2YodGhpcy5maWx0ZXJTZXJ2aWNlLCAnc3RyaW5nJykgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZmllbGRWYWx1ZSA9IHRoaXMuX2ZpZWxkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBsYWJlbGBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWUgfHwgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFZhbG9yIG3DrW5pbW8gZGUgY2FyYWN0ZXJlcyBwYXJhIHJlYWxpemFyIG8gZmlsdHJvIG5vIHNlcnZpw6dvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbWlubGVuZ3RoJykgc2V0IGZpbHRlck1pbmxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG5cbiAgICB0aGlzLl9maWx0ZXJNaW5sZW5ndGggPSBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlVmFsdWUpID8gcGFyc2VWYWx1ZSA6IDA7XG4gIH1cblxuICBnZXQgZmlsdGVyTWlubGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJNaW5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGV2ZW50byBgcC1jaGFuZ2VgIHPDsyBzZXLDoSBkaXNwYXJhZG8gYW8gY2xpY2FyIG91IHByZXNzaW9uYXIgYSB0ZWNsYSBcIkVudGVyXCIgc29icmUgdW1hIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jaGFuZ2Utb24tZW50ZXInKSBzZXQgY2hhbmdlT25FbnRlcihjaGFuZ2VPbkVudGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hhbmdlT25FbnRlciA9IGNvbnZlcnRUb0Jvb2xlYW4oY2hhbmdlT25FbnRlcik7XG4gIH1cblxuICBnZXQgY2hhbmdlT25FbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlT25FbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKiogSW5kaWNhIHF1ZSBhIGxpc3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHAtb3B0aW9ucyBzZXLDoSBvcmRlbmFkYSBwZWxhIGRlc2NyacOnw6NvLiAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gY29udmVydFRvQm9vbGVhbihzb3J0KTtcbiAgICB0aGlzLmNvbWJvTGlzdERlZmluaXRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgYSBsaXN0YSBkZSBvcMOnw7VlcyBkbyBgcG8tY29tYm9gLlxuICAgKlxuICAgKiA+IEEgbGlzdGEgcG9kZSBzZXIgZGVmaW5pZGEgZW0gZG9pcyBmb3JtYXRvcywgc2ltcGxlcyBvdSBjb20gYWdydXBhbWVudG9zLlxuICAgKiAtIFV0aWxpemUgYFBvQ29tYm9PcHRpb25gIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgc2ltcGxlcy5cbiAgICogLSBVdGlsaXplIGBQb0NvbWJvT3B0aW9uR3JvdXBgIHBhcmEgbGlzdGEgZGUgb3DDp8O1ZXMgY29tIGFncnVwYW1lbnRvLlxuICAgKlxuICAgKiAqKkltcG9ydGFudGU6KipcbiAgICogLSBBIGxpc3RhIGRldmUgc2VndWlyIGFzIGRlZmluacOnw7VlcyBkZXNjcml0YXMgbmFzIHJlc3BlY3RpdmFzIGludGVyZmFjZXMsIGNhc28gY29udHLDoXJpbyBuw6NvIGV4aWJpcsOhIGEoYXMpIG9ww6fDo28ow7VlcykgZm9yYSBkb3MgcGFkcsO1ZXMuXG4gICAqIC0gTyBjb21wb25lbnRlIGludGVycHJldGFyw6EgbyBmb3JtYXRvIGRhIGxpc3RhIGRlIGFjb3JkbyBjb20gYSBpbnRlcmZhY2UgdXRpbGl6YWRhIGUgc8OzIGV4aWJpcsOhIGFzIG9ww6fDtWVzIGNvcnJlc3BvbmRlbnRlcyDDoCBlbGEuXG4gICAqIC0gVW0gYWdydXBhbWVudG8gc8OzIHNlcsOhIGV4aWJpZG8gc2UgaG91dmVyIHBlbG8gbWVub3MgdW1hIG9ww6fDo28gdsOhbGlkYS5cbiAgICogLSBBY29uc2VsaGEtc2UgdXRpbGl6YXIgdmFsb3JlcyBkaXN0aW50b3Mgbm8gYGxhYmVsYCBlIGB2YWx1ZWAgZG9zIGl0ZW5zLlxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbnMnKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IFtdO1xuXG4gICAgdGhpcy5jb21ib0xpc3REZWZpbml0aW9ucygpO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBtb2RvIGRlIHBlc3F1aXNhIHV0aWxpemFkbyBubyBmaWx0cm8gZGEgbGlzdGEgZGUgc2VsZcOnw6NvOiBgc3RhcnRzV2l0aGAsIGBjb250YWluc2Agb3UgYGVuZHNXaXRoYC5cbiAgICpcbiAgICogPiBRdWFuZG8gdXRpbGl6YXIgYSBwcm9wcmllZGFkZSBgcC1maWx0ZXItc2VydmljZWAgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSBpZ25vcmFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHN0YXJ0c1dpdGhgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLW1vZGUnKSBzZXQgZmlsdGVyTW9kZShmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBmaWx0ZXJNb2RlIGluIFBvQ29tYm9GaWx0ZXJNb2RlID8gZmlsdGVyTW9kZSA6IFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgc3dpdGNoICh0aGlzLl9maWx0ZXJNb2RlLnRvU3RyaW5nKCkpIHtcbiAgICAgIGNhc2UgJ3N0YXJ0c1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5jb250YWlucztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbmRzV2l0aCc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5lbmRzV2l0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlck1vZGUoKTogUG9Db21ib0ZpbHRlck1vZGUge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJNb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVmFsb3IgcXVlIHNlcsOhIHJlcGFzc2FkbyBjb21vIHBhcsOibWV0cm8gcGFyYSBhIFVSTCBvdSBhb3MgbcOpdG9kb3MgZG8gc2VydmnDp28gcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlICpQb0NvbWJvRmlsdGVyKi5cbiAgICpcbiAgICogPiBDYXNvIGEgbGlzdGEgY29udGVuaGEgYWdydXBhbWVudG9zLCBvcyBtZXNtb3Mgc8OzIHNlcsOjbyBleGliaWRvcyBzZSBob3V2ZXIgbm8gbcOtbmltbyB1bWEgb3DDp8OjbyBxdWUgY29ycmVzcG9uZGEgw6AgcGVzcXVpc2EuXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXBhcmFtcycpIHNldCBmaWx0ZXJQYXJhbXMoZmlsdGVyUGFyYW1zOiBhbnkpIHtcbiAgICB0aGlzLl9maWx0ZXJQYXJhbXMgPSBmaWx0ZXJQYXJhbXMgfHwgZmlsdGVyUGFyYW1zID09PSAwIHx8IGZpbHRlclBhcmFtcyA9PT0gZmFsc2UgPyBmaWx0ZXJQYXJhbXMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgZmlsdGVyUGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tY29tYm9gLlxuICAgKlxuICAgKiBQYXJhIHV0aWxpemFyIGJhc3RhIHBhc3NhciBhIGxpdGVyYWwgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb0NvbWJvTGl0ZXJhbHMgPSB7XG4gICAqICAgIG5vRGF0YTogJ05lbmh1bSB2YWxvcidcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYSBsaXRlcmFsIGN1c3RvbWl6YWRhLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb0NvbWJvTGl0ZXJhbHMpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSB7XG4gICAgICAgIC4uLnBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9Db21ib0xpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9Db21ib0xpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGl0ZXJhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpdGVyYWxzIHx8IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICBnZXQgaXNPcHRpb25Hcm91cExpc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMubGVuZ3RoICYmIHRoaXMuX29wdGlvbnNbMF0uaGFzT3duUHJvcGVydHkoJ29wdGlvbnMnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gIH1cblxuICBvbkluaXRTZXJ2aWNlKCkge1xuICAgIGlmICh0aGlzLmZpbHRlclNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2V0U2VydmljZSh0aGlzLmZpbHRlclNlcnZpY2UpO1xuICAgICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VydmljZShzZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgIGlmIChpc1R5cGVvZihzZXJ2aWNlLCAnb2JqZWN0JykpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gPFBvQ29tYm9GaWx0ZXJTZXJ2aWNlPnNlcnZpY2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuY29uZmlnUHJvcGVydGllcyg8c3RyaW5nPnNlcnZpY2UsIHRoaXMuZmllbGRMYWJlbCwgdGhpcy5maWVsZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wYXJlTWV0aG9kKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXAsIGZpbHRlck1vZGU6IFBvQ29tYm9GaWx0ZXJNb2RlKSB7XG4gICAgc3dpdGNoIChmaWx0ZXJNb2RlKSB7XG4gICAgICBjYXNlIFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0c1dpdGgoc2VhcmNoLCBvcHRpb24pO1xuICAgICAgY2FzZSBQb0NvbWJvRmlsdGVyTW9kZS5jb250YWluczpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnMoc2VhcmNoLCBvcHRpb24pO1xuICAgICAgY2FzZSBQb0NvbWJvRmlsdGVyTW9kZS5lbmRzV2l0aDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kc1dpdGgoc2VhcmNoLCBvcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0c1dpdGgoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCkge1xuICAgIHJldHVybiBvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGNvbnRhaW5zKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gudG9Mb3dlckNhc2UoKSkgPiAtMTtcbiAgfVxuXG4gIGVuZHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXApIHtcbiAgICByZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgZ2V0T3B0aW9uRnJvbVZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgIHJldHVybiBvcHRpb25zID8gb3B0aW9ucy5maW5kKChvcHRpb246IGFueSkgPT4gdGhpcy5pc0VxdWFsKG9wdGlvbi52YWx1ZSwgdmFsdWUpKSA6IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25Gcm9tTGFiZWwobGFiZWw6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiBvcHRpb24ubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBsYWJlbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCwgaXNVcGRhdGVNb2RlbDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25MYWJlbCA9IChvcHRpb24gJiYgb3B0aW9uLmxhYmVsKSB8fCAnJztcblxuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxWYXJpYWJsZXMob3B0aW9uKTtcblxuICAgIC8vIGF0dWFsaXphIG8gdmFsb3IgZG8gaW5wdXQgcXVhbmRvIGZvciBjaGFuZ2VPbkVudGVyIGFwZW5hcyBzZSBmb3IgcGFyYSBhdHVhbGl6YXIgbyBtb2RlbC5cbiAgICBpZiAodGhpcy5jaGFuZ2VPbkVudGVyICYmIGlzVXBkYXRlTW9kZWwpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShvcHRpb25MYWJlbCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5jaGFuZ2VPbkVudGVyKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUob3B0aW9uTGFiZWwpO1xuICAgIH1cblxuICAgIGlmIChpc1VwZGF0ZU1vZGVsKSB7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IG9wdGlvbj8udmFsdWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbi52YWx1ZSA6IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy51cGRhdGVNb2RlbChvcHRpb25WYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbE1vZGVsQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBDYXNvIG8gY29tcG9uZW50ZSBlc3RpdmVyIGRlbnRybyBkZSB1bSBmb3JtLCB0ZXLDoSBhY2Vzc28gYW8gbcOpdG9kbyBvbk1vZGVsQ2hhbmdlLlxuICAgIHJldHVybiB0aGlzLm9uTW9kZWxDaGFuZ2UgPyB0aGlzLm9uTW9kZWxDaGFuZ2UodmFsdWUpIDogdGhpcy5uZ01vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgaXNFcXVhbCh2YWx1ZTogYW55LCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoKHZhbHVlIHx8IHZhbHVlID09PSAwKSAmJiBpbnB1dFZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKSA9PT0gaW5wdXRWYWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICgodmFsdWUgPT09IG51bGwgJiYgaW5wdXRWYWx1ZSAhPT0gbnVsbCkgfHwgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgaW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gOyAvLyBUcmFuc2Zvcm1hbmRvIGVtIHN0cmluZ1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSA9PT0gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIHNlYXJjaEZvckxhYmVsKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiwgZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICBpZiAoc2VhcmNoICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+ID0gW107XG4gICAgICBsZXQgYWRkZWRPcHRpb25zR3JvdXBUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgbGV0IG9wdGlvbnNHcm91cFRpdGxlOiBQb0NvbWJvR3JvdXA7XG5cbiAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICBpZiAoJ29wdGlvbnMnIGluIG9wdGlvbikge1xuICAgICAgICAgIGFkZGVkT3B0aW9uc0dyb3VwVGl0bGUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gKG9wdGlvbnNHcm91cFRpdGxlID0gb3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb24ubGFiZWwgJiYgKHRoaXMuY29tcGFyZU1ldGhvZChzZWFyY2gsIG9wdGlvbiwgZmlsdGVyTW9kZSkgfHwgdGhpcy5zZXJ2aWNlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmICFhZGRlZE9wdGlvbnNHcm91cFRpdGxlKSB7XG4gICAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uc0dyb3VwVGl0bGUpO1xuICAgICAgICAgICAgYWRkZWRPcHRpb25zR3JvdXBUaXRsZSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IG5ld09wdGlvbnNbdGhpcy5pc09wdGlvbkdyb3VwTGlzdCA/IDEgOiAwXTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KG5ld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbWJvTGlzdChvcHRpb25zPzogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cD4pIHtcbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IG9wdGlvbnMgfHwgWy4uLnRoaXMuY29tYm9PcHRpb25zTGlzdF07XG5cbiAgICBjb25zdCBuZXdPcHRpb25zID1cbiAgICAgICFvcHRpb25zICYmICF0aGlzLmluZmluaXRlU2Nyb2xsICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSA/IFt7IC4uLnRoaXMuc2VsZWN0ZWRPcHRpb24gfV0gOiBjb3B5T3B0aW9ucztcblxuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSBuZXdPcHRpb25zO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmlldyAmJiB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBjb3B5T3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgIT09IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dE9wdGlvbih2YWx1ZTogYW55LCBvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwPiwgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb3B0aW9uc0xpc3QgPSByZXZlcnNlID8gb3B0aW9ucy5zbGljZSgwKS5yZXZlcnNlKCkgOiBvcHRpb25zLnNsaWNlKDApO1xuICAgIGxldCBvcHRpb25Gb3VuZCA9IG51bGw7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zTGlzdCkge1xuICAgICAgaWYgKG9wdGlvbi52YWx1ZSAmJiAhb3B0aW9uRm91bmQpIHtcbiAgICAgICAgb3B0aW9uRm91bmQgPSBvcHRpb247XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uLnZhbHVlICYmIGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0VxdWFsKG9wdGlvbi52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uRm91bmQ7XG4gIH1cblxuICBnZXRJbmRleFNlbGVjdGVkVmlldygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmVPYmplY3RzKHRoaXMudmlzaWJsZU9wdGlvbnNbaV0sIHRoaXMuc2VsZWN0ZWRWaWV3KSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wYXJlT2JqZWN0cyhvYmoxOiBhbnksIG9iajI6IGFueSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMik7XG4gIH1cblxuICB2ZXJpZnlWYWxpZE9wdGlvbigpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG5cbiAgICBjb25zdCBvcHRpb25Gb3VuZCA9IHRoaXMuZ2V0T3B0aW9uRnJvbUxhYmVsKGlucHV0VmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVTdGF0aWNPcHRpb25zXSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbkZvdW5kICYmIG9wdGlvbkZvdW5kLnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb25Gb3VuZCk7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IG9wdGlvbkZvdW5kLmxhYmVsO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi5sYWJlbCAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRWYWx1ZSAmJiAhb3B0aW9uRm91bmQpIHtcbiAgICAgIGNvbnN0IGlzSW5wdXRWYWx1ZURpZmZTZWxlY3RlZExhYmVsID0gISEodGhpcy5zZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uLmxhYmVsICE9PSBpbnB1dFZhbHVlKTtcblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwsIGlzSW5wdXRWYWx1ZURpZmZTZWxlY3RlZExhYmVsIHx8IHRoaXMuY2hhbmdlT25FbnRlcik7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY2ViZSBhcyBhbHRlcmHDp8O1ZXMgZG8gbW9kZWxcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRWYWx1ZSh2YWx1ZSkgJiYgIXRoaXMuc2VydmljZSAmJiB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgJiYgdGhpcy5jb21ib09wdGlvbnNMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25Gcm9tVmFsdWUodmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2UgaG91dmVyIHNlcnZpw6dvIGJ1c2NhIHBlbG8gbW9kZWwuXG4gICAgaWYgKHZhbHVlICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGFic3RyYWN0Q29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlcXVpcmVkOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY2xlYXIodmFsdWUpIHtcbiAgICB0aGlzLmNhbGxNb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlnQWZ0ZXJTZXRGaWx0ZXJTZXJ2aWNlKHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gW107XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCk7XG4gICAgICB0aGlzLm9uSW5pdFNlcnZpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gdGhpcy5jYWNoZVN0YXRpY09wdGlvbnM7XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmVLZXl1cE9ic2VydmFibGUoKSB7XG4gICAgaWYgKHRoaXMua2V5dXBTdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMua2V5dXBTdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVNb2RlbChtb2RlbDogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21ib0xpc3REZWZpbml0aW9ucygpIHtcbiAgICB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMubGlzdGluZ0NvbWJvT3B0aW9ucyh0aGlzLm9wdGlvbnMpIDogdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuY2FjaGVTdGF0aWNPcHRpb25zID0gdGhpcy5jb21ib09wdGlvbnNMaXN0O1xuXG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZU9wdGlvbnMob3B0aW9uQTogYW55LCBvcHRpb25COiBhbnkpIHtcbiAgICBjb25zdCBsYWJlbEEgPSBvcHRpb25BLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBsYWJlbEIgPSBvcHRpb25CLmxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiBsYWJlbEEgPCBsYWJlbEIgPyAtMSA6IGxhYmVsQSA+IGxhYmVsQiA/IDEgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNEdXBsaWNhdGVkT3B0aW9uKFxuICAgIG9wdGlvbnM6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvR3JvdXA+LFxuICAgIGN1cnJlbnRPcHRpb246IHN0cmluZyxcbiAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucz86IEFycmF5PFBvQ29tYm9Hcm91cD5cbiAgKSB7XG4gICAgaWYgKGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zKSB7XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uLmxhYmVsID09PSBjdXJyZW50T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBjdXJyZW50T3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RpbmdDb21ib09wdGlvbnMoY29tYm9PcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwPikge1xuICAgIGNvbnN0IGNvbWJvT3B0aW9uc0xpc3QgPSBjb21ib09wdGlvbnMuY29uY2F0KCk7XG4gICAgY29uc3QgdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0ID0gdGhpcy52ZXJpZnlDb21ib09wdGlvbnMoY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICB0aGlzLnNvcnRPcHRpb25zKHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAodmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0T3B0aW9ucyhjb21ib09wdGlvbnNMaXN0OiBBcnJheTxQb0NvbWJvR3JvdXA+KSB7XG4gICAgaWYgKGNvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlKGN1cnJlbnRPcHRpb246IFBvQ29tYm9Hcm91cCwgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IGxhYmVsLCBvcHRpb25zLCB2YWx1ZSB9ID0gY3VycmVudE9wdGlvbjtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodmFsaWRWYWx1ZShsYWJlbCkgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHx8ICh2ZXJpZnlpbmdPcHRpb25zR3JvdXAgPT09IHRydWUgJiYgdmFsaWRWYWx1ZSh2YWx1ZSkpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZFZhbHVlKHZhbHVlKSAmJiAhb3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q29tYm9PcHRpb25zKFxuICAgIGNvbWJvT3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cD4sXG4gICAgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UsXG4gICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnM/OiBBcnJheTxQb0NvbWJvR3JvdXA+XG4gICkge1xuICAgIHJldHVybiBjb21ib09wdGlvbnMucmVkdWNlKChhY2N1bXVsYXRlZE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMudmVyaWZ5SWZIYXNMYWJlbChjdXJyZW50T3B0aW9uKSB8fFxuICAgICAgICB0aGlzLmhhc0R1cGxpY2F0ZWRPcHRpb24oXG4gICAgICAgICAgYWNjdW11bGF0ZWRPcHRpb25zLFxuICAgICAgICAgIGN1cnJlbnRPcHRpb25bJ3ZhbHVlJ10gfHwgY3VycmVudE9wdGlvblsnbGFiZWwnXSxcbiAgICAgICAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9uc1xuICAgICAgICApIHx8XG4gICAgICAgICF0aGlzLnZhbGlkYXRlVmFsdWUoY3VycmVudE9wdGlvbiwgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRlZE9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGFjY3VtdWxhdGVkT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkT3B0aW9ucztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNvbWJvT3B0aW9uc0dyb3VwKGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PFBvQ29tYm9PcHRpb25Hcm91cD4pIHtcbiAgICByZXR1cm4gY29tYm9PcHRpb25zTGlzdC5yZWR1Y2UoKGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zLCBjdXJyZW50T3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IG9wdGlvbnMsIGxhYmVsIH0gPSBjdXJyZW50T3B0aW9uO1xuICAgICAgY29uc3QgdmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3QgPSB0aGlzLnZlcmlmeUNvbWJvT3B0aW9ucyhvcHRpb25zLCB0cnVlLCBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucyk7XG5cbiAgICAgIGlmICh2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnModmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3QpO1xuXG4gICAgICAgIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zLnB1c2goeyBsYWJlbDogbGFiZWwsIG9wdGlvbnM6IHRydWUgfSwgLi4udmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRHcm91cE9wdGlvbnM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlJZkhhc0xhYmVsKGN1cnJlbnRPcHRpb246IFBvQ29tYm9Hcm91cCA9IHt9KSB7XG4gICAgY29uc3QgeyBsYWJlbCwgb3B0aW9ucywgdmFsdWUgfSA9IGN1cnJlbnRPcHRpb247XG5cbiAgICBpZiAoKHRoaXMuaXNPcHRpb25Hcm91cExpc3QgJiYgb3B0aW9ucyAmJiAhbGFiZWwpIHx8ICghbGFiZWwgJiYgIXZhbHVlKSB8fCAoIXRoaXMuaXNPcHRpb25Hcm91cExpc3QgJiYgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb24ubGFiZWwpIHtcbiAgICAgIGN1cnJlbnRPcHRpb24ubGFiZWwgPSBjdXJyZW50T3B0aW9uLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW50ZXJuYWxWYXJpYWJsZXMob3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwKSB7XG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBvcHRpb247XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5mcm9tV3JpdGVWYWx1ZSkge1xuICAgICAgICB0aGlzLmNhbGxNb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5lbWl0T2JqZWN0VmFsdWUgPyB0aGlzLnNlbGVjdGVkT3B0aW9uIDogdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZnJvbVdyaXRlVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRWYWx1ZVdpdGhPbGRPcHRpb24oKSB7XG4gICAgY29uc3Qgb2xkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25Gcm9tVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QpO1xuXG4gICAgaWYgKG9sZE9wdGlvbiAmJiBvbGRPcHRpb24ubGFiZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob2xkT3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBzZXRJbnB1dFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGdldE9iamVjdEJ5VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgZ2V0SW5wdXRWYWx1ZSgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaW5pdElucHV0T2JzZXJ2YWJsZSgpOiB2b2lkO1xufVxuIl19