igniteui-angular 16.0.0-beta.0 → 16.0.0-beta.2
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.
- package/esm2022/lib/banner/banner.component.mjs +12 -12
- package/esm2022/lib/calendar/calendar-base.mjs +1 -1
- package/esm2022/lib/calendar/calendar.mjs +2 -1
- package/esm2022/lib/card/card.component.mjs +1 -2
- package/esm2022/lib/chips/chip.component.mjs +2 -2
- package/esm2022/lib/data-operations/data-util.mjs +1 -1
- package/esm2022/lib/data-operations/filtering-strategy.mjs +1 -1
- package/esm2022/lib/data-operations/pivot-sort-strategy.mjs +1 -1
- package/esm2022/lib/data-operations/pivot-strategy.mjs +3 -3
- package/esm2022/lib/data-operations/sorting-strategy.mjs +3 -3
- package/esm2022/lib/date-common/picker-base.directive.mjs +1 -2
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +1 -2
- package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +1 -3
- package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +2 -2
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +1 -1
- package/esm2022/lib/directives/mask/mask-parsing.service.mjs +4 -5
- package/esm2022/lib/directives/mask/mask.directive.mjs +1 -2
- package/esm2022/lib/directives/text-selection/text-selection.module.mjs +20 -0
- package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +1 -3
- package/esm2022/lib/grids/columns/column.component.mjs +2 -1
- package/esm2022/lib/grids/columns/interfaces.mjs +1 -1
- package/esm2022/lib/grids/columns/templates.directive.mjs +1 -8
- package/esm2022/lib/grids/common/strategy.mjs +1 -1
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +2 -2
- package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +1 -2
- package/esm2022/lib/grids/grid/grid.directives.mjs +1 -11
- package/esm2022/lib/grids/grid-base.directive.mjs +3 -5
- package/esm2022/lib/grids/grid-public-cell.mjs +12 -12
- package/esm2022/lib/grids/grid.rowEdit.directive.mjs +1 -5
- package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +1 -3
- package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +2 -2
- package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +1 -2
- package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +2 -2
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +5 -5
- package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +2 -2
- package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +1 -2
- package/esm2022/lib/grids/row-drag.directive.mjs +1 -3
- package/esm2022/lib/grids/selection/row-selectors.mjs +1 -4
- package/esm2022/lib/grids/state.directive.mjs +2 -2
- package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +1 -1
- package/esm2022/lib/grids/toolbar/common.mjs +1 -2
- package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +2 -2
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +1 -2
- package/esm2022/lib/grids/tree-grid/tree-grid.filtering.strategy.mjs +1 -1
- package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +1 -1
- package/esm2022/lib/icon/icon.service.mjs +2 -2
- package/esm2022/lib/services/excel/excel-files.mjs +2 -2
- package/esm2022/lib/services/excel/worksheet-data-dictionary.mjs +1 -1
- package/esm2022/lib/services/exporter-common/base-export-service.mjs +2 -2
- package/esm2022/lib/services/transaction/igx-transaction.mjs +1 -1
- package/esm2022/lib/services/transaction/transaction-factory.service.mjs +1 -2
- package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +1 -3
- package/esm2022/lib/tabs/tab-content.directive.mjs +1 -2
- package/esm2022/lib/tabs/tab-header.directive.mjs +1 -2
- package/esm2022/lib/tabs/tab-item.directive.mjs +1 -2
- package/esm2022/lib/tabs/tabs/public_api.mjs +1 -1
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +1 -2
- package/esm2022/lib/tree/tree-navigation.service.mjs +1 -1
- package/esm2022/lib/tree/tree-node/tree-node.component.mjs +1 -3
- package/esm2022/lib/tree/tree-selection.service.mjs +1 -2
- package/esm2022/public_api.mjs +2 -1
- package/fesm2022/igniteui-angular.mjs +66 -101
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/banner/banner.component.d.ts +9 -9
- package/lib/directives/for-of/for_of.directive.d.ts +1 -1
- package/lib/directives/text-selection/text-selection.module.d.ts +11 -0
- package/lib/grids/columns/column.component.d.ts +1 -1
- package/lib/grids/columns/interfaces.d.ts +1 -2
- package/lib/grids/grid-base.directive.d.ts +1 -1
- package/lib/grids/grid-public-cell.d.ts +8 -8
- package/lib/tabs/tabs/public_api.d.ts +1 -0
- package/migrations/common/UpdateChanges.js +2 -3
- package/migrations/common/util.js +3 -1
- package/migrations/update-13_0_0/index.js +4 -4
- package/package.json +7 -7
- package/public_api.d.ts +1 -0
- package/schematics/tsconfig.tsbuildinfo +1 -1
|
@@ -235,4 +235,4 @@ export class IgxTreeNavigationService {
|
|
|
235
235
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxTreeNavigationService, decorators: [{
|
|
236
236
|
type: Injectable
|
|
237
237
|
}], ctorParameters: function () { return [{ type: i1.IgxTreeService }, { type: i2.IgxTreeSelectionService }]; } });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvdHJlZS90cmVlLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBd0Isb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRS9CLHdCQUF3QjtBQUV4QixNQUFNLE9BQU8sd0JBQXdCO0lBYWpDLFlBQW9CLFdBQTJCLEVBQVUsZ0JBQXlDO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFWMUYsaUJBQVksR0FBcUIsSUFBSSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFxQixJQUFJLENBQUM7UUFDMUMsZ0JBQVcsR0FBcUIsSUFBSSxDQUFDO1FBRXJDLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFDMUMsdUJBQWtCLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsc0JBQWlCLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFckQsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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LEtBQUs7UUFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1RCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hEO2FBQU07WUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7SUFFRCxvRkFBb0Y7SUFDNUUsY0FBYyxDQUFDLElBQXNCLEVBQUUsTUFBYyxDQUFDO1FBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3pELENBQUM7bUhBalBRLHdCQUF3Qjt1SEFBeEIsd0JBQXdCOztnR0FBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hUcmVlLCBJZ3hUcmVlTm9kZSwgSWd4VHJlZVNlbGVjdGlvblR5cGUgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBOQVZJR0FUSU9OX0tFWVMgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgdHJlZTogSWd4VHJlZTtcblxuICAgIHByaXZhdGUgX2ZvY3VzZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gbnVsbDtcbiAgICBwcml2YXRlIF9sYXN0Rm9jdXNlZE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuICAgIHByaXZhdGUgX2FjdGl2ZU5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBfdmlzaWJsZUNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBbXTtcbiAgICBwcml2YXRlIF9pbnZpc2libGVDaGlsZHJlbjogU2V0PElneFRyZWVOb2RlPGFueT4+ID0gbmV3IFNldCgpO1xuICAgIHByaXZhdGUgX2Rpc2FibGVkQ2hpbGRyZW46IFNldDxJZ3hUcmVlTm9kZTxhbnk+PiA9IG5ldyBTZXQoKTtcblxuICAgIHByaXZhdGUgX2NhY2hlQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJlZVNlcnZpY2U6IElneFRyZWVTZXJ2aWNlLCBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2U6IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2NhY2hlQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl92aXNpYmxlQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgIHRoaXMudHJlZT8ubm9kZXMgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWUubm9kZXMuZmlsdGVyKGUgPT4gISh0aGlzLl9pbnZpc2libGVDaGlsZHJlbi5oYXMoZSkgfHwgdGhpcy5fZGlzYWJsZWRDaGlsZHJlbi5oYXMoZSkpKSA6XG4gICAgICAgICAgICAgICAgICAgIFtdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIodHJlZTogSWd4VHJlZSkge1xuICAgICAgICB0aGlzLnRyZWUgPSB0cmVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZm9jdXNlZE5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb2N1c2VkTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvY3VzZWROb2RlKHZhbHVlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkTm9kZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYXN0Rm9jdXNlZE5vZGUgPSB0aGlzLl9mb2N1c2VkTm9kZTtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RGb2N1c2VkTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEZvY3VzZWROb2RlLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZm9jdXNlZE5vZGUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWROb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c2VkTm9kZS50YWJJbmRleCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c2VkTm9kZS5oZWFkZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVOb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlTm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGFjdGl2ZU5vZGUodmFsdWU6IElneFRyZWVOb2RlPGFueT4pIHtcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZU5vZGUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnRyZWUuYWN0aXZlTm9kZUNoYW5nZWQuZW1pdCh0aGlzLl9hY3RpdmVOb2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHZpc2libGVDaGlsZHJlbigpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNoaWxkcmVuO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfZGlzYWJsZWRfY2FjaGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAobm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWRDaGlsZHJlbi5hZGQobm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZENoaWxkcmVuLmRlbGV0ZShub2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWNoZUNoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRfaW52aXNpYmxlX2NhY2hlKCkge1xuICAgICAgICB0aGlzLnRyZWUubm9kZXMuZmlsdGVyKGUgPT4gZS5sZXZlbCA9PT0gMCkuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlX3Zpc2libGVfY2FjaGUobm9kZSwgbm9kZS5leHBhbmRlZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fY2FjaGVDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfdmlzaWJsZV9jYWNoZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+LCBleHBhbmRlZDogYm9vbGVhbiwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICBub2RlLl9jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnZpc2libGVDaGlsZHJlbi5kZWxldGUoY2hpbGQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlX3Zpc2libGVfY2FjaGUoY2hpbGQsIGNoaWxkLmV4cGFuZGVkLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuYWxsQ2hpbGRyZW4uZm9yRWFjaChjID0+IHRoaXMuX2ludmlzaWJsZUNoaWxkcmVuLmFkZChjKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hvdWxkRW1pdCkge1xuICAgICAgICAgICAgdGhpcy5fY2FjaGVDaGFuZ2UubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbm9kZSBhcyBmb2N1c2VkIChhbmQgYWN0aXZlKVxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGUgdGFyZ2V0IG5vZGVcbiAgICAgKiBAcGFyYW0gaXNBY3RpdmUgaWYgdHJ1ZSwgc2V0cyB0aGUgbm9kZSBhcyBhY3RpdmVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgaXNBY3RpdmU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzZWROb2RlID0gbm9kZTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlciBmb3Iga2V5ZG93biBldmVudHMuIFVzZWQgaW4gdHJlZS5jb21wb25lbnQudHMgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzZWROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpIHx8IGtleSA9PT0gJyonKSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHRoaXMuZm9jdXNlZE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmhhbmRsZU5hdmlnYXRpb24oZXZlbnQpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX2NhY2hlQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgdGhpcy5fY2FjaGVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAnaG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzLnZpc2libGVDaGlsZHJlblswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcy52aXNpYmxlQ2hpbGRyZW5bdGhpcy52aXNpYmxlQ2hpbGRyZW4ubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dsZWZ0JzpcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dMZWZ0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93UmlnaHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBEb3duQXJyb3codHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBEb3duQXJyb3coZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXN0ZXJpc2soKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2ViYXInOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2UoZXZlbnQuc2hpZnRLZXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE5vZGUuZXhwYW5kZWQgJiYgIXRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZ05vZGVzLmhhcyh0aGlzLmZvY3VzZWROb2RlKSAmJiB0aGlzLmZvY3VzZWROb2RlLl9jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLmZvY3VzZWROb2RlO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkTm9kZS5jb2xsYXBzZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuZm9jdXNlZE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlICYmICFwYXJlbnROb2RlLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZShwYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXJyb3dSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE5vZGUuX2NoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c2VkTm9kZS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHRoaXMuZm9jdXNlZE5vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkTm9kZS5leHBhbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZ05vZGVzLmhhcyh0aGlzLmZvY3VzZWROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWROb2RlLmV4cGFuZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmZvY3VzZWROb2RlLl9jaGlsZHJlbi5maW5kKG5vZGUgPT4gIW5vZGUuZGlzYWJsZWQpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUoZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVVcERvd25BcnJvdyhpc1VwOiBib29sZWFuLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5nZXRWaXNpYmxlTm9kZSh0aGlzLmZvY3VzZWROb2RlLCBpc1VwID8gLTEgOiAxKTtcbiAgICAgICAgaWYgKG5leHQgPT09IHRoaXMuZm9jdXNlZE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKG5leHQsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUobmV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFzdGVyaXNrKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZm9jdXNlZE5vZGUucGFyZW50Tm9kZSA/IHRoaXMuZm9jdXNlZE5vZGUucGFyZW50Tm9kZS5fY2hpbGRyZW4gOiB0aGlzLnRyZWUucm9vdE5vZGVzO1xuICAgICAgICBub2Rlcz8uZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghbm9kZS5kaXNhYmxlZCAmJiAoIW5vZGUuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKG5vZGUpKSkge1xuICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU3BhY2Uoc2hpZnRLZXkgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5mb2N1c2VkTm9kZTtcbiAgICAgICAgaWYgKHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0TXVsdGlwbGVOb2Rlcyh0aGlzLmZvY3VzZWROb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWROb2RlLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMuZm9jdXNlZE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE5vZGUodGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgbmV4dCB2aXNpYmxlIG5vZGUgaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiAtIDEgLT4gbmV4dCwgLTEgLT4gcHJldmlvdXMgKi9cbiAgICBwcml2YXRlIGdldFZpc2libGVOb2RlKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGRpcjogMSB8IC0xID0gMSk6IElneFRyZWVOb2RlPGFueT4ge1xuICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLnZpc2libGVDaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmxlQ2hpbGRyZW5bbm9kZUluZGV4ICsgZGlyXSB8fCBub2RlO1xuICAgIH1cbn1cbiJdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvdHJlZS90cmVlLW5hdmlnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBd0Isb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRS9CLHdCQUF3QjtBQUV4QixNQUFNLE9BQU8sd0JBQXdCO0lBYWpDLFlBQW9CLFdBQTJCLEVBQVUsZ0JBQXlDO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFWMUYsaUJBQVksR0FBcUIsSUFBSSxDQUFDO1FBQ3RDLHFCQUFnQixHQUFxQixJQUFJLENBQUM7UUFDMUMsZ0JBQVcsR0FBcUIsSUFBSSxDQUFDO1FBRXJDLHFCQUFnQixHQUF1QixFQUFFLENBQUM7UUFDMUMsdUJBQWtCLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsc0JBQWlCLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFckQsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCO2dCQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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R0FBRyxLQUFLO1FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssb0JBQW9CLENBQUMsSUFBSSxFQUFFO1lBQ25ELE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuQyxJQUFJLFFBQVEsRUFBRTtZQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0lBRUQsb0ZBQW9GO0lBQzVFLGNBQWMsQ0FBQyxJQUFzQixFQUFFLE1BQWMsQ0FBQztRQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN6RCxDQUFDO21IQWpQUSx3QkFBd0I7dUhBQXhCLHdCQUF3Qjs7Z0dBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VHJlZSwgSWd4VHJlZU5vZGUsIElneFRyZWVTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgTkFWSUdBVElPTl9LRVlTIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi90cmVlLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHRyZWU6IElneFRyZWU7XG5cbiAgICBwcml2YXRlIF9mb2N1c2VkTm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IG51bGw7XG4gICAgcHJpdmF0ZSBfbGFzdEZvY3VzZWROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gbnVsbDtcbiAgICBwcml2YXRlIF9hY3RpdmVOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gbnVsbDtcblxuICAgIHByaXZhdGUgX3Zpc2libGVDaGlsZHJlbjogSWd4VHJlZU5vZGU8YW55PltdID0gW107XG4gICAgcHJpdmF0ZSBfaW52aXNpYmxlQ2hpbGRyZW46IFNldDxJZ3hUcmVlTm9kZTxhbnk+PiA9IG5ldyBTZXQoKTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZENoaWxkcmVuOiBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4gPSBuZXcgU2V0KCk7XG5cbiAgICBwcml2YXRlIF9jYWNoZUNoYW5nZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSwgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLl9jYWNoZUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUNoaWxkcmVuID1cbiAgICAgICAgICAgICAgICB0aGlzLnRyZWU/Lm5vZGVzID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVzLmZpbHRlcihlID0+ICEodGhpcy5faW52aXNpYmxlQ2hpbGRyZW4uaGFzKGUpIHx8IHRoaXMuX2Rpc2FibGVkQ2hpbGRyZW4uaGFzKGUpKSkgOlxuICAgICAgICAgICAgICAgICAgICBbXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyKHRyZWU6IElneFRyZWUpIHtcbiAgICAgICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWROb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXNlZE5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb2N1c2VkTm9kZSh2YWx1ZTogSWd4VHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAodGhpcy5fZm9jdXNlZE5vZGUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbGFzdEZvY3VzZWROb2RlID0gdGhpcy5fZm9jdXNlZE5vZGU7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0Rm9jdXNlZE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RGb2N1c2VkTm9kZS50YWJJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZvY3VzZWROb2RlID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2VkTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNlZE5vZGUudGFiSW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNlZE5vZGUuaGVhZGVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVOb2RlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FjdGl2ZU5vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50cmVlLmFjdGl2ZU5vZGVDaGFuZ2VkLmVtaXQodGhpcy5fYWN0aXZlTm9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2aXNpYmxlQ2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDaGlsZHJlbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlX2Rpc2FibGVkX2NhY2hlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkQ2hpbGRyZW4uYWRkKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWRDaGlsZHJlbi5kZWxldGUobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2FjaGVDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0X2ludmlzaWJsZV9jYWNoZSgpIHtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVzLmZpbHRlcihlID0+IGUubGV2ZWwgPT09IDApLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV92aXNpYmxlX2NhY2hlKG5vZGUsIG5vZGUuZXhwYW5kZWQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2NhY2hlQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlX3Zpc2libGVfY2FjaGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXhwYW5kZWQ6IGJvb2xlYW4sIHNob3VsZEVtaXQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgbm9kZS5fY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW52aXNpYmxlQ2hpbGRyZW4uZGVsZXRlKGNoaWxkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZV92aXNpYmxlX2NhY2hlKGNoaWxkLCBjaGlsZC5leHBhbmRlZCwgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmFsbENoaWxkcmVuLmZvckVhY2goYyA9PiB0aGlzLl9pbnZpc2libGVDaGlsZHJlbi5hZGQoYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZEVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlQ2hhbmdlLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG5vZGUgYXMgZm9jdXNlZCAoYW5kIGFjdGl2ZSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIHRhcmdldCBub2RlXG4gICAgICogQHBhcmFtIGlzQWN0aXZlIGlmIHRydWUsIHNldHMgdGhlIG5vZGUgYXMgYWN0aXZlXG4gICAgICovXG4gICAgcHVibGljIHNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGlzQWN0aXZlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkTm9kZSA9IG5vZGU7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXIgZm9yIGtleWRvd24gZXZlbnRzLiBVc2VkIGluIHRyZWUuY29tcG9uZW50LnRzICovXG4gICAgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5mb2N1c2VkTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKE5BVklHQVRJT05fS0VZUy5oYXMoa2V5KSB8fCBrZXkgPT09ICcqJykpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLmZvY3VzZWROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5yZXBlYXQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVOYXZpZ2F0aW9uKGV2ZW50KSwgMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9jYWNoZUNoYW5nZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2NhY2hlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcy52aXNpYmxlQ2hpbGRyZW5bMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKHRoaXMudmlzaWJsZUNoaWxkcmVuW3RoaXMudmlzaWJsZUNoaWxkcmVuLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93TGVmdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dyaWdodCc6XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBcnJvd1JpZ2h0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwRG93bkFycm93KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVwRG93bkFycm93KGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFzdGVyaXNrKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgIGNhc2UgJ3NwYWNlJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVNwYWNlKGV2ZW50LnNoaWZ0S2V5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0xlZnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWROb2RlLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcy5mb2N1c2VkTm9kZSkgJiYgdGhpcy5mb2N1c2VkTm9kZS5fY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdGhpcy5mb2N1c2VkTm9kZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE5vZGUuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmZvY3VzZWROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiAhcGFyZW50Tm9kZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93UmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWROb2RlLl9jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZE5vZGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB0aGlzLmZvY3VzZWROb2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZE5vZGUuZXhwYW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcy5mb2N1c2VkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkTm9kZS5leHBhbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5mb2N1c2VkTm9kZS5fY2hpbGRyZW4uZmluZChub2RlID0+ICFub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKGZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVXBEb3duQXJyb3coaXNVcDogYm9vbGVhbiwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuZ2V0VmlzaWJsZU5vZGUodGhpcy5mb2N1c2VkTm9kZSwgaXNVcCA/IC0xIDogMSk7XG4gICAgICAgIGlmIChuZXh0ID09PSB0aGlzLmZvY3VzZWROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZShuZXh0LCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzZWRBbmRBY3RpdmVOb2RlKG5leHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBc3RlcmlzaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZvY3VzZWROb2RlLnBhcmVudE5vZGUgPyB0aGlzLmZvY3VzZWROb2RlLnBhcmVudE5vZGUuX2NoaWxkcmVuIDogdGhpcy50cmVlLnJvb3ROb2RlcztcbiAgICAgICAgbm9kZXM/LmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoIW5vZGUuZGlzYWJsZWQgJiYgKCFub2RlLmV4cGFuZGVkIHx8IHRoaXMudHJlZVNlcnZpY2UuY29sbGFwc2luZ05vZGVzLmhhcyhub2RlKSkpIHtcbiAgICAgICAgICAgICAgICBub2RlLmV4cGFuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVNwYWNlKHNoaWZ0S2V5ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLk5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHRoaXMuZm9jdXNlZE5vZGU7XG4gICAgICAgIGlmIChzaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcy5mb2N1c2VkTm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkTm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Tm9kZSh0aGlzLmZvY3VzZWROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMuZm9jdXNlZE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIG5leHQgdmlzaWJsZSBub2RlIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24gLSAxIC0+IG5leHQsIC0xIC0+IHByZXZpb3VzICovXG4gICAgcHJpdmF0ZSBnZXRWaXNpYmxlTm9kZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+LCBkaXI6IDEgfCAtMSA9IDEpOiBJZ3hUcmVlTm9kZTxhbnk+IHtcbiAgICAgICAgY29uc3Qgbm9kZUluZGV4ID0gdGhpcy52aXNpYmxlQ2hpbGRyZW4uaW5kZXhPZihub2RlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZUNoaWxkcmVuW25vZGVJbmRleCArIGRpcl0gfHwgbm9kZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -218,7 +218,6 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
|
|
|
218
218
|
get role() {
|
|
219
219
|
return this.hasLinkChildren ? 'none' : 'treeitem';
|
|
220
220
|
}
|
|
221
|
-
;
|
|
222
221
|
/**
|
|
223
222
|
* Return the child nodes of the node (if any)
|
|
224
223
|
*
|
|
@@ -574,7 +573,6 @@ export class IgxTreeNodeComponent extends ToggleAnimationPlayer {
|
|
|
574
573
|
this._tabIndex = -1;
|
|
575
574
|
this.registeredChildren.push(link);
|
|
576
575
|
}
|
|
577
|
-
;
|
|
578
576
|
/** @hidden @internal */
|
|
579
577
|
removeLinkChild(link) {
|
|
580
578
|
const index = this.registeredChildren.indexOf(link);
|
|
@@ -651,4 +649,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ng
|
|
|
651
649
|
}], expanded: [{
|
|
652
650
|
type: Input
|
|
653
651
|
}] } });
|
|
654
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7QUFJbkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFn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QUFJLEVBQUU7Z0JBSTFELGlCQUFpQjtzQkFEeEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBOEZ6QyxRQUFRO3NCQURsQixLQUFLO2dCQW9DSyxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eSB9IGZyb20gJy4uLy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJVHJlZVJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi90cmVlLXJlc291cmNlcyc7XG5pbXBvcnQgeyBUb2dnbGVBbmltYXRpb25QbGF5ZXIsIFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vLi4vZXhwYW5zaW9uLXBhbmVsL3RvZ2dsZS1hbmltYXRpb24tY29tcG9uZW50JztcbmltcG9ydCB7IElneEFuZ3VsYXJBbmltYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYW5pbWF0aW9uL2FuZ3VsYXItYW5pbWF0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHtcbiAgICBJZ3hUcmVlLFxuICAgIElneFRyZWVOb2RlLFxuICAgIElneFRyZWVTZWxlY3Rpb25UeXBlLFxuICAgIElHWF9UUkVFX0NPTVBPTkVOVCxcbiAgICBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCxcbiAgICBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJnc1xufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmVlLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IElneENpcmN1bGFyUHJvZ3Jlc3NCYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wcm9ncmVzc2Jhci9wcm9ncmVzc2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgTmdDbGFzcywgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBUT0RPOiBJbXBsZW1lbnQgYXJpYSBmdW5jdGlvbmFsaXR5XG4vKipcbiAqIEBoaWRkZW4gQGludGVybmFsXG4gKiBVc2VkIGZvciBsaW5rcyAoYGFgIHRhZ3MpIGluIHRoZSBib2R5IG9mIGFuIGBpZ3gtdHJlZS1ub2RlYC4gSGFuZGxlcyBhcmlhIGFuZCBldmVudCBkaXNwYXRjaC5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBbaWd4VHJlZU5vZGVMaW5rXWAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIHB1YmxpYyByb2xlID0gJ3RyZWVpdGVtJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBub2RlJ3MgcGFyZW50LiBTaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gdGhlIGxpbmsgaXMgZGVmaW5lZFxuICAgICAqIGluIGA8bmctdGVtcGxhdGU+YCB0YWcgb3V0c2lkZSBvZiBpdHMgcGFyZW50LCBhcyBBbmd1bGFyIERJIHdpbGwgbm90IHByb3Blcmx5IHByb3ZpZGUgYSByZWZlcmVuY2VcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgIDxpZ3gtdHJlZS1ub2RlICNteU5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIj5cbiAgICAgKiAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGRhdGEsIHBhcmVudE5vZGU6IG15Tm9kZSB9XCI+XG4gICAgICogICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogICAgIC4uLlxuICAgICAqICAgICA8IS0tIG5vZGUgdGVtcGxhdGUgaXMgZGVmaW5lZCB1bmRlciB0cmVlIHRvIGFjY2VzcyByZWxhdGVkIHNlcnZpY2VzIC0tPlxuICAgICAqICAgICA8bmctdGVtcGxhdGUgI25vZGVUZW1wbGF0ZSBsZXQtZGF0YSBsZXQtbm9kZT1cInBhcmVudE5vZGVcIj5cbiAgICAgKiAgICAgICAgIDxhIFtpZ3hUcmVlTm9kZUxpbmtdPVwibm9kZVwiPnt7IGRhdGEubGFiZWwgfX08L2E+XG4gICAgICogICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneFRyZWVOb2RlTGluaycpXG4gICAgcHVibGljIHNldCBwYXJlbnROb2RlKHZhbDogYW55KSB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudE5vZGUgPSB2YWw7XG4gICAgICAgICAgICAodGhpcy5fcGFyZW50Tm9kZSBhcyBhbnkpLmFkZExpbmtDaGlsZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50Tm9kZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICAvKiogQSBwb2ludGVyIHRvIHRoZSBwYXJlbnQgbm9kZSAqL1xuICAgIHByaXZhdGUgZ2V0IHRhcmdldCgpOiBJZ3hUcmVlTm9kZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZSB8fCB0aGlzLnBhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyZW50Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KElHWF9UUkVFX05PREVfQ09NUE9ORU5UKVxuICAgIHByaXZhdGUgbm9kZTogSWd4VHJlZU5vZGU8YW55PixcbiAgICAgICAgcHJpdmF0ZSBuYXZTZXJ2aWNlOiBJZ3hUcmVlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IHRoaXMudGFyZ2V0ID8gKHRoaXMudGFyZ2V0Py5kaXNhYmxlZCA/IC0xIDogMCkgOiAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIENsZWFyIHRoZSBub2RlJ3MgZm9jdXNlZCBzdGF0ZVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHB1YmxpYyBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqIFNldCB0aGUgbm9kZSBhcyBmb2N1c2VkXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICAgIHB1YmxpYyBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0ICYmICF0aGlzLnRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSAhPT0gdGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpbmtDaGlsZCh0aGlzKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIFRoZSB0cmVlIG5vZGUgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjaGlsZCBub2RlIG9mIHRoZSB0cmVlIGNvbXBvbmVudCBvciBhbm90aGVyIHRyZWUgbm9kZS5cbiAqIFVzYWdlOlxuICpcbiAqIGBgYGh0bWxcbiAqICA8aWd4LXRyZWU+XG4gKiAgLi4uXG4gKiAgICA8aWd4LXRyZWUtbm9kZSBbZGF0YV09XCJkYXRhXCIgW3NlbGVjdGVkXT1cInNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQoZGF0YS5LZXkpXCIgW2V4cGFuZGVkXT1cInNlcnZpY2UuaXNOb2RlRXhwYW5kZWQoZGF0YS5LZXkpXCI+XG4gKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAqICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAqICAuLi5cbiAqICA8L2lneC10cmVlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXRyZWUtbm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICd0cmVlLW5vZGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogSWd4VHJlZU5vZGVDb21wb25lbnQgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgSWd4SWNvbkNvbXBvbmVudCwgSWd4Q2hlY2tib3hDb21wb25lbnQsIE5nQ2xhc3MsIE5nRm9yLCBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlTm9kZUNvbXBvbmVudDxUPiBleHRlbmRzIFRvZ2dsZUFuaW1hdGlvblBsYXllciBpbXBsZW1lbnRzIElneFRyZWVOb2RlPFQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZW50cnkgdGhhdCB0aGUgbm9kZSBpcyB2aXN1YWxpemluZy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogUmVxdWlyZWQgZm9yIHNlYXJjaGluZyB0aHJvdWdoIG5vZGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtdHJlZT5cbiAgICAgKiAgLi4uXG4gICAgICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAqICAgICAge3sgZGF0YS5GaXJzdE5hbWUgfX0ge3sgZGF0YS5MYXN0TmFtZSB9fVxuICAgICAqICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiAgLi4uXG4gICAgICogIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGF0YTogVDtcblxuICAgIC8qKlxuICAgICAqIFRvIGJlIHVzZWQgZm9yIGxvYWQtb24tZGVtYW5kIHNjZW5hcmlvcyBpbiBvcmRlciB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG5vZGUgaXMgbG9hZGluZyBkYXRhLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBMb2FkaW5nIG5vZGVzIGRvIG5vdCByZW5kZXIgY2hpbGRyZW4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLy8gVE8gRE86IHJldHVybiBkaWZmZXJlbnQgdGFiIGluZGV4IGRlcGVuZGluZyBvbiBhbmNob3IgY2hpbGRcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IHRhYkluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fdGFiSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAtMSA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiB0aGlzLl90YWJJbmRleDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFuaW1hdGlvblNldHRpbmdzKCk6IFRvZ2dsZUFuaW1hdGlvblNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZS5hbmltYXRpb25TZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZXMgRU4gcmVzb3VyY2VzIGJ5IGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVRyZWVSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElUcmVlUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5hY3RpdmVOb2RlID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMudHJlZS5hY3RpdmVOb2RlQmluZGluZ0NoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9PT0gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUncyBgc2VsZWN0ZWRgIHByb3BlcnR5IGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtkYXRhXT1cIm5vZGVcIiBbKHNlbGVjdGVkKV09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICogICAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBub2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBub2RlLnNlbGVjdGVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU6IGJvb2xlYW4pID0+IGNvbnNvbGUubG9nKFwiTm9kZSBzZWxlY3Rpb24gY2hhbmdlZCB0byBcIiwgZSkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYGV4cGFuZGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhleHBhbmRlZCldPVwibm9kZS5leHBhbmRlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5leHBhbmRlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgZXhwYW5zaW9uIHN0YXRlIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2VkICYmXG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBmdWxsIHBhdGggdG8gdGhlIG5vZGUgaW5jdWRpbmcgaXRzZWxmXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3QgcGF0aDogSWd4VHJlZU5vZGU8YW55PltdID0gbm9kZS5wYXRoO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcGF0aCgpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnROb2RlPy5wYXRoID8gWy4uLnRoaXMucGFyZW50Tm9kZS5wYXRoLCB0aGlzXSA6IFt0aGlzXTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBiaW5kIHRvIGRpc2FibGVkIHN0YXRlIHdoZW4gbm9kZSBpcyBkcmFnZ2VkXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgbm9kZVxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlOiBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUtLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmVlLmRpc2FibGVkQ2hhbmdlLmVtaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC10cmVlLW5vZGUnKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtdHJlZS1ub2RlJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgZ2V0IHJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/ICdub25lJyA6ICd0cmVlaXRlbSc7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLnRyZWUsXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5jb2xsYXBzZSgpXCI+Q29sbGFwc2UgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmNvbGxhcHNlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZW1vdmVMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uaW5kZXhPZihsaW5rKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbm9EcmFnVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBXaWxsIHN3aXRjaCB0ZW1wbGF0ZXMgZGVwZW5kaW5nIG9uIGRyYWdEcm9wIC0tPlxuPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9EcmFnVGVtcGxhdGVcIj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgI2NoaWxkcmVuQ29udGFpbmVyXG4gICAgKm5nSWY9XCJleHBhbmRlZCAmJiAhbG9hZGluZ1wiXG4gICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19ncm91cFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtdHJlZS1ub2RlXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW5kaWNhdG9yPlxuICAgIDxpZ3gtaWNvbiBbYXR0ci5hcmlhLWxhYmVsXT1cImV4cGFuZGVkID8gcmVzb3VyY2VTdHJpbmdzLmlneF9jb2xsYXBzZSA6IHJlc291cmNlU3RyaW5ncy5pZ3hfZXhwYW5kXCI+XG4gICAgICAgIHt7IGV4cGFuZGVkID8gXCJrZXlib2FyZF9hcnJvd19kb3duXCIgOiBcImtleWJvYXJkX2Fycm93X3JpZ2h0XCIgfX1cbiAgICA8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBzZXBhcmF0ZWQgaW4gYSB0ZW1wbGF0ZSBpbiBjYXNlIHRoaXMgZXZlciBuZWVkcyB0byBiZSB0ZW1wbGF0YWJsZSAtLT5cbjxuZy10ZW1wbGF0ZSAjc2VsZWN0TWFya2VyVGVtcGxhdGU+XG4gICAgPGlneC1jaGVja2JveCBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtyZWFkb25seV09XCJ0cnVlXCIgW2luZGV0ZXJtaW5hdGVdPVwiaW5kZXRlcm1pbmF0ZVwiIFt0YWJpbmRleF09XCItMVwiPlxuICAgIDwvaWd4LWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgICA8ZGl2ICNnaG9zdFRlbXBsYXRlIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fd3JhcHBlclwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1jb3N5JzogaXNDb3N5LFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvbXBhY3QnOiBpc0NvbXBhY3QsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1hY3RpdmUnIDogdGhpcy5hY3RpdmUsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZm9jdXNlZCcgOiB0aGlzLmZvY3VzZWQsXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tZGlzYWJsZWQnIDogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cIm9uUG9pbnRlckRvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCJcbiAgICAgICAgKGJsdXIpPVwiY2xlYXJGb2N1cygpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBFeHBhbmQvQ29sbGFwc2UgaW5kaWNhdG9yIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uLS1oaWRkZW4nOiAhX2NoaWxkcmVuPy5sZW5ndGggfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5kaWNhdG9yQ2xpY2soKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbmRJbmRpY2F0b3JUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IGV4cGFuZGVkIH1cIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b25cIlxuICAgICAgICA+XG4gICAgICAgIFx0PGlneC1jaXJjdWxhci1iYXJcbiAgICAgICAgICAgIFx0W2FuaW1hdGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgXHRbaW5kZXRlcm1pbmF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFx0W3RleHRWaXNpYmlsaXR5XT1cImZhbHNlXCJcbiAgICAgICAgXHQ+XG4gICAgICAgIFx0PC9pZ3gtY2lyY3VsYXItYmFyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJdGVtIHNlbGVjdGlvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dTZWxlY3RvcnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zZWxlY3RcIlxuICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdG9yQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdE1hcmtlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gR2hvc3QgY29udGVudCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICBCdWZmZXIgZWxlbWVudCBmb3IgJ21vdmUgYWZ0ZXInIHdoZW4gRCZEIGlzIGltcGxlbWVudGVkLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2Ryb3AtaW5kaWNhdG9yXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fc3BhY2VyXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgW10uY29uc3RydWN0b3IobGV2ZWwpXCI+PC9zcGFuPlxuICAgICAgICA8IS0tIHN0eWxlIHJ1bGVzIHRhcmdldCB0aGlzIGRpdiwgZG8gbm90IGRlbGV0ZSBpdCAtLT5cbiAgICAgICAgPGRpdj48L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1RlbXBsYXRlPlxuICAgIDwhLS0gRHJhZyBkcm9wIGdvZXMgaGVyZVxuICAgICAgICBpZ3hEcm9wXG4gICAgICAgICNkcm9wUmVmPVwiZHJvcFwiXG4gICAgICAgIFtpZ3hOb2RlRHJhZ109XCJ0aGlzXCJcbiAgICAgICAgKGRyYWdTdGFydCk9XCJsb2dEcm9wKGRyb3BSZWYpXCJcbiAgICAgICAgKGxlYXZlKT1cImVtaXRMZWF2ZSgpXCJcbiAgICAgICAgKGVudGVyKT1cImVtaXRFbnRlcigpXCIgLS0+XG4gICAgPGRpdiBjbGFzcz1cImlneC10cmVlLW5vZGVfX2RyYWctd3JhcHBlclwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RyZWUvdHJlZS1ub2RlL3RyZWUtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSxrREFBa0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVoRyxPQUFPLEVBR0gsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFFMUIsTUFBTSxXQUFXLENBQUM7QUFJbkIsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBRXpFLHFDQUFxQztBQUNyQzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sd0JBQXdCO0lBS2pDOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILElBQ1csVUFBVSxDQUFDLEdBQVE7UUFDMUIsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEQ7SUFDTCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3hDLENBQUM7SUFJRCxZQUNRLElBQXNCLEVBQ2xCLFVBQW9DLEVBQ3JDLFVBQXNCO1FBRnpCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ2xCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQ3JDLGVBQVUsR0FBVixVQUFVLENBQVk7UUExQzFCLFNBQUksR0FBRyxVQUFVLENBQUM7UUFxQ2pCLGdCQUFXLEdBQXFCLElBQUksQ0FBQztJQU03QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQ1csUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7OztPQUdHO0lBRUksVUFBVTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBRUksV0FBVztRQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM3QztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQzttSEEvRVEsd0JBQXdCLGtCQTBDRCx1QkFBdUI7dUdBMUM5Qyx3QkFBd0I7O2dHQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkEyQ2dCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRHQXZDaEQsSUFBSTtzQkFEVixXQUFXO3VCQUFDLFdBQVc7Z0JBc0JiLFVBQVU7c0JBRHBCLEtBQUs7dUJBQUMsaUJBQWlCO2dCQTJCYixRQUFRO3NCQURsQixXQUFXO3VCQUFDLGVBQWU7Z0JBVXJCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsTUFBTTtnQkFVYixXQUFXO3NCQURqQixZQUFZO3VCQUFDLE9BQU87O0FBZXpCOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBVUgsTUFBTSxPQUFPLG9CQUF3QixTQUFRLHFCQUFxQjtJQThCOUQsOERBQThEO0lBQzlELHdCQUF3QjtJQUN4QixJQUFXLFFBQVEsQ0FBQyxHQUFXO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsSUFBVyxRQUFRO1FBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNiO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtnQkFDdEMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQW9CLGlCQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxlQUFlLENBQUMsS0FBMkI7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMsY0FBYyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNXLE1BQU0sQ0FBQyxLQUFjO1FBQzVCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFzQ0Qsd0JBQXdCO0lBQ3hCLElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVM7WUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQ7Ozs7T0FJRztJQUNILElBRVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsS0FBYztRQUM5QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFNRCx3QkFBd0I7SUFDeEIsSUFDVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN0RCxDQUFDO0lBY0Q7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsQ0FBQztJQWFELElBQVksZUFBZTtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxLQUFLLGNBQWMsQ0FBQyxPQUFPLENBQUM7SUFDaEUsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxLQUFLLGNBQWMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQztJQWNELFlBQ3VDLElBQWEsRUFDdEMsZ0JBQXlDLEVBQ3pDLFdBQTJCLEVBQzNCLFVBQW9DLEVBQ3BDLEdBQXNCLEVBQ0ksZ0JBQWtDLEVBQzlELE9BQWdDLEVBQ3dCLFVBQTRCO1FBRTVGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBVFcsU0FBSSxHQUFKLElBQUksQ0FBUztRQUN0QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUV4QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUN3QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQXBPaEc7Ozs7O1dBS0c7UUFFSSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBaUV2Qjs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVwRDs7Ozs7Ozs7Ozs7Ozs7V0FjRztRQUVJLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQXVDcEQsd0JBQXdCO1FBRWpCLGFBQVEsR0FBRyxlQUFlLENBQUM7UUFnRWxDLHdCQUF3QjtRQUNqQix1QkFBa0IsR0FBK0IsRUFBRSxDQUFDO1FBRTNELHdCQUF3QjtRQUNoQixxQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUM7UUFFekQsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO0lBYTFCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFXLFFBQVEsQ0FBQyxHQUFZO1FBQzVCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsSUFDVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBVyxRQUFRLENBQUMsR0FBWTtRQUM1QixJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsdUJBQXVCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDekcsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsd0JBQXdCO0lBQ3hCLElBQVcsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsUUFBUTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDM0QsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUNKLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7WUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVELE9BQU87U0FDVjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLEtBQUs7UUFDeEIsMkJBQTJCO1FBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixvREFBb0Q7UUFDcEQsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsT0FBTztTQUNWO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pEO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksTUFBTTtRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixjQUFjO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLEtBQUs7UUFDdEIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVlLFdBQVc7UUFDdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxNQUFNO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzlELE9BQU87U0FDVjtRQUNELE1BQU0sSUFBSSxHQUErQjtZQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDaEIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsS0FBSztTQUVoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQ3pCLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFFBQVE7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUQsT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQStCO1lBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLE1BQU0sRUFBRSxLQUFLO1NBRWhCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FDekIsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixZQUFZLENBQUMsSUFBOEI7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZUFBZSxDQUFDLElBQThCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7bUhBL2lCUSxvQkFBb0Isa0JBa1BqQixrQkFBa0IsMkpBS2xCLDBCQUEwQix1Q0FFRix1QkFBdUI7dUdBelBsRCxvQkFBb0IsaWNBTmxCO1lBQ1AsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO1NBQzFFLHVEQXFMZ0Isd0JBQXdCLFFBQVUsVUFBVSw0Q0FJNUMsdUJBQXVCLFFBQVUsdUJBQXVCLDhDQUl4RCx1QkFBdUIsMkJBQVUsdUJBQXVCLGlIQXFCckMsVUFBVSw4SEFHUCxXQUFXLCtIQUdWLFVBQVUsb0RDbFh0RCxxdkhBMkdBLDRDRGlEYyxnQkFBZ0Isb0pBQUUsSUFBSSw2RkFBRSxnQkFBZ0IsMkZBQUUsb0JBQW9CLDBTQUFFLE9BQU8sb0ZBQUUsS0FBSyxtSEFBRSwrQkFBK0I7O2dHQUVoSCxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxhQUVkO3dCQUNQLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsc0JBQXNCLEVBQUU7cUJBQzFFLGNBQ1csSUFBSSxXQUNQLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsK0JBQStCLENBQUM7OzBCQW9QckgsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUt6QixNQUFNOzJCQUFDLDBCQUEwQjs7MEJBRWpDLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsdUJBQXVCOzRDQXRPcEQsSUFBSTtzQkFEVixLQUFLO2dCQVVDLE9BQU87c0JBRGIsS0FBSztnQkFtQ0ssZUFBZTtzQkFEekIsS0FBSztnQkFxQkssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkMsY0FBYztzQkFEcEIsTUFBTTtnQkFtQkEsY0FBYztzQkFEcEIsTUFBTTtnQkE2QkksUUFBUTtzQkFGbEIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQywrQkFBK0I7Z0JBY3JDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBS3ZCLElBQUk7c0JBRGQsV0FBVzt1QkFBQyxXQUFXO2dCQU9qQixZQUFZO3NCQURsQixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFLeEQsU0FBUztzQkFEZixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFO2dCQUtwRSxXQUFXO3NCQURqQixlQUFlO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBc0J2RixNQUFNO3NCQURaLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsK0JBQStCO3NCQUR0QyxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkxRCxpQkFBaUI7c0JBRHhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQThGekMsUUFBUTtzQkFEbEIsS0FBSztnQkFvQ0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2tpcFNlbGYsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tICcuLi8uLi9jb3JlL2RlbnNpdHknO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uLy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSVRyZWVSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi8uLi9jb3JlL2kxOG4vdHJlZS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVG9nZ2xlQW5pbWF0aW9uUGxheWVyLCBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2V4cGFuc2lvbi1wYW5lbC90b2dnbGUtYW5pbWF0aW9uLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hBbmd1bGFyQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FuaW1hdGlvbi9hbmd1bGFyLWFuaW1hdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7XG4gICAgSWd4VHJlZSxcbiAgICBJZ3hUcmVlTm9kZSxcbiAgICBJZ3hUcmVlU2VsZWN0aW9uVHlwZSxcbiAgICBJR1hfVFJFRV9DT01QT05FTlQsXG4gICAgSUdYX1RSRUVfTk9ERV9DT01QT05FTlQsXG4gICAgSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3Ncbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyZWUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IElneFRyZWVTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vdHJlZS1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hUcmVlU2VydmljZSB9IGZyb20gJy4uL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hDaXJjdWxhclByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZ3Jlc3NiYXIvcHJvZ3Jlc3NiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIE5nQ2xhc3MsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLy8gVE9ETzogSW1wbGVtZW50IGFyaWEgZnVuY3Rpb25hbGl0eVxuLyoqXG4gKiBAaGlkZGVuIEBpbnRlcm5hbFxuICogVXNlZCBmb3IgbGlua3MgKGBhYCB0YWdzKSBpbiB0aGUgYm9keSBvZiBhbiBgaWd4LXRyZWUtbm9kZWAuIEhhbmRsZXMgYXJpYSBhbmQgZXZlbnQgZGlzcGF0Y2guXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgW2lneFRyZWVOb2RlTGlua11gLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICd0cmVlaXRlbSc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbm9kZSdzIHBhcmVudC4gU2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBsaW5rIGlzIGRlZmluZWRcbiAgICAgKiBpbiBgPG5nLXRlbXBsYXRlPmAgdGFnIG91dHNpZGUgb2YgaXRzIHBhcmVudCwgYXMgQW5ndWxhciBESSB3aWxsIG5vdCBwcm9wZXJseSBwcm92aWRlIGEgcmVmZXJlbmNlXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAgICA8aWd4LXRyZWUtbm9kZSAjbXlOb2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCI+XG4gICAgICogICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhLCBwYXJlbnROb2RlOiBteU5vZGUgfVwiPlxuICAgICAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqICAgICAuLi5cbiAgICAgKiAgICAgPCEtLSBub2RlIHRlbXBsYXRlIGlzIGRlZmluZWQgdW5kZXIgdHJlZSB0byBhY2Nlc3MgcmVsYXRlZCBzZXJ2aWNlcyAtLT5cbiAgICAgKiAgICAgPG5nLXRlbXBsYXRlICNub2RlVGVtcGxhdGUgbGV0LWRhdGEgbGV0LW5vZGU9XCJwYXJlbnROb2RlXCI+XG4gICAgICogICAgICAgICA8YSBbaWd4VHJlZU5vZGVMaW5rXT1cIm5vZGVcIj57eyBkYXRhLmxhYmVsIH19PC9hPlxuICAgICAqICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCdpZ3hUcmVlTm9kZUxpbmsnKVxuICAgIHB1YmxpYyBzZXQgcGFyZW50Tm9kZSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnROb2RlID0gdmFsO1xuICAgICAgICAgICAgKHRoaXMuX3BhcmVudE5vZGUgYXMgYW55KS5hZGRMaW5rQ2hpbGQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudE5vZGUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudE5vZGU7XG4gICAgfVxuXG4gICAgLyoqIEEgcG9pbnRlciB0byB0aGUgcGFyZW50IG5vZGUgKi9cbiAgICBwcml2YXRlIGdldCB0YXJnZXQoKTogSWd4VHJlZU5vZGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGUgfHwgdGhpcy5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcmVudE5vZGU6IElneFRyZWVOb2RlPGFueT4gPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVClcbiAgICBwcml2YXRlIG5vZGU6IElneFRyZWVOb2RlPGFueT4sXG4gICAgICAgIHByaXZhdGUgbmF2U2VydmljZTogSWd4VHJlZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIGdldCB0YWJJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzLnRhcmdldCA/ICh0aGlzLnRhcmdldD8uZGlzYWJsZWQgPyAtMSA6IDApIDogLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdGVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgaGFuZGxlQmx1cigpIHtcbiAgICAgICAgdGhpcy50YXJnZXQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBTZXQgdGhlIG5vZGUgYXMgZm9jdXNlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiAhdGhpcy50YXJnZXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID0gdGhpcy50YXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhcmdldC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVMaW5rQ2hpbGQodGhpcyk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBUaGUgdHJlZSBub2RlIGNvbXBvbmVudCByZXByZXNlbnRzIGEgY2hpbGQgbm9kZSBvZiB0aGUgdHJlZSBjb21wb25lbnQgb3IgYW5vdGhlciB0cmVlIG5vZGUuXG4gKiBVc2FnZTpcbiAqXG4gKiBgYGBodG1sXG4gKiAgPGlneC10cmVlPlxuICogIC4uLlxuICogICAgPGlneC10cmVlLW5vZGUgW2RhdGFdPVwiZGF0YVwiIFtzZWxlY3RlZF09XCJzZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKGRhdGEuS2V5KVwiIFtleHBhbmRlZF09XCJzZXJ2aWNlLmlzTm9kZUV4cGFuZGVkKGRhdGEuS2V5KVwiPlxuICogICAgICB7eyBkYXRhLkZpcnN0TmFtZSB9fSB7eyBkYXRhLkxhc3ROYW1lIH19XG4gKiAgICA8L2lneC10cmVlLW5vZGU+XG4gKiAgLi4uXG4gKiAgPC9pZ3gtdHJlZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAndHJlZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFRyZWVOb2RlQ29tcG9uZW50IH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXQsIE5nSWYsIElneEljb25Db21wb25lbnQsIElneENoZWNrYm94Q29tcG9uZW50LCBOZ0NsYXNzLCBOZ0ZvciwgSWd4Q2lyY3VsYXJQcm9ncmVzc0JhckNvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VHJlZU5vZGVDb21wb25lbnQ8VD4gZXh0ZW5kcyBUb2dnbGVBbmltYXRpb25QbGF5ZXIgaW1wbGVtZW50cyBJZ3hUcmVlTm9kZTxUPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGVudHJ5IHRoYXQgdGhlIG5vZGUgaXMgdmlzdWFsaXppbmcuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFJlcXVpcmVkIGZvciBzZWFyY2hpbmcgdGhyb3VnaCBub2Rlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LXRyZWU+XG4gICAgICogIC4uLlxuICAgICAqICAgIDxpZ3gtdHJlZS1ub2RlIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgKiAgICAgIHt7IGRhdGEuRmlyc3ROYW1lIH19IHt7IGRhdGEuTGFzdE5hbWUgfX1cbiAgICAgKiAgICA8L2lneC10cmVlLW5vZGU+XG4gICAgICogIC4uLlxuICAgICAqICA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRhdGE6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSB1c2VkIGZvciBsb2FkLW9uLWRlbWFuZCBzY2VuYXJpb3MgaW4gb3JkZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBub2RlIGlzIGxvYWRpbmcgZGF0YS5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogTG9hZGluZyBub2RlcyBkbyBub3QgcmVuZGVyIGNoaWxkcmVuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8vIFRPIERPOiByZXR1cm4gZGlmZmVyZW50IHRhYiBpbmRleCBkZXBlbmRpbmcgb24gYW5jaG9yIGNoaWxkXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldCB0YWJJbmRleCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3RhYkluZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzTGlua0NoaWxkcmVuID8gLTEgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0xpbmtDaGlsZHJlbiA/IC0xIDogdGhpcy5fdGFiSW5kZXg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBUb2dnbGVBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWUuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEVOIHJlc291cmNlcyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElUcmVlUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJVHJlZVJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLlRyZWVSZXNTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm5hdlNlcnZpY2UuYWN0aXZlTm9kZSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnRyZWUuYWN0aXZlTm9kZUJpbmRpbmdDaGFuZ2UuZW1pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZTZXJ2aWNlLmFjdGl2ZU5vZGUgPT09IHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIHRoZSBub2RlJ3MgYHNlbGVjdGVkYCBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBub2RlIG9mIGRhdGFcIiBbZGF0YV09XCJub2RlXCIgWyhzZWxlY3RlZCldPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAqICAgICAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbm9kZS5zZWxlY3RlZENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBib29sZWFuKSA9PiBjb25zb2xlLmxvZyhcIk5vZGUgc2VsZWN0aW9uIGNoYW5nZWQgdG8gXCIsIGUpKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgbm9kZSdzIGBleHBhbmRlZGAgcHJvcGVydHkgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhXCIgW2RhdGFdPVwibm9kZVwiIFsoZXhwYW5kZWQpXT1cIm5vZGUuZXhwYW5kZWRcIj5cbiAgICAgKiAgICAgIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIG5vZGUuZXhwYW5kZWRDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYm9vbGVhbikgPT4gY29uc29sZS5sb2coXCJOb2RlIGV4cGFuc2lvbiBzdGF0ZSBjaGFuZ2VkIHRvIFwiLCBlKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZXhwYW5kZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRm9jdXNlZCAmJlxuICAgICAgICAgICAgdGhpcy5uYXZTZXJ2aWNlLmZvY3VzZWROb2RlID09PSB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBub2RlIGluY3VkaW5nIGl0c2VsZlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IHBhdGg6IElneFRyZWVOb2RlPGFueT5bXSA9IG5vZGUucGF0aDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHBhdGgoKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZT8ucGF0aCA/IFsuLi50aGlzLnBhcmVudE5vZGUucGF0aCwgdGhpc10gOiBbdGhpc107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogYmluZCB0byBkaXNhYmxlZCBzdGF0ZSB3aGVuIG5vZGUgaXMgZHJhZ2dlZFxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZTogYm9vbGVhblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJlZS5kaXNhYmxlZENoYW5nZS5lbWl0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtdHJlZS1ub2RlJylcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSAnaWd4LXRyZWUtbm9kZSc7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHVibGljIGdldCByb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNMaW5rQ2hpbGRyZW4gPyAnbm9uZScgOiAndHJlZWl0ZW0nO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgbGlua0NoaWxkcmVuOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElHWF9UUkVFX05PREVfQ09NUE9ORU5ULCB7IHJlYWQ6IElHWF9UUkVFX05PREVfQ09NUE9ORU5UIH0pXG4gICAgcHVibGljIF9jaGlsZHJlbjogUXVlcnlMaXN0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgeyByZWFkOiBJR1hfVFJFRV9OT0RFX0NPTVBPTkVOVCwgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBwdWJsaWMgYWxsQ2hpbGRyZW46IFF1ZXJ5TGlzdDxJZ3hUcmVlTm9kZTxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIG5vZGUgKGlmIGFueSlcbiAgICAgKlxuICAgICAqIEByZW1hcmtcbiAgICAgKiBSZXR1cm5zIGBudWxsYCBpZiBub2RlIGRvZXMgbm90IGhhdmUgY2hpbGRyZW5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGNoaWxkcmVuOiBJZ3hUcmVlTm9kZTxhbnk+W10gPSBub2RlLmNoaWxkcmVuO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogSWd4VHJlZU5vZGU8YW55PltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuPy5sZW5ndGggPyB0aGlzLl9jaGlsZHJlbi50b0FycmF5KCkgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHdpbGwgYmUgdXNlZCBpbiBEcmFnIGFuZCBEcm9wIGltcGxlbWVudGF0aW9uXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZCgnZ2hvc3RUZW1wbGF0ZScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBoZWFkZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdkZWZhdWx0SW5kaWNhdG9yJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEV4cGFuZEluZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnY2hpbGRyZW5Db250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIGNoaWxkcmVuQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBnZXQgaGFzTGlua0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCA+IDAgfHwgdGhpcy5yZWdpc3RlcmVkQ2hpbGRyZW4/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBpc0NvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmRpc3BsYXlEZW5zaXR5ID09PSBEaXNwbGF5RGVuc2l0eS5jb21wYWN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaXNDb3N5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlPy5kaXNwbGF5RGVuc2l0eSA9PT0gRGlzcGxheURlbnNpdHkuY29zeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaXNGb2N1c2VkOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyZWRDaGlsZHJlbjogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVHJlZVJlc1N0cmluZ3M7XG5cbiAgICBwcml2YXRlIF90YWJJbmRleCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KElHWF9UUkVFX0NPTVBPTkVOVCkgcHVibGljIHRyZWU6IElneFRyZWUsXG4gICAgICAgIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHRyZWVTZXJ2aWNlOiBJZ3hUcmVlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIG5hdlNlcnZpY2U6IElneFRyZWVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4QW5ndWxhckFuaW1hdGlvblNlcnZpY2UpIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoSUdYX1RSRUVfTk9ERV9DT01QT05FTlQpIHB1YmxpYyBwYXJlbnROb2RlOiBJZ3hUcmVlTm9kZTxhbnk+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFuaW1hdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlLnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVJbmRldGVybWluYXRlKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgZGVwdGggb2YgdGhlIG5vZGUsIHJlbGF0aXZlIHRvIHRoZSByb290XG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgI25vZGU+XG4gICAgICogICAgICBNeSBsZXZlbCBpcyB7eyBub2RlLmxldmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMTJdKVswXTtcbiAgICAgKiBjb25zdCBsZXZlbDogbnVtYmVyID0gbm9kZS5sZXZlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUgPyB0aGlzLnBhcmVudE5vZGUubGV2ZWwgKyAxIDogMDtcbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBTdXBwb3JzdCB0d28td2F5IGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFsoc2VsZWN0ZWQpXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgKiAgICAgIHt7IG5vZGUubGFiZWwgfX1cbiAgICAgKiAgPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgbm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogY29uc3Qgc2VsZWN0ZWQgPSBub2RlLnNlbGVjdGVkO1xuICAgICAqIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5pc05vZGVTZWxlY3RlZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgICAgICBpZiAoISh0aGlzLnRyZWU/Lm5vZGVzICYmIHRoaXMudHJlZS5ub2Rlcy5maW5kKChlKSA9PiBlID09PSB0aGlzKSkgJiYgdmFsKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWUuZm9yY2VTZWxlY3QucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICYmICF0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNOb2RlU2VsZWN0ZWQodGhpcykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWwgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzTm9kZVNlbGVjdGVkKHRoaXMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFt0aGlzXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0L3NldCB3aGV0aGVyIHRoZSBub2RlIGlzIGV4cGFuZGVkXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10cmVlPlxuICAgICAqICAuLi5cbiAgICAgKiAgPGlneC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2YgZGF0YVwiIFtleHBhbmRlZF09XCJub2RlLm5hbWUgPT09IHRoaXMuZXhwYW5kZWROb2RlXCI+XG4gICAgICogICAgICB7eyBub2RlLmxhYmVsIH19XG4gICAgICogIDwvaWd4LXRyZWUtbm9kZT5cbiAgICAgKiA8L2lneC10cmVlPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlPGFueT4gPSB0aGlzLnRyZWUuZmluZE5vZGVzKGRhdGFbMF0pWzBdO1xuICAgICAqIGNvbnN0IGV4cGFuZGVkID0gbm9kZS5leHBhbmRlZDtcbiAgICAgKiBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5leHBhbmQodGhpcywgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzZSh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZXhwYW5kSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWU/LmV4cGFuZEluZGljYXRvciA/IHRoaXMudHJlZS5leHBhbmRJbmRpY2F0b3IgOiB0aGlzLl9kZWZhdWx0RXhwYW5kSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdGl2ZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIG5vZGUuIENvdWxkIGJlIG51bGwgaW4gY2VydGFpbiBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBuYXRpdmVFbGVtZW50IG9mIHRoZSBzZWNvbmQgbm9kZVxuICAgICAqIGNvbnN0IG5vZGU6IElneFRyZWVOb2RlID0gdGhpcy50cmVlLm5vZGVzLmZpcnN0KCk7XG4gICAgICogY29uc3Qgbm9kZUVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbm9kZS5uYXRpdmVFbGVtZW50O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5vcGVuQW5pbWF0aW9uRG9uZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2xvc2VBbmltYXRpb25Eb25lLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmVlLm5vZGVDb2xsYXBzZWQuZW1pdCh7IG93bmVyOiB0aGlzLnRyZWUsIG5vZGU6IHRoaXMgfSk7XG4gICAgICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNlKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICogU2V0cyB0aGUgZm9jdXMgdG8gdGhlIG5vZGUncyA8YT4gY2hpbGQsIGlmIHByZXNlbnRcbiAgICAgKiBTZXRzIHRoZSBub2RlIGFzIHRoZSB0cmVlIHNlcnZpY2UncyBmb2N1c2VkTm9kZVxuICAgICAqIE1hcmtzIHRoZSBub2RlIGFzIHRoZSBjdXJyZW50IGFjdGl2ZSBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm5hdlNlcnZpY2UuZm9jdXNlZE5vZGUgIT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF2U2VydmljZS5mb2N1c2VkTm9kZSA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5saW5rQ2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5rQ2hpbGRyZW4uZmlyc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuWzBdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKiBDbGVhciB0aGUgbm9kZSdzIGZvY3VzZWQgc3RhdHVzXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TZWxlY3RvckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIC8vIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyB0aGlzLm5hdlNlcnZpY2UuaGFuZGxlRm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdE11bHRpcGxlTm9kZXModGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3ROb2RlKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIG5vZGUgZXhwYW5zaW9uIHN0YXRlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS50b2dnbGUoKVwiPlRvZ2dsZSBOb2RlPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbXlOb2RlOiBJZ3hUcmVlTm9kZTxhbnk+ID0gdGhpcy50cmVlLmZpbmROb2RlcyhkYXRhWzBdKVswXTtcbiAgICAgKiBteU5vZGUudG9nZ2xlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaW5kaWNhdG9yQ2xpY2soKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgIHRoaXMubmF2U2VydmljZS5zZXRGb2N1c2VkQW5kQWN0aXZlTm9kZSh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm5hdlNlcnZpY2Uuc2V0Rm9jdXNlZEFuZEFjdGl2ZU5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgbm9kZSwgdHJpZ2dlcmluZyBhbmltYXRpb25cbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRyZWU+XG4gICAgICogICAgICA8aWd4LXRyZWUtbm9kZSAjbm9kZT5NeSBOb2RlPC9pZ3gtdHJlZS1ub2RlPlxuICAgICAqIDwvaWd4LXRyZWU+XG4gICAgICogPGJ1dHRvbiBpZ3hCdXR0b24gKGNsaWNrKT1cIm5vZGUuZXhwYW5kKClcIj5FeHBhbmQgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmV4cGFuZCgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkICYmICF0aGlzLnRyZWVTZXJ2aWNlLmNvbGxhcHNpbmdOb2Rlcy5oYXModGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJVHJlZU5vZGVUb2dnbGluZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLnRyZWUsXG4gICAgICAgICAgICBub2RlOiB0aGlzLFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZS5ub2RlRXhwYW5kaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UuZXhwYW5kKHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5wbGF5T3BlbkFuaW1hdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuQ29udGFpbmVyXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29sbGFwc2VzIHRoZSBub2RlLCB0cmlnZ2VyaW5nIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdHJlZT5cbiAgICAgKiAgICAgIDxpZ3gtdHJlZS1ub2RlICNub2RlPk15IE5vZGU8L2lneC10cmVlLW5vZGU+XG4gICAgICogPC9pZ3gtdHJlZT5cbiAgICAgKiA8YnV0dG9uIGlneEJ1dHRvbiAoY2xpY2spPVwibm9kZS5jb2xsYXBzZSgpXCI+Q29sbGFwc2UgTm9kZTwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IG15Tm9kZTogSWd4VHJlZU5vZGU8YW55PiA9IHRoaXMudHJlZS5maW5kTm9kZXMoZGF0YVswXSlbMF07XG4gICAgICogbXlOb2RlLmNvbGxhcHNlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZXhwYW5kZWQgfHwgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nTm9kZXMuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlVG9nZ2xpbmdFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy50cmVlLFxuICAgICAgICAgICAgbm9kZTogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZUNvbGxhcHNpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5jb2xsYXBzaW5nKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wbGF5Q2xvc2VBbmltYXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkNvbnRhaW5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBhZGRMaW5rQ2hpbGQobGluazogSWd4VHJlZU5vZGVMaW5rRGlyZWN0aXZlKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJlZENoaWxkcmVuLnB1c2gobGluayk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlbW92ZUxpbmtDaGlsZChsaW5rOiBJZ3hUcmVlTm9kZUxpbmtEaXJlY3RpdmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5pbmRleE9mKGxpbmspO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWRDaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNub0RyYWdUZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFdpbGwgc3dpdGNoIHRlbXBsYXRlcyBkZXBlbmRpbmcgb24gZHJhZ0Ryb3AgLS0+XG48bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub0RyYWdUZW1wbGF0ZVwiPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAjY2hpbGRyZW5Db250YWluZXJcbiAgICAqbmdJZj1cImV4cGFuZGVkICYmICFsb2FkaW5nXCJcbiAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX2dyb3VwXCJcbiAgICByb2xlPVwiZ3JvdXBcIlxuPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC10cmVlLW5vZGVcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRJbmRpY2F0b3I+XG4gICAgPGlneC1pY29uIFthdHRyLmFyaWEtbGFiZWxdPVwiZXhwYW5kZWQgPyByZXNvdXJjZVN0cmluZ3MuaWd4X2NvbGxhcHNlIDogcmVzb3VyY2VTdHJpbmdzLmlneF9leHBhbmRcIj5cbiAgICAgICAge3sgZXhwYW5kZWQgPyBcImtleWJvYXJkX2Fycm93X2Rvd25cIiA6IFwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIiB9fVxuICAgIDwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHNlcGFyYXRlZCBpbiBhIHRlbXBsYXRlIGluIGNhc2UgdGhpcyBldmVyIG5lZWRzIHRvIGJlIHRlbXBsYXRhYmxlIC0tPlxuPG5nLXRlbXBsYXRlICNzZWxlY3RNYXJrZXJUZW1wbGF0ZT5cbiAgICA8aWd4LWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdGVkXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbaW5kZXRlcm1pbmF0ZV09XCJpbmRldGVybWluYXRlXCIgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgPC9pZ3gtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICAgIDxkaXYgI2dob3N0VGVtcGxhdGUgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX193cmFwcGVyXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlXCJcbiAgICAgICAgW3RhYkluZGV4XT1cInRhYkluZGV4XCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWNvc3knOiBpc0Nvc3ksXG4gICAgICAgICAgICAnaWd4LXRyZWUtbm9kZV9fd3JhcHBlci0tY29tcGFjdCc6IGlzQ29tcGFjdCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgJ2lneC10cmVlLW5vZGVfX3dyYXBwZXItLWFjdGl2ZScgOiB0aGlzLmFjdGl2ZSxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1mb2N1c2VkJyA6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAgICdpZ3gtdHJlZS1ub2RlX193cmFwcGVyLS1kaXNhYmxlZCcgOiB0aGlzLmRpc2FibGVkXG4gICAgICAgIH1cIlxuICAgICAgICAocG9pbnRlcmRvd24pPVwib25Qb2ludGVyRG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAoYmx1cik9XCJjbGVhckZvY3VzKClcIlxuICAgID5cbiAgICAgICAgPGRpdiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBpdGVtIG9mIFtdLmNvbnN0cnVjdG9yKGxldmVsKVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NwYWNlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEV4cGFuZC9Db2xsYXBzZSBpbmRpY2F0b3IgLS0+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX190b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lneC10cmVlLW5vZGVfX3RvZ2dsZS1idXR0b24tLWhpZGRlbic6ICFfY2hpbGRyZW4/Lmxlbmd0aCB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJpbmRpY2F0b3JDbGljaygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImV4cGFuZEluZGljYXRvclRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogZXhwYW5kZWQgfVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fdG9nZ2xlLWJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgXHQ8aWd4LWNpcmN1bGFyLWJhclxuICAgICAgICAgICAgXHRbYW5pbWF0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBcdFtpbmRldGVybWluYXRlXT1cInRydWVcIlxuICAgICAgICAgICAgXHRbdGV4dFZpc2liaWxpdHldPVwiZmFsc2VcIlxuICAgICAgICBcdD5cbiAgICAgICAgXHQ8L2lneC1jaXJjdWxhci1iYXI+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEl0ZW0gc2VsZWN0aW9uIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1NlbGVjdG9yc1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC10cmVlLW5vZGVfX3NlbGVjdFwiXG4gICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0b3JDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VsZWN0TWFya2VyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fY29udGVudFwiPlxuICAgICAgICAgICAgPCEtLSBHaG9zdCBjb250ZW50IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gIEJ1ZmZlciBlbGVtZW50IGZvciAnbW92ZSBhZnRlcicgd2hlbiBEJkQgaXMgaW1wbGVtZW50ZWQtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJvcC1pbmRpY2F0b3JcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJpZ3gtdHJlZS1ub2RlX19zcGFjZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBbXS5jb25zdHJ1Y3RvcihsZXZlbClcIj48L3NwYW4+XG4gICAgICAgIDwhLS0gc3R5bGUgcnVsZXMgdGFyZ2V0IHRoaXMgZGl2LCBkbyBub3QgZGVsZXRlIGl0IC0tPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkcmFnVGVtcGxhdGU+XG4gICAgPCEtLSBEcmFnIGRyb3AgZ29lcyBoZXJlXG4gICAgICAgIGlneERyb3BcbiAgICAgICAgI2Ryb3BSZWY9XCJkcm9wXCJcbiAgICAgICAgW2lneE5vZGVEcmFnXT1cInRoaXNcIlxuICAgICAgICAoZHJhZ1N0YXJ0KT1cImxvZ0Ryb3AoZHJvcFJlZilcIlxuICAgICAgICAobGVhdmUpPVwiZW1pdExlYXZlKClcIlxuICAgICAgICAoZW50ZXIpPVwiZW1pdEVudGVyKClcIiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXRyZWUtbm9kZV9fZHJhZy13cmFwcGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { IgxTreeSelectionType } from './common';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
;
|
|
5
4
|
/** @hidden @internal */
|
|
6
5
|
export class IgxTreeSelectionService {
|
|
7
6
|
constructor() {
|
|
@@ -314,4 +313,4 @@ export class IgxTreeSelectionService {
|
|
|
314
313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.4", ngImport: i0, type: IgxTreeSelectionService, decorators: [{
|
|
315
314
|
type: Injectable
|
|
316
315
|
}] });
|
|
317
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXdCLG9CQUFvQixFQUEyQixNQUFNLFVBQVUsQ0FBQzs7QUFNOUYsQ0FBQztBQUVGLHdCQUF3QjtBQUV4QixNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBR1ksa0JBQWEsR0FBMEIsSUFBSSxHQUFHLEVBQW9CLENBQUM7UUFDbkUsdUJBQWtCLEdBQTBCLElBQUksR0FBRyxFQUFvQixDQUFDO0tBMlZuRjtJQXRWVSxRQUFRLENBQUMsSUFBYTtRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsMEVBQTBFO0lBQ25FLG1CQUFtQixDQUFDLElBQXNCLEVBQUUsS0FBYTtRQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLEVBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsZ0RBQWdEO0lBQ3pDLFVBQVUsQ0FBQyxJQUFzQixFQUFFLEtBQWE7UUFDbkQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7WUFDbkQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsa0RBQWtEO0lBQzNDLFlBQVksQ0FBQyxJQUFzQixFQUFFLEtBQWE7UUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELDRCQUE0QjtJQUNyQixtQkFBbUI7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFzQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFzQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELG1EQUFtRDtJQUM1QyxzQkFBc0IsQ0FBQyxLQUF5QixFQUFFLGtCQUFrQixHQUFHLEtBQUssRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUNsRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssb0JBQW9CLENBQUMsU0FBUyxFQUFFO1lBQ3JFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUM5RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU3QyxJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDOUI7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRCxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxxREFBcUQ7SUFDOUMsd0JBQXdCLENBQUMsS0FBMEIsRUFBRSxVQUFVLEdBQUcsSUFBSTtRQUN6RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5QjthQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUU7WUFDNUUsSUFBSSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUVELElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELG9GQUFvRjtJQUM3RSx1QkFBdUIsQ0FBQyxJQUFzQjtRQUNqRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxLQUFLLG9CQUFvQixDQUFDLFNBQVMsRUFBRTtZQUN6RCxPQUFPO1NBQ1Y7UUFDRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQix1Q0FBdUM7Z0JBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNsQixPQUFPO2lCQUNWO2dCQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ25CLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDN0M7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCwwQ0FBMEM7SUFDbEMsa0JBQWtCLENBQUMsSUFBc0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCwyQ0FBMkM7SUFDbkMsZ0JBQWdCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVELHlEQUF5RDtJQUNqRCxxQkFBcUI7UUFDekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVPLHNCQUFzQixDQUMxQixZQUFnQyxFQUFFLEtBQXlCLEVBQUUsT0FBMkIsRUFBRSxLQUFZO1FBRXRHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssb0JBQW9CLENBQUMsU0FBUyxFQUFFO1lBQ3hELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RSxPQUFPO1NBQ1Y7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDdkQsT0FBTztTQUNWO1FBRUQsTUFBTSxJQUFJLEdBQTRCO1lBQ2xDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWTtZQUN6QyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtTQUN6RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUF5QixFQUFFLE1BQTBCO1FBQzdFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqRyxDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBMEIsRUFBRSxrQkFBa0IsR0FBRyxLQUFLO1FBQ3hGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTdDLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLCtCQUErQixDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN2RTthQUFNO1lBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sSUFBSSxHQUFxQyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUU5RSwrRkFBK0Y7WUFDL0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU8sK0JBQStCLENBQUMsS0FBeUI7UUFDN0QsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBbUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFtQixJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssK0JBQStCLENBQUMsSUFBc0M7UUFDMUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFtQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBbUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUV0RixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsb0dBQW9HO0lBQzVGLHFCQUFxQixDQUFDLEtBQXlCLEVBQUUsUUFBaUI7UUFDdEUsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLGNBQWMsR0FBbUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlGLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLFFBQVEsRUFBRTtvQkFDVixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNwQztxQkFBTTtvQkFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2QztnQkFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2xELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLDZCQUE2QixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQU07UUFDdEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ3ZELE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUE0QjtZQUNsQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVk7WUFDekMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDekQsQ0FBQztRQUVGLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFdkQsa0ZBQWtGO1FBQ2xGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBRUQsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQW1CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNILHVFQUF1RTtZQUN2RSxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLDBCQUEwQixDQUFDLElBQXNCO1FBQ3JELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0IsQ0FBQyxJQUFzQjtRQUNuRCxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDbkIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7U0FDSjthQUFNO1lBQ0gsaUdBQWlHO1lBQ2pHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNwQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDBCQUEwQixDQUFDLEtBQXlCO1FBQ3hELE1BQU0sVUFBVSxHQUFtQztZQUMvQyxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQW9CO1lBQ3BDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBbUIsS0FBSyxDQUFDO1NBQzFDLENBQUM7UUFFRixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzdELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDM0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN6QixVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNLLHFCQUFxQixDQUFDLElBQXNDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELCtFQUErRTtJQUN2RSx1QkFBdUIsQ0FBQyxZQUFnQztRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QixDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzttSEE3VlEsdUJBQXVCO3VIQUF2Qix1QkFBdUI7O2dHQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hUcmVlLCBJZ3hUcmVlTm9kZSwgSWd4VHJlZVNlbGVjdGlvblR5cGUsIElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKiogQSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgdGhlIG5vZGVzIGFmZmVjdGVkIGluIHRoZSBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGVpciBkaXJlY3QgcGFyZW50cyAqL1xuaW50ZXJmYWNlIENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiB7XG4gICAgbm9kZXM6IFNldDxJZ3hUcmVlTm9kZTxhbnk+PjtcbiAgICBwYXJlbnRzOiBTZXQ8SWd4VHJlZU5vZGU8YW55Pj47XG59O1xuXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlU2VsZWN0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSB0cmVlOiBJZ3hUcmVlO1xuICAgIHByaXZhdGUgbm9kZVNlbGVjdGlvbjogU2V0PElneFRyZWVOb2RlPGFueT4+ID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+PigpO1xuICAgIHByaXZhdGUgaW5kZXRlcm1pbmF0ZU5vZGVzOiBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4gPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KCk7XG5cbiAgICBwcml2YXRlIG5vZGVzVG9CZVNlbGVjdGVkOiBTZXQ8SWd4VHJlZU5vZGU8YW55Pj47XG4gICAgcHJpdmF0ZSBub2Rlc1RvQmVJbmRldGVybWluYXRlOiBTZXQ8SWd4VHJlZU5vZGU8YW55Pj47XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXIodHJlZTogSWd4VHJlZSkge1xuICAgICAgICB0aGlzLnRyZWUgPSB0cmVlO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgcmFuZ2UgZnJvbSBsYXN0IHNlbGVjdGVkIG5vZGUgdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIG5vZGUuICovXG4gICAgcHVibGljIHNlbGVjdE11bHRpcGxlTm9kZXMobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubm9kZVNlbGVjdGlvbi5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUobm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFzdFNlbGVjdGVkTm9kZUluZGV4ID0gdGhpcy50cmVlLm5vZGVzLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpW3RoaXMubm9kZVNlbGVjdGlvbi5zaXplIC0gMV0pO1xuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZUluZGV4ID0gdGhpcy50cmVlLm5vZGVzLnRvQXJyYXkoKS5pbmRleE9mKG5vZGUpO1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuc2xpY2UoTWF0aC5taW4oY3VycmVudE5vZGVJbmRleCwgbGFzdFNlbGVjdGVkTm9kZUluZGV4KSxcbiAgICAgICAgICAgIE1hdGgubWF4KGN1cnJlbnROb2RlSW5kZXgsIGxhc3RTZWxlY3RlZE5vZGVJbmRleCkgKyAxKTtcblxuICAgICAgICBjb25zdCBhZGRlZCA9IG5vZGVzLmZpbHRlcihfbm9kZSA9PiAhdGhpcy5pc05vZGVTZWxlY3RlZChfbm9kZSkpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5jb25jYXQoYWRkZWQpO1xuICAgICAgICB0aGlzLmVtaXROb2RlU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgW10sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgbm9kZSBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWUuc2VsZWN0aW9uID09PSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5Ob25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KFsuLi50aGlzLmdldFNlbGVjdGVkTm9kZXMoKSwgbm9kZV0sIFtub2RlXSwgW10sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3QgdGhlIHNwZWNpZmllZCBub2RlIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdE5vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5maWx0ZXIociA9PiByICE9PSBub2RlKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFtub2RlXSwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgbm9kZSBzZWxlY3Rpb24gKi9cbiAgICBwdWJsaWMgY2xlYXJOb2Rlc1NlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZU5vZGVzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZVNlbGVjdGVkKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZVNlbGVjdGlvbi5oYXMobm9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZUluZGV0ZXJtaW5hdGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlTm9kZXMuaGFzKG5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIG5vZGVzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10sIGNsZWFyUHJldlNlbGVjdGlvbiA9IGZhbHNlLCBzaG91bGRFbWl0ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlICYmIHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2RlcywgY2xlYXJQcmV2U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuXG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLm5vZGVTZWxlY3Rpb24uYWRkKG5vZGUpKTtcblxuICAgICAgICBpZiAoc2hvdWxkRW1pdCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0ZWRDaGFuZ2VFdmVudChvbGRTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCBub2Rlcy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzPzogSWd4VHJlZU5vZGU8YW55PltdLCBzaG91bGRFbWl0ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRyZWUgJiYgdGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuQ2FzY2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNhc2NhZGVEZXNlbGVjdE5vZGVzV2l0aE5vRXZlbnQobm9kZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHRoaXMubm9kZVNlbGVjdGlvbi5kZWxldGUobm9kZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZEVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDYWxsZWQgb24gYG5vZGUubmdPbkRlc3Ryb3lgIHRvIGVuc3VyZSBzdGF0ZSBpcyBjb3JyZWN0IGFmdGVyIG5vZGUgaXMgcmVtb3ZlZCAqL1xuICAgIHB1YmxpYyBlbnN1cmVTdGF0ZU9uTm9kZURlbGV0ZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWU/LnNlbGVjdGlvbiAhPT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuQ2FzY2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gbm9kZSBpcyBkZXN0cm95ZWQsIGRvIG5vdCBlbWl0IGV2ZW50XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW25vZGVdLCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzaXRhbnRMZWFmTm9kZSA9IG5vZGUucGFyZW50Tm9kZT8uYWxsQ2hpbGRyZW4uZmluZChlID0+ICFlLl9jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFzc2l0YW50TGVhZk5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlck5vZGVTdGF0ZShhc3NpdGFudExlYWZOb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHJpZ2dlcnMgYSBub2RlJ3Mgc2VsZWN0aW9uIHN0YXRlICovXG4gICAgcHJpdmF0ZSByZXRyaWdnZXJOb2RlU3RhdGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChbbm9kZV0sIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uYWRkKG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW25vZGVdLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgbm9kZXMuICovXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVzKCk6IElneFRyZWVOb2RlPGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSA/IEFycmF5LmZyb20odGhpcy5ub2RlU2VsZWN0aW9uKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFycmF5IG9mIHRoZSBub2RlcyBpbiBpbmRldGVybWluYXRlIHN0YXRlLiAqL1xuICAgIHByaXZhdGUgZ2V0SW5kZXRlcm1pbmF0ZU5vZGVzKCk6IElneFRyZWVOb2RlPGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVOb2Rlcy5zaXplID8gQXJyYXkuZnJvbSh0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcykgOiBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXROb2RlU2VsZWN0aW9uRXZlbnQoXG4gICAgICAgIG5ld1NlbGVjdGlvbjogSWd4VHJlZU5vZGU8YW55PltdLCBhZGRlZDogSWd4VHJlZU5vZGU8YW55PltdLCByZW1vdmVkOiBJZ3hUcmVlTm9kZTxhbnk+W10sIGV2ZW50OiBFdmVudFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuQ2FzY2FkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRDYXNjYWRlTm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgPSB7XG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLCBldmVudCwgY2FuY2VsOiBmYWxzZSwgb3duZXI6IHRoaXMudHJlZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWUubm9kZVNlbGVjdGlvbi5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXJlRXF1YWxDb2xsZWN0aW9ucyhmaXJzdDogSWd4VHJlZU5vZGU8YW55PltdLCBzZWNvbmQ6IElneFRyZWVOb2RlPGFueT5bXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmlyc3QubGVuZ3RoID09PSBzZWNvbmQubGVuZ3RoICYmIG5ldyBTZXQoZmlyc3QuY29uY2F0KHNlY29uZCkpLnNpemUgPT09IGZpcnN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVTZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzPzogSWd4VHJlZU5vZGU8YW55PltdLCBjbGVhclByZXZTZWxlY3Rpb24gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2Rlcy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoeyBhZGRlZDogbm9kZXMsIHJlbW92ZWQ6IFtdIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gWy4uLm9sZFNlbGVjdGlvbiwgLi4ubm9kZXNdO1xuICAgICAgICAgICAgY29uc3QgYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4gPSB7IG9sZFNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uIH07XG5cbiAgICAgICAgICAgIC8vIHJldHJpZXZlIG9ubHkgdGhlIHJvd3Mgd2l0aG91dCB0aGVpciBwYXJlbnRzL2NoaWxkcmVuIHdoaWNoIGhhcyB0byBiZSBhZGRlZCB0byB0aGUgc2VsZWN0aW9uXG4gICAgICAgICAgICB0aGlzLnBvcHVsYXRlQWRkUmVtb3ZlQXJncyhhcmdzKTtcblxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVOb2Rlc05ld1NlbGVjdGlvblN0YXRlKGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbiA9IG5ldyBTZXQodGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZU5vZGVzID0gbmV3IFNldCh0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUpO1xuXG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhc2NhZGVEZXNlbGVjdE5vZGVzV2l0aE5vRXZlbnQobm9kZXM6IElneFRyZWVOb2RlPGFueT5bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzID0geyBhZGRlZDogW10sIHJlbW92ZWQ6IG5vZGVzIH07XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcblxuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcyA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4odGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBwb3B1bGF0ZXMgdGhlIG5vZGVzVG9CZVNlbGVjdGVkIGFuZCBub2Rlc1RvQmVJbmRldGVybWluYXRlIHNldHNcbiAgICAgKiB3aXRoIHRoZSBub2RlcyB3aGljaCB3aWxsIGJlIGV2ZW50dWFsbHkgaW4gc2VsZWN0ZWQvaW5kZXRlcm1pbmF0ZSBzdGF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzOiBQYXJ0aWFsPElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50Pik6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+PihhcmdzLm9sZFNlbGVjdGlvbiA/IGFyZ3Mub2xkU2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkpO1xuICAgICAgICB0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUgPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMuZ2V0SW5kZXRlcm1pbmF0ZU5vZGVzKCkpO1xuXG4gICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdGlvblN0YXRlKGFyZ3MucmVtb3ZlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3Rpb25TdGF0ZShhcmdzLmFkZGVkLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogRW5zdXJlcyBwcm9wZXIgc2VsZWN0aW9uIHN0YXRlIGZvciBhbGwgcHJlZGVzY2Vzc29ycyBhbmQgZGVzY2VuZGFudHMgZHVyaW5nIGEgc2VsZWN0aW9uIGV2ZW50ICovXG4gICAgcHJpdmF0ZSBjYXNjYWRlU2VsZWN0aW9uU3RhdGUobm9kZXM6IElneFRyZWVOb2RlPGFueT5bXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlcyAmJiBub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlQ29sbGVjdGlvbjogQ2FzY2FkZVNlbGVjdGlvbk5vZGVDb2xsZWN0aW9uID0gdGhpcy5nZXRDYXNjYWRpbmdOb2RlQ29sbGVjdGlvbihub2Rlcyk7XG5cbiAgICAgICAgICAgIG5vZGVDb2xsZWN0aW9uLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIEFycmF5LmZyb20obm9kZUNvbGxlY3Rpb24ucGFyZW50cykuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShwYXJlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDYXNjYWRlTm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJnczogSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgPSB7XG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLCBldmVudCwgY2FuY2VsOiBmYWxzZSwgb3duZXI6IHRoaXMudHJlZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcblxuICAgICAgICBhcmdzLm5ld1NlbGVjdGlvbiA9IEFycmF5LmZyb20odGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCk7XG5cbiAgICAgICAgLy8gcmV0cmlldmUgbm9kZXMvcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgYmVlbiBhZGRlZC9yZW1vdmVkIGZyb20gdGhlIHNlbGVjdGlvblxuICAgICAgICB0aGlzLnBvcHVsYXRlQWRkUmVtb3ZlQXJncyhhcmdzKTtcblxuICAgICAgICB0aGlzLnRyZWUubm9kZVNlbGVjdGlvbi5lbWl0KGFyZ3MpO1xuXG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYXJncy5uZXdTZWxlY3Rpb24gaGFzbid0IGJlZW4gbW9kaWZpZWRcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhBcnJheS5mcm9tKHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpLCBhcmdzLm5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbiA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4odGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcyA9IG5ldyBTZXQodGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQoY3VyclNlbGVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzZWxlY3QgdGhlIG5vZGVzIHdpdGhpbiB0aGUgbW9kaWZpZWQgYXJncy5uZXdTZWxlY3Rpb24gd2l0aCBubyBldmVudFxuICAgICAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0Tm9kZXNXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZWN1cnNpdmVseSBoYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgZGlyZWN0IGFuZCBpbmRpcmVjdCBwYXJlbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGlmICghbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlTm9kZVNlbGVjdGlvblN0YXRlKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBhcmVudFNlbGVjdGlvblN0YXRlKG5vZGUucGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIGdpdmVuIG5vZGUgYmFzZWQgdGhlIHNlbGVjdGlvbiBzdGF0ZXMgb2YgaXRzIGRpcmVjdCBjaGlsZHJlblxuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlTm9kZVNlbGVjdGlvblN0YXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pIHtcbiAgICAgICAgY29uc3Qgbm9kZXNBcnJheSA9IChub2RlICYmIG5vZGUuX2NoaWxkcmVuKSA/IG5vZGUuX2NoaWxkcmVuLnRvQXJyYXkoKSA6IFtdO1xuICAgICAgICBpZiAobm9kZXNBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChub2Rlc0FycmF5LmV2ZXJ5KG4gPT4gdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5oYXMobikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5hZGQobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZXNBcnJheS5zb21lKG4gPT4gdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5oYXMobikgfHwgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmhhcyhuKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGNoaWxkcmVuIG9mIHRoZSBub2RlIGhhcyBiZWVuIGRlbGV0ZWQgYW5kIHRoZSBub2RlIHdhcyBzZWxlY3RlZCBkbyBub3QgY2hhbmdlIGl0cyBzdGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMuaXNOb2RlU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmFkZChub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5vZGVzVG9CZUluZGV0ZXJtaW5hdGUuZGVsZXRlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY29sbGVjdGlvbiBvZiBhbGwgbm9kZXMgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZSBldmVudFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVzVG9CZVByb2Nlc3NlZCBzZXQgb2YgdGhlIG5vZGVzIHRvIGJlIHNlbGVjdGVkL2Rlc2VsZWN0ZWRcbiAgICAgKiBAcmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGFmZmVjdGVkIG5vZGVzIGFuZCBhbGwgdGhlaXIgcGFyZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2FzY2FkaW5nTm9kZUNvbGxlY3Rpb24obm9kZXM6IElneFRyZWVOb2RlPGFueT5bXSk6IENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb246IENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiA9IHtcbiAgICAgICAgICAgIHBhcmVudHM6IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oKSxcbiAgICAgICAgICAgIG5vZGVzOiBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KG5vZGVzKVxuICAgICAgICB9O1xuXG4gICAgICAgIEFycmF5LmZyb20oY29sbGVjdGlvbi5ub2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUFuZEFsbENoaWxkcmVuID0gbm9kZS5hbGxDaGlsZHJlbj8udG9BcnJheSgpIHx8IFtdO1xuICAgICAgICAgICAgbm9kZUFuZEFsbENoaWxkcmVuLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5ub2Rlcy5hZGQobik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wYXJlbnRzLmFkZChub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0cmlldmUgdGhlIG5vZGVzIHdoaWNoIHNob3VsZCBiZSBhZGRlZC9yZW1vdmVkIHRvL2Zyb20gdGhlIG9sZCBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHBvcHVsYXRlQWRkUmVtb3ZlQXJncyhhcmdzOiBQYXJ0aWFsPElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50Pik6IHZvaWQge1xuICAgICAgICBhcmdzLnJlbW92ZWQgPSBhcmdzLm9sZFNlbGVjdGlvbi5maWx0ZXIoeCA9PiBhcmdzLm5ld1NlbGVjdGlvbi5pbmRleE9mKHgpIDwgMCk7XG4gICAgICAgIGFyZ3MuYWRkZWQgPSBhcmdzLm5ld1NlbGVjdGlvbi5maWx0ZXIoeCA9PiBhcmdzLm9sZFNlbGVjdGlvbi5pbmRleE9mKHgpIDwgMCk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIHRoZSBgc2VsZWN0ZWRDaGFuZ2VgIGV2ZW50IGZvciBlYWNoIG5vZGUgYWZmZWN0ZWQgYnkgdGhlIHNlbGVjdGlvbiAqL1xuICAgIHByaXZhdGUgZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuZm9yRWFjaChuID0+IHtcbiAgICAgICAgICAgIGlmIChvbGRTZWxlY3Rpb24uaW5kZXhPZihuKSA8IDApIHtcbiAgICAgICAgICAgICAgICBuLnNlbGVjdGVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG9sZFNlbGVjdGlvbi5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm5vZGVTZWxlY3Rpb24uaGFzKG4pKSB7XG4gICAgICAgICAgICAgICAgbi5zZWxlY3RlZENoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1zZWxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi90cmVlL3RyZWUtc2VsZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQXdCLG9CQUFvQixFQUEyQixNQUFNLFVBQVUsQ0FBQzs7QUFRL0Ysd0JBQXdCO0FBRXhCLE1BQU0sT0FBTyx1QkFBdUI7SUFEcEM7UUFHWSxrQkFBYSxHQUEwQixJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUNuRSx1QkFBa0IsR0FBMEIsSUFBSSxHQUFHLEVBQW9CLENBQUM7S0EyVm5GO0lBdFZVLFFBQVEsQ0FBQyxJQUFhO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwwRUFBMEU7SUFDbkUsbUJBQW1CLENBQUMsSUFBc0IsRUFBRSxLQUFhO1FBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLE9BQU87U0FDVjtRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsRUFDM0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTNELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxnREFBZ0Q7SUFDekMsVUFBVSxDQUFDLElBQXNCLEVBQUUsS0FBYTtRQUNuRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRTtZQUNuRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxrREFBa0Q7SUFDM0MsWUFBWSxDQUFDLElBQXNCLEVBQUUsS0FBYTtRQUNyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsNEJBQTRCO0lBQ3JCLG1CQUFtQjtRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU0sY0FBYyxDQUFDLElBQXNCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLG1CQUFtQixDQUFDLElBQXNCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsbURBQW1EO0lBQzVDLHNCQUFzQixDQUFDLEtBQXlCLEVBQUUsa0JBQWtCLEdBQUcsS0FBSyxFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ2xHLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUU7WUFDckUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlELE9BQU87U0FDVjtRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTdDLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM5QjtRQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBELElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVELHFEQUFxRDtJQUM5Qyx3QkFBd0IsQ0FBQyxLQUEwQixFQUFFLFVBQVUsR0FBRyxJQUFJO1FBQ3pFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRTdDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzlCO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLFNBQVMsRUFBRTtZQUM1RSxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzFEO1FBRUQsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQsb0ZBQW9GO0lBQzdFLHVCQUF1QixDQUFDLElBQXNCO1FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEtBQUssb0JBQW9CLENBQUMsU0FBUyxFQUFFO1lBQ3pELE9BQU87U0FDVjtRQUNELHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNCLHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2xCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDbkIsT0FBTztpQkFDVjtnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUM3QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDBDQUEwQztJQUNsQyxrQkFBa0IsQ0FBQyxJQUFzQjtRQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQ7YUFBTTtZQUNILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQztJQUVELDJDQUEyQztJQUNuQyxnQkFBZ0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBRUQseURBQXlEO0lBQ2pELHFCQUFxQjtRQUN6QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRU8sc0JBQXNCLENBQzFCLFlBQWdDLEVBQUUsS0FBeUIsRUFBRSxPQUEyQixFQUFFLEtBQVk7UUFFdEcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUU7WUFDeEQsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLE9BQU87U0FDVjtRQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsRUFBRTtZQUN2RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLElBQUksR0FBNEI7WUFDbEMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZO1lBQ3pDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ3pELENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQXlCLEVBQUUsTUFBMEI7UUFDN0UsT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pHLENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxLQUEwQixFQUFFLGtCQUFrQixHQUFHLEtBQUs7UUFDeEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFN0MsSUFBSSxrQkFBa0IsRUFBRTtZQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsK0JBQStCLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDakQsTUFBTSxJQUFJLEdBQXFDLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBRTlFLCtGQUErRjtZQUMvRixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakMsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxLQUF5QjtRQUM3RCxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxDQUFtQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQW1CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7O09BR0c7SUFDSywrQkFBK0IsQ0FBQyxJQUFzQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQW1CLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFtQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBRXRGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxvR0FBb0c7SUFDNUYscUJBQXFCLENBQUMsS0FBeUIsRUFBRSxRQUFpQjtRQUN0RSxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzlCLE9BQU87U0FDVjtRQUVELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLE1BQU0sY0FBYyxHQUFtQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFOUYsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksUUFBUSxFQUFFO29CQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3BDO3FCQUFNO29CQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBTTtRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDdkQsT0FBTztTQUNWO1FBRUQsTUFBTSxJQUFJLEdBQTRCO1lBQ2xDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWTtZQUN6QyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtTQUN6RCxDQUFDO1FBRUYsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUV2RCxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDYixPQUFPO1NBQ1Y7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDakYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBbUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMvQzthQUFNO1lBQ0gsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQy9EO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssMEJBQTBCLENBQUMsSUFBc0I7UUFDckQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QixDQUFDLElBQXNCO1FBQ25ELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNuQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztTQUNKO2FBQU07WUFDSCxpR0FBaUc7WUFDakcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssMEJBQTBCLENBQUMsS0FBeUI7UUFDeEQsTUFBTSxVQUFVLEdBQW1DO1lBQy9DLE9BQU8sRUFBRSxJQUFJLEdBQUcsRUFBb0I7WUFDcEMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFtQixLQUFLLENBQUM7U0FDMUMsQ0FBQztRQUVGLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDN0Qsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3pCLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMzQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0sscUJBQXFCLENBQUMsSUFBc0M7UUFDaEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLHVCQUF1QixDQUFDLFlBQWdDO1FBQzVELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVCLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO21IQTdWUSx1QkFBdUI7dUhBQXZCLHVCQUF1Qjs7Z0dBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRyZWUsIElneFRyZWVOb2RlLCBJZ3hUcmVlU2VsZWN0aW9uVHlwZSwgSVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQgfSBmcm9tICcuL2NvbW1vbic7XG5cbi8qKiBBIGNvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgbm9kZXMgYWZmZWN0ZWQgaW4gdGhlIHNlbGVjdGlvbiBhcyB3ZWxsIGFzIHRoZWlyIGRpcmVjdCBwYXJlbnRzICovXG5pbnRlcmZhY2UgQ2FzY2FkZVNlbGVjdGlvbk5vZGVDb2xsZWN0aW9uIHtcbiAgICBub2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHBhcmVudHM6IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pjtcbn1cblxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4VHJlZVNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHByaXZhdGUgdHJlZTogSWd4VHJlZTtcbiAgICBwcml2YXRlIG5vZGVTZWxlY3Rpb246IFNldDxJZ3hUcmVlTm9kZTxhbnk+PiA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oKTtcbiAgICBwcml2YXRlIGluZGV0ZXJtaW5hdGVOb2RlczogU2V0PElneFRyZWVOb2RlPGFueT4+ID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+PigpO1xuXG4gICAgcHJpdmF0ZSBub2Rlc1RvQmVTZWxlY3RlZDogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuICAgIHByaXZhdGUgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZTogU2V0PElneFRyZWVOb2RlPGFueT4+O1xuXG4gICAgcHVibGljIHJlZ2lzdGVyKHRyZWU6IElneFRyZWUpIHtcbiAgICAgICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCBub2RlIHRvIHRoZSBjdXJyZW50IHNwZWNpZmllZCBub2RlLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RNdWx0aXBsZU5vZGVzKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZih0aGlzLmdldFNlbGVjdGVkTm9kZXMoKVt0aGlzLm5vZGVTZWxlY3Rpb24uc2l6ZSAtIDFdKTtcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGVJbmRleCA9IHRoaXMudHJlZS5ub2Rlcy50b0FycmF5KCkuaW5kZXhPZihub2RlKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWUubm9kZXMudG9BcnJheSgpLnNsaWNlKE1hdGgubWluKGN1cnJlbnROb2RlSW5kZXgsIGxhc3RTZWxlY3RlZE5vZGVJbmRleCksXG4gICAgICAgICAgICBNYXRoLm1heChjdXJyZW50Tm9kZUluZGV4LCBsYXN0U2VsZWN0ZWROb2RlSW5kZXgpICsgMSk7XG5cbiAgICAgICAgY29uc3QgYWRkZWQgPSBub2Rlcy5maWx0ZXIoX25vZGUgPT4gIXRoaXMuaXNOb2RlU2VsZWN0ZWQoX25vZGUpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuY29uY2F0KGFkZGVkKTtcbiAgICAgICAgdGhpcy5lbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCB0aGUgc3BlY2lmaWVkIG5vZGUgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdE5vZGUobm9kZTogSWd4VHJlZU5vZGU8YW55PiwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlLnNlbGVjdGlvbiA9PT0gSWd4VHJlZVNlbGVjdGlvblR5cGUuTm9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChbLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzKCksIG5vZGVdLCBbbm9kZV0sIFtdLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgbm9kZSBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3ROb2RlKG5vZGU6IElneFRyZWVOb2RlPGFueT4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkuZmlsdGVyKHIgPT4gciAhPT0gbm9kZSk7XG4gICAgICAgIHRoaXMuZW1pdE5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCBbbm9kZV0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIG5vZGUgc2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyTm9kZXNTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2Rlcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVTZWxlY3RlZChub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTZWxlY3Rpb24uaGFzKG5vZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc05vZGVJbmRldGVybWluYXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZU5vZGVzLmhhcyhub2RlKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBub2Rlcy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2RlczogSWd4VHJlZU5vZGU8YW55PltdLCBjbGVhclByZXZTZWxlY3Rpb24gPSBmYWxzZSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZSAmJiB0aGlzLnRyZWUuc2VsZWN0aW9uID09PSBJZ3hUcmVlU2VsZWN0aW9uVHlwZS5DYXNjYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQobm9kZXMsIGNsZWFyUHJldlNlbGVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbGRTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKSk7XG5cbiAgICAgICAgaWYgKHNob3VsZEVtaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkQ2hhbmdlRXZlbnQob2xkU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgbm9kZXMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgc2hvdWxkRW1pdCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50cmVlICYmIHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5jYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB0aGlzLm5vZGVTZWxlY3Rpb24uZGVsZXRlKG5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2FsbGVkIG9uIGBub2RlLm5nT25EZXN0cm95YCB0byBlbnN1cmUgc3RhdGUgaXMgY29ycmVjdCBhZnRlciBub2RlIGlzIHJlbW92ZWQgKi9cbiAgICBwdWJsaWMgZW5zdXJlU3RhdGVPbk5vZGVEZWxldGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlPy5zZWxlY3Rpb24gIT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05vZGVTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vZGUgaXMgZGVzdHJveWVkLCBkbyBub3QgZW1pdCBldmVudFxuICAgICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2l0YW50TGVhZk5vZGUgPSBub2RlLnBhcmVudE5vZGU/LmFsbENoaWxkcmVuLmZpbmQoZSA9PiAhZS5fY2hpbGRyZW4/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFhc3NpdGFudExlYWZOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWdnZXJOb2RlU3RhdGUoYXNzaXRhbnRMZWFmTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBSZXRyaWdnZXJzIGEgbm9kZSdzIHNlbGVjdGlvbiBzdGF0ZSAqL1xuICAgIHByaXZhdGUgcmV0cmlnZ2VyTm9kZVN0YXRlKG5vZGU6IElneFRyZWVOb2RlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoW25vZGVdLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uLmFkZChub2RlKTtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KFtub2RlXSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIG5vZGVzLiAqL1xuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMubm9kZVNlbGVjdGlvbikgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgbm9kZXMgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gKi9cbiAgICBwcml2YXRlIGdldEluZGV0ZXJtaW5hdGVOb2RlcygpOiBJZ3hUcmVlTm9kZTxhbnk+W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlTm9kZXMuc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlTm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Tm9kZVNlbGVjdGlvbkV2ZW50KFxuICAgICAgICBuZXdTZWxlY3Rpb246IElneFRyZWVOb2RlPGFueT5bXSwgYWRkZWQ6IElneFRyZWVOb2RlPGFueT5bXSwgcmVtb3ZlZDogSWd4VHJlZU5vZGU8YW55PltdLCBldmVudDogRXZlbnRcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZS5zZWxlY3Rpb24gPT09IElneFRyZWVTZWxlY3Rpb25UeXBlLkNhc2NhZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFyZUVxdWFsQ29sbGVjdGlvbnMoZmlyc3Q6IElneFRyZWVOb2RlPGFueT5bXSwgc2Vjb25kOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlU2VsZWN0Tm9kZXNXaXRoTm9FdmVudChub2Rlcz86IElneFRyZWVOb2RlPGFueT5bXSwgY2xlYXJQcmV2U2VsZWN0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZVNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVOb2Rlc05ld1NlbGVjdGlvblN0YXRlKHsgYWRkZWQ6IG5vZGVzLCByZW1vdmVkOiBbXSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5vbGRTZWxlY3Rpb24sIC4uLm5vZGVzXTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IFBhcnRpYWw8SVRyZWVOb2RlU2VsZWN0aW9uRXZlbnQ+ID0geyBvbGRTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiB9O1xuXG4gICAgICAgICAgICAvLyByZXRyaWV2ZSBvbmx5IHRoZSByb3dzIHdpdGhvdXQgdGhlaXIgcGFyZW50cy9jaGlsZHJlbiB3aGljaCBoYXMgdG8gYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGlvblxuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlTm9kZXNOZXdTZWxlY3Rpb25TdGF0ZShhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGVOb2RlcyA9IG5ldyBTZXQodGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlKTtcblxuICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYXNjYWRlRGVzZWxlY3ROb2Rlc1dpdGhOb0V2ZW50KG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgYWRkZWQ6IFtdLCByZW1vdmVkOiBub2RlcyB9O1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0aW9uID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcG9wdWxhdGVzIHRoZSBub2Rlc1RvQmVTZWxlY3RlZCBhbmQgbm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSBzZXRzXG4gICAgICogd2l0aCB0aGUgbm9kZXMgd2hpY2ggd2lsbCBiZSBldmVudHVhbGx5IGluIHNlbGVjdGVkL2luZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZCA9IG5ldyBTZXQ8SWd4VHJlZU5vZGU8YW55Pj4oYXJncy5vbGRTZWxlY3Rpb24gPyBhcmdzLm9sZFNlbGVjdGlvbiA6IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpKTtcbiAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlID0gbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pih0aGlzLmdldEluZGV0ZXJtaW5hdGVOb2RlcygpKTtcblxuICAgICAgICB0aGlzLmNhc2NhZGVTZWxlY3Rpb25TdGF0ZShhcmdzLnJlbW92ZWQsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jYXNjYWRlU2VsZWN0aW9uU3RhdGUoYXJncy5hZGRlZCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEVuc3VyZXMgcHJvcGVyIHNlbGVjdGlvbiBzdGF0ZSBmb3IgYWxsIHByZWRlc2Nlc3NvcnMgYW5kIGRlc2NlbmRhbnRzIGR1cmluZyBhIHNlbGVjdGlvbiBldmVudCAqL1xuICAgIHByaXZhdGUgY2FzY2FkZVNlbGVjdGlvblN0YXRlKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZXMgJiYgbm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUNvbGxlY3Rpb246IENhc2NhZGVTZWxlY3Rpb25Ob2RlQ29sbGVjdGlvbiA9IHRoaXMuZ2V0Q2FzY2FkaW5nTm9kZUNvbGxlY3Rpb24obm9kZXMpO1xuXG4gICAgICAgICAgICBub2RlQ29sbGVjdGlvbi5ub2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBBcnJheS5mcm9tKG5vZGVDb2xsZWN0aW9uLnBhcmVudHMpLmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUocGFyZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2FzY2FkZU5vZGVTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElUcmVlTm9kZVNlbGVjdGlvbkV2ZW50ID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIG93bmVyOiB0aGlzLnRyZWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU5vZGVzTmV3U2VsZWN0aW9uU3RhdGUoYXJncyk7XG5cbiAgICAgICAgYXJncy5uZXdTZWxlY3Rpb24gPSBBcnJheS5mcm9tKHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuXG4gICAgICAgIC8vIHJldHJpZXZlIG5vZGVzL3BhcmVudHMvY2hpbGRyZW4gd2hpY2ggaGFzIGJlZW4gYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgdGhpcy5wb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJncyk7XG5cbiAgICAgICAgdGhpcy50cmVlLm5vZGVTZWxlY3Rpb24uZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGFyZ3MubmV3U2VsZWN0aW9uIGhhc24ndCBiZWVuIG1vZGlmaWVkXG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoQXJyYXkuZnJvbSh0aGlzLm5vZGVzVG9CZVNlbGVjdGVkKSwgYXJncy5uZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVTZWxlY3Rpb24gPSBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pbmRldGVybWluYXRlTm9kZXMgPSBuZXcgU2V0KHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KGN1cnJTZWxlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc2VsZWN0IHRoZSBub2RlcyB3aXRoaW4gdGhlIG1vZGlmaWVkIGFyZ3MubmV3U2VsZWN0aW9uIHdpdGggbm8gZXZlbnRcbiAgICAgICAgICAgIHRoaXMuY2FzY2FkZVNlbGVjdE5vZGVzV2l0aE5vRXZlbnQoYXJncy5uZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVjdXJzaXZlbHkgaGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGRpcmVjdCBhbmQgaW5kaXJlY3QgcGFyZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgaGFuZGxlUGFyZW50U2VsZWN0aW9uU3RhdGUobm9kZTogSWd4VHJlZU5vZGU8YW55Pikge1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQYXJlbnRTZWxlY3Rpb25TdGF0ZShub2RlLnBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYSBnaXZlbiBub2RlIGJhc2VkIHRoZSBzZWxlY3Rpb24gc3RhdGVzIG9mIGl0cyBkaXJlY3QgY2hpbGRyZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZU5vZGVTZWxlY3Rpb25TdGF0ZShub2RlOiBJZ3hUcmVlTm9kZTxhbnk+KSB7XG4gICAgICAgIGNvbnN0IG5vZGVzQXJyYXkgPSAobm9kZSAmJiBub2RlLl9jaGlsZHJlbikgPyBub2RlLl9jaGlsZHJlbi50b0FycmF5KCkgOiBbXTtcbiAgICAgICAgaWYgKG5vZGVzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAobm9kZXNBcnJheS5ldmVyeShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuYWRkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVzQXJyYXkuc29tZShuID0+IHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuaGFzKG4pIHx8IHRoaXMubm9kZXNUb0JlSW5kZXRlcm1pbmF0ZS5oYXMobikpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmFkZChub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzVG9CZVNlbGVjdGVkLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBoYXMgYmVlbiBkZWxldGVkIGFuZCB0aGUgbm9kZSB3YXMgc2VsZWN0ZWQgZG8gbm90IGNoYW5nZSBpdHMgc3RhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVTZWxlY3RlZC5hZGQobm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXNUb0JlU2VsZWN0ZWQuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ub2Rlc1RvQmVJbmRldGVybWluYXRlLmRlbGV0ZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2YgYWxsIG5vZGVzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2Rlc1RvQmVQcm9jZXNzZWQgc2V0IG9mIHRoZSBub2RlcyB0byBiZSBzZWxlY3RlZC9kZXNlbGVjdGVkXG4gICAgICogQHJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGFsbCBhZmZlY3RlZCBub2RlcyBhbmQgYWxsIHRoZWlyIHBhcmVudHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhc2NhZGluZ05vZGVDb2xsZWN0aW9uKG5vZGVzOiBJZ3hUcmVlTm9kZTxhbnk+W10pOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uOiBDYXNjYWRlU2VsZWN0aW9uTm9kZUNvbGxlY3Rpb24gPSB7XG4gICAgICAgICAgICBwYXJlbnRzOiBuZXcgU2V0PElneFRyZWVOb2RlPGFueT4+KCksXG4gICAgICAgICAgICBub2RlczogbmV3IFNldDxJZ3hUcmVlTm9kZTxhbnk+Pihub2RlcylcbiAgICAgICAgfTtcblxuICAgICAgICBBcnJheS5mcm9tKGNvbGxlY3Rpb24ubm9kZXMpLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBbmRBbGxDaGlsZHJlbiA9IG5vZGUuYWxsQ2hpbGRyZW4/LnRvQXJyYXkoKSB8fCBbXTtcbiAgICAgICAgICAgIG5vZGVBbmRBbGxDaGlsZHJlbi5mb3JFYWNoKG4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ubm9kZXMuYWRkKG4pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucGFyZW50cy5hZGQobm9kZS5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHJpZXZlIHRoZSBub2RlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQvcmVtb3ZlZCB0by9mcm9tIHRoZSBvbGQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUFkZFJlbW92ZUFyZ3MoYXJnczogUGFydGlhbDxJVHJlZU5vZGVTZWxlY3Rpb25FdmVudD4pOiB2b2lkIHtcbiAgICAgICAgYXJncy5yZW1vdmVkID0gYXJncy5vbGRTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5uZXdTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgICAgICBhcmdzLmFkZGVkID0gYXJncy5uZXdTZWxlY3Rpb24uZmlsdGVyKHggPT4gYXJncy5vbGRTZWxlY3Rpb24uaW5kZXhPZih4KSA8IDApO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyB0aGUgYHNlbGVjdGVkQ2hhbmdlYCBldmVudCBmb3IgZWFjaCBub2RlIGFmZmVjdGVkIGJ5IHRoZSBzZWxlY3Rpb24gKi9cbiAgICBwcml2YXRlIGVtaXRTZWxlY3RlZENoYW5nZUV2ZW50KG9sZFNlbGVjdGlvbjogSWd4VHJlZU5vZGU8YW55PltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICBpZiAob2xkU2VsZWN0aW9uLmluZGV4T2YobikgPCAwKSB7XG4gICAgICAgICAgICAgICAgbi5zZWxlY3RlZENoYW5nZS5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvbGRTZWxlY3Rpb24uZm9yRWFjaChuID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlU2VsZWN0aW9uLmhhcyhuKSkge1xuICAgICAgICAgICAgICAgIG4uc2VsZWN0ZWRDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|