qms-angular 1.1.74 → 1.1.75

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.
@@ -1036,32 +1036,36 @@ export class SelectDepartmentTreeComponent {
1036
1036
  _mapToResultSearch() {
1037
1037
  if (!!this.resultSearch.length)
1038
1038
  this.resultSearch.forEach(item => {
1039
- var _a;
1040
- const isExistInResultSelected = (_a = this.resultSelected) === null || _a === void 0 ? void 0 : _a.some(x => { var _a; return x.id === item.id || ((_a = x.children) === null || _a === void 0 ? void 0 : _a.some(y => y.id === item.id)); });
1039
+ var _a, _b;
1040
+ let isExistInResultSelected = false;
1041
+ if (this.isIncludeChildren) {
1042
+ isExistInResultSelected = (_a = this.resultSelected) === null || _a === void 0 ? void 0 : _a.some(x => { var _a; return x.id === item.id || ((_a = x.children) === null || _a === void 0 ? void 0 : _a.some(y => y.id === item.id)); });
1043
+ }
1044
+ else {
1045
+ isExistInResultSelected = (_b = this.resultSelected) === null || _b === void 0 ? void 0 : _b.some(x => x.id === item.id);
1046
+ }
1041
1047
  isExistInResultSelected ? this.checkListSelectionSearch.select(item) : this.checkListSelectionSearch.deselect(item);
1042
1048
  });
1043
1049
  }
1044
1050
  _handleCheckResutlSearch(item, state = this.isSelectItemSearch(item.id)) {
1045
1051
  item.isLoading = false;
1046
- if (this.isIncludeChildren) {
1047
- const currentNode = this.getNodeById(item.id.toString());
1048
- if (!!currentNode) {
1049
- if (state) {
1050
- if (this.checkListSelection.isSelected(currentNode))
1051
- return;
1052
- if (this.checkListSelectionSearch.isSelected(item)) {
1053
- const nestedNode = _.cloneDeep(this.convertToNestedNode(currentNode));
1054
- this.resultSelected.push(nestedNode);
1055
- this.checkListSelection.select(currentNode);
1056
- }
1057
- }
1058
- else {
1059
- this.checkListSelection.deselect(currentNode);
1052
+ const currentNode = this.getNodeById(item.id.toString());
1053
+ if (!!currentNode) {
1054
+ if (state) {
1055
+ if (this.checkListSelection.isSelected(currentNode))
1056
+ return;
1057
+ if (this.checkListSelectionSearch.isSelected(item)) {
1058
+ const nestedNode = _.cloneDeep(this.convertToNestedNode(currentNode));
1059
+ this.resultSelected.push(nestedNode);
1060
+ this.checkListSelection.select(currentNode);
1060
1061
  }
1061
- this.config.isSelectOne ? this._handleSelectOne(currentNode.id) : this.handleCheckNode(currentNode);
1062
- this.cdRef.detectChanges();
1063
- return;
1064
1062
  }
1063
+ else {
1064
+ this.checkListSelection.deselect(currentNode);
1065
+ }
1066
+ this.config.isSelectOne ? this._handleSelectOne(currentNode.id) : this.handleCheckNode(currentNode);
1067
+ this.cdRef.detectChanges();
1068
+ return;
1065
1069
  }
1066
1070
  if (this.config.isSelectOne) {
1067
1071
  this._handleSelectOne(item.id);
@@ -1343,4 +1347,4 @@ SelectDepartmentTreeComponent.propDecorators = {
1343
1347
  cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }],
1344
1348
  paginatorSearch: [{ type: ViewChild, args: ['paginatorSearch',] }]
1345
1349
  };
1346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxT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QkFBc0Q7Z0JBRXRELFVBQVUsRUFBRTtvQkFDUix1QkFBdUI7aUJBQzFCO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNsRDs7O1lBdENrRSxpQkFBaUI7WUFLM0UsWUFBWTtZQU9aLHNCQUFzQjtZQVZ0QixlQUFlO1lBRnlFLFVBQVU7WUFXbEcsdUJBQXVCO1lBZHZCLE9BQU87WUFHNkksZ0JBQWdCO1lBcUJwSyxvQ0FBb0M7OzsyQkFzQnhDLEtBQUs7cUJBR0wsS0FBSztxQkFDTCxLQUFLOzJCQUNMLEtBQUs7NEJBZ0JMLE1BQU07a0NBQ04sTUFBTTtpQ0FDTixNQUFNO3VDQUNOLE1BQU07K0JBQ04sTUFBTTtnQ0FDTixNQUFNOzhCQUNOLE1BQU07cUNBQ04sTUFBTTt3Q0FDTixNQUFNO3NDQUNOLE1BQU07a0NBQ04sTUFBTTt1Q0FFTixTQUFTLFNBQUMsd0JBQXdCOzhCQUNsQyxTQUFTLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIG9mLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWFwLCBwYWlyd2lzZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcbmltcG9ydCB7IFFNU1RyZWVOb2RlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtdHJlZS1ub2RlLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TaXplLCBRTVNQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcbmltcG9ydCB7IEl0ZW1JY29uVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2l0ZW0taWNvbi10eXBlLmVudW0nO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHJlZURlcGFydG1lbnQgfSBmcm9tICcuL2FuaW1hdGlvbi9hbmltYXRpb24nO1xuaW1wb3J0IHsgTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtIH0gZnJvbSAnLi9lbnVtL21vZGUtZGVwYXJ0bWVudC10cmVlLXZpZXcuZW51bSc7XG5pbXBvcnQgeyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtcGFnaW5nLm1vZGVsJztcbmltcG9ydCB7IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIsIERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1zZWFyY2gtcmVzdWx0Lm1vZGVsJztcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbmZpZyc7XG5pbXBvcnQgeyBJU2VsZWN0aW9uTm9kZUNoYW5nZSB9IGZyb20gJy4vbW9kZWwvc2VsZWN0aW9uLWNoYW5nZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2Uvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS1nbG9iYWwuc2VydmljZSc7XG5cbmludGVyZmFjZSBJSGFuZGxpbmdFdmVudExhenkge1xuICAgIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xuICAgIGNoZWNrSXRlbVNlYXJjaDogYm9vbGVhbjtcbiAgICBjaGVja05vZGU6IGJvb2xlYW47XG4gICAgZXhwYW5kOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgQW5pbWF0aW9uVHJlZURlcGFydG1lbnRcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgTEFORzogYW55O1xuICAgIHJlYWRvbmx5IHNwaW5uZXJBcnIgPSBuZXcgQXJyYXkoMTIpLmZpbGwoMCk7XG4gICAgYXJyU2tlbGV0b24gPSBuZXcgQXJyYXkoNikuZmlsbCgwKTtcbiAgICBASW5wdXQoKSBzZXQgcm93c1NrZWxldG9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hcnJTa2VsZXRvbiA9IG5ldyBBcnJheSh2YWx1ZSkuZmlsbCgwKTtcbiAgICB9XG4gICAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNTB2aCc7XG4gICAgQElucHV0KCkgY29uZmlnOiBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyA9IG5ldyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZygpO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoTm9kZTogbnVtYmVyID0gNjUwO1xuICAgIGlzSW5jbHVkZUNoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgZ2V0IGRlcGFydG1lbnRSb290cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5sZXZlbCA9PT0gMCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLnRyZWVDb250cm9sICYmIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmV2ZXJ5KG5vZGUgPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgb25QYWdpbmdTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoZWNrTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gICAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XG4gICAgQE91dHB1dCgpIG9uTG9hZE1vcmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGVja0l0ZW1TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGF0ZTogYm9vbGVhbiwgaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHRvZ2dsZUluY2x1ZGVDaGlsZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBpc1B1c2hpbmdDaGlsZE5vZGVzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvclNlYXJjaCcpIHBhZ2luYXRvclNlYXJjaDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gICAgcmVhZG9ubHkgTU9ERV9WSUVXX0VOVU0gPSBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW07XG4gICAgSVRFTV9TSVpFID0gNTA7XG4gICAgcmVhZG9ubHkgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcmVzdWx0U2VhcmNoU2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgICByZXN1bHRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICAgIHJlYWRvbmx5IGdldERhdGFUcmVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TVHJlZU5vZGVbXT4oW10pO1xuICAgIHJlYWRvbmx5IHNlYXJjaERlcGFydG1lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPj4obmV3IFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+KCkpO1xuICAgIHJlc3VsdFNlYXJjaDogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsW10gPSBbXTtcblxuICAgIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFUcmVlJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIGdldCBpc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xuICAgIH1cblxuICAgIGdldCBpbmRldGVybWluYXRlU2VhcmNoUmVzdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2ggJiYgISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guc29tZSh4ID0+IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoeCkpO1xuICAgIH1cblxuICAgIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gICAgcmVhZG9ubHkgc2Nyb2xsVG9Ob2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHJlYWRvbmx5IGdldEFjdGl2ZU5vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgYWN0aXZlTm9kZTogc3RyaW5nID0gJy0tJztcblxuICAgIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xuICAgIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xuICAgIENVUlJFTlRfUEFHRVNJWkU6IG51bWJlciA9IDEwO1xuICAgIHJlYWRvbmx5IG5lc3RlZFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPigpO1xuICAgIHJlYWRvbmx5IGZsYXRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TRmxhdE5vZGVUcmVlLCBRTVNUcmVlTm9kZT4oKTtcbiAgICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8UU1TRmxhdE5vZGVUcmVlPih0cnVlKTtcbiAgICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb25TZWFyY2ggPSBuZXcgU2VsZWN0aW9uTW9kZWw8RGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsPih0cnVlKTtcbiAgICB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT47XG4gICAgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcbiAgICBkYXRhU291cmNlOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG5cbiAgICBkYXRhU291cmNlVHJlZVNlYXJjaDogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuICAgIHByaXZhdGUgX3NlbGVjdGVkTGlzdDogUU1TVHJlZU5vZGVbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oKTtcblxuICAgIGZvcm1TZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgICByZWFkb25seSBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHJlYWRvbmx5IGdldExvYWRpbmdNb3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcmVhZG9ubHkgdW50aWxEZXN0cm95TG9hZE1vcmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICByZWFkb25seSBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHJlYWRvbmx5IHRleHRTZWFyY2hTdWJqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gICAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5jb252ZXJ0VG9GbGF0Tm9kZShub2RlKSB8fCBuZXcgUU1TRmxhdE5vZGVUcmVlKCk7XG4gICAgICAgIGZsYXROb2RlLmlkID0gbm9kZS5pZDtcbiAgICAgICAgZmxhdE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZmxhdE5vZGUuZXhwYW5kYWJsZSA9IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHwgKCEhbm9kZS5jaGlsZENvdW50KSB8fCBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIGZsYXROb2RlLmxldmVsID0gbGV2ZWw7XG4gICAgICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICAgICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgICAgIGZsYXROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcbiAgICAgICAgZmxhdE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xuICAgICAgICBmbGF0Tm9kZS5pc0ZpbGUgPSBub2RlLmlzRmlsZTtcbiAgICAgICAgZmxhdE5vZGUuZGlzYWJsZWQgPSBub2RlLmRpc2FibGVkO1xuICAgICAgICBmbGF0Tm9kZS5pc0dyb3VwID0gbm9kZS5pc0dyb3VwO1xuICAgICAgICBmbGF0Tm9kZS5ncm91cElkID0gbm9kZS5ncm91cElkO1xuICAgICAgICBmbGF0Tm9kZS5leHRlcm5hbE5hbWUgPSBub2RlLmV4dGVybmFsTmFtZTtcbiAgICAgICAgZmxhdE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcbiAgICAgICAgZmxhdE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XG4gICAgICAgIGZsYXROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcbiAgICAgICAgZmxhdE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgICAgICAgZmxhdE5vZGUuZXhwYW5kSWNvbiA9IG5vZGUuZXhwYW5kSWNvbjtcblxuICAgICAgICB0aGlzLmZsYXRUcmVlTm9kZU1hcC5zZXQoZmxhdE5vZGUsIG5vZGUpO1xuICAgICAgICB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLnNldChub2RlLCBmbGF0Tm9kZSk7XG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldExldmVsID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZT8ubGV2ZWw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ2V0Q2hpbGQgPSAobm9kZTogUU1TVHJlZU5vZGUpID0+IG5vZGUuY2hpbGRyZW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0V4cGFuZGFibGUgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG4gICAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGUuZXhwYW5kYWJsZTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xuICAgICAgICBjaGVja0FsbFNlYXJjaDogZmFsc2UsXG4gICAgICAgIGNoZWNrSXRlbVNlYXJjaDogZmFsc2UsXG4gICAgICAgIGNoZWNrTm9kZTogZmFsc2UsXG4gICAgICAgIGV4cGFuZDogZmFsc2VcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICBzb3VyY2Vfb2JqZWN0ID0ge30gYXMgUU1TVHJlZU5vZGU7XG4gICAgaXNTaG93U2VhcmNoQ29udHJvbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxuICAgICAgICBwcml2YXRlIGVsZVJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIHRyYW5zOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICAgICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHRyZWVEZXBhcnRtZW50U2VydmljZTogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIC8vIEluaXQgdHJlZSBkYXRhXG4gICAgICAgIHRoaXMuZ2V0RGF0YVRyZWUkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgaWNvblxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuXG4gICAgICAgIHRoaXMudHJhbnMuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnMuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5faGFuZGxlU2VhcmNoRXZlbnQoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlQWN0aXZlTm9kZUV2ZW50KCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCk7XG5cbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPyB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmRpc2FibGUoKSA6IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgICB9KSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdldEluZGV4VmlldyQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm5nVW5zdWJzY3JpYmUsIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSksXG4gICAgICAgICAgICB0YXAoXyA9PiB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRoaXMuY29uZmlnLmxhenkpKSxcbiAgICAgICAgICAgIGRlbGF5KDcwMCksXG4gICAgICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKF8gPT4gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyd2lzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKFt4MSwgeDJdKSA9PiB4MSA+IHgyICYmIHgyIDwgMTQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcChfID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldExvYWRpbmdNb3JlJC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVzdHJveUxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRNb3JlRXZlbnQuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSkpLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHRhcChfID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVMaXN0U2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICAgICAgdGhpcy5faW5pdFRyZWVEYXRhKCk7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy9hY3Rpb24gZm9yIGxhenkgY29uZmlnXG4gICAgICAgIHRoaXMuX2luaXRMaXN0U2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy5faGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcyk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG9uRGVzdHJveUxvYWRNb3JlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5uZXh0KCk7XG4gICAgICAgIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcbiAgICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIodGhpcy5fdHJhbnNmb3JtZXIsIHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlLCB0aGlzLl9nZXRDaGlsZCk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0ICYmIHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdC5sZW5ndGggPT09IDEgJiYgIXRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdFswXS5pZCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWcudHJlZURhdGEucHVzaCh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3RbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX3RyZWVEYXRhSW5wdXQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gXy5jbG9uZURlZXAodGhpcy5jb25maWcudHJlZURhdGEpXG5cbiAgICAgICAgaWYgKCFfdHJlZURhdGFJbnB1dC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoX3RyZWVEYXRhSW5wdXQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodHJlZURhdGEpO1xuICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZUxpc3RTZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB0cmVlTm9kZXMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubWFwKHggPT4gKHsgLi4ueCwgcGFyZW50SWQ6IHguZ3JvdXBJZCB9KSkpO1xuXG4gICAgICAgIHRoaXMuZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXM6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlTWFwVHJlZU5vZGUgPSAoaXRlbTogUU1TVHJlZU5vZGUsIGNsZWFyR3JvdXBJZDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoeCA9PiB4LmlkID09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgbm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgIG5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmVzdGVkTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogY2xlYXJHcm91cElkID8gbnVsbCA6IGl0ZW0uZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICAgICAgaXNHcm91cDogaXRlbS5pc0dyb3VwLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZENvdW50OiBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPz8gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyZWVOb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh7IC4uLnJlTWFwVHJlZU5vZGUoaXRlbSwgdHJ1ZSksIGNoaWxkcmVuOiBpdGVtLmNoaWxkcmVuLm1hcCh4ID0+IHJlTWFwVHJlZU5vZGUoeCkpIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubW92ZUxvY2F0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaCguLi5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ2FkZGVkJywgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRMaXN0U2VsZWN0ZWQoKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG4gICAgICAgIC8vQ29udmVydCBhcnJheSBzZWxlY3RlZExpc3QgaW50byBuZXN0ZWQgYXJyYXkgYXMgMSBsZXZlbCBmb3JtXG4gICAgICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0W2ldO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuZ2V0RGVzY2VuZGFudHNPZk5vZGUoaXRlbSkuZmlsdGVyKHggPT4geC5ncm91cElkID09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IHJlc3VsdDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHJlc3VsdC5zb21lKHgxID0+IHgxLmlkID09PSB4LmlkKSlcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpbmRleFJlbW92ZS5wdXNoKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLl9zZWxlY3RlZExpc3QuZmlsdGVyKChfLCBpbmRleCkgPT4gIWluZGV4UmVtb3ZlLmluY2x1ZGVzKGluZGV4KSk7XG5cbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKC4uLnRoaXMuX3NlbGVjdGVkTGlzdCk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHNlbGVjdGVkIGxpc3Qgd2hlbiBkYXRhIG5vZGVzIGNoYW5nZVxuICAgIHByaXZhdGUgX2hhbmRsZUFmdGVyRGF0YU5vZGVDaGFuZ2VFdmVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgIHRhcChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ucGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBlbGVtZW50LmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeDEgPT4geDEuaWQgPT09IGVsZW1lbnQuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5jaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ID0gZGVzY2VuZGFudHMuZmlsdGVyKHggPT4gaXRlbS5jaGlsZHJlbi5tYXAoeDEgPT4geDEuaWQpLmluY2x1ZGVzKHguaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlbVNlbGVjdC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0LmZvckVhY2goX2l0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9uZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKF9pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5jaGlsZHJlblswXS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLml0ZW1TZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCB1c2UgZm9yIGxhenkgbW9kZSwgZG8gc29tZSB0aGluZyBiZWZvcmUgaW5pdCBsaXN0IG5vZGUgc2VsZWN0ZWRcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGFzeW5jIG9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZChjYWxsYmFjaz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0cnVlKTtcbiAgICAgICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjaygpO1xuICAgICAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIC8vSGFuZGxlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZWRcbiAgICBwcml2YXRlIF9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uY2hhbmdlZFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGFkZGVkLCByZW1vdmVkIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tFeGlzdEluUmVzdWx0ID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSB8IFFNU1RyZWVOb2RlKTogYm9vbGVhbiA9PiB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpID4gLTE7XG4gICAgICAgICAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWROb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDaGlsZE5vZGU6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQdXNoaW5nQ2hpbGROb2Rlcy5lbWl0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxDaGlsZE5vZGUucHVzaCh7IC4uLm5vZGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZSA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXN0ZWROb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHggPT4geC5pc0dyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdEdyb3VwOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHNlbGVjdGVkTm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFleGlzdEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYXRFeGlzdEdyb3VwID0gdGhpcy5nZXROb2RlQnlJZChleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RHcm91cC5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBleGlzdEdyb3VwLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwUmVzdWx0ICYmICFncm91cFJlc3VsdC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gbmVzdGVkTm9kZS5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmlzR3JvdXAgPSBleGlzdEdyb3VwLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5jaGlsZHJlbi5wdXNoKG5lc3RlZE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1B1c2hpbmdOb2RlKGFsbENoaWxkTm9kZSwgZ3JvdXBSZXN1bHQuY2hpbGRyZW4/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBSZXN1bHRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5kaXNhYmxlZCB8fCAhdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUoZmxhdEV4aXN0R3JvdXApLm1hcCh4ID0+IHguaWQpLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tFeGlzdEluUmVzdWx0KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKG5lc3RlZE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuZ3JvdXBJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuY29uY2F0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBfbm9kZS5pZCkgJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUoX25vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gZ3JvdXAuY2hpbGRyZW4uZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShncm91cC5jaGlsZHJlbi5pbmRleE9mKF9pdGVtKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCd1cGRhdGVkJywgW2dyb3VwXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwVG9SZXN1bHRTZWFyY2goKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQubGVuZ3RoICYmIHRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHNlbGVjdGVkIG5vZGUgdG8gY2hlY2tlZCBub2RlIGluIHNlYXJjaFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kQWxsQ2hpbGRyZW4gPSAocGFyZW50SWQ6IHN0cmluZywgbm9kZXM6IGFueSk6IGFueVtdID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmROb2RlQnlJZChwYXJlbnRJZCwgbm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZE5vZGUgfHwgIWZvdW5kTm9kZT8uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlPy5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kTm9kZUJ5SWQgPSAoaWQ6IHN0cmluZywgbm9kZXM6IGFueSk6IGFueSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTm9kZSA9IGZpbmROb2RlQnlJZChpZCwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZE5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRMaXN0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkcmVuT2ZDaGVja2VkTm9kZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUgPSBmaW5kQWxsQ2hpbGRyZW4odGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWRbMF0uaWQsIHRoaXMuY3VycmVudFRyZWVEYXRhKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdFswXS5wYXJlbnRJZCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUudW5zaGlmdChzZWxlY3RlZExpc3RbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUuZmlsdGVyKCh2LCBpLCBhKSA9PiBhLmZpbmRJbmRleCh2MiA9PiBbJ2lkJywgJ3BhcmVudElkJ10uZXZlcnkoayA9PiB2MltrXSA9PT0gdltrXSkpID09PSBpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoc3RhdGU6ICdyZW1vdmVkJyB8ICd1cGRhdGVkJyB8ICdhZGRlZCcsIGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcbiAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cGRhdGVkJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIGFkZGVkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VhcmNoID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5DVVJSRU5UX1BBR0VTSVpFID0gcmVzdWx0LnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0U2VhcmNoU3ViamVjdCQubmV4dCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2F0aW9uOiBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBpdGVtLnBhdGg/Lm1hcCh4ID0+ICh7IG5hbWU6IHggfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gbm9kZSA/IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGFyZW50cy5sZW5ndGggPyBwYXJlbnRzLm1hcCgoeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKS5yZXZlcnNlKCkgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VhcmNoLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuY29uZmlnLmxhenkgJiYgdGhpcy5jb25maWcuY2hlY2tTZWFyY2hNYXBwaW5nVHJlZSAmJiAhbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyQ2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoV2hlbkhhbmRsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKCh2YWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGF5VGltaW5nID0gdGhpcy5nZXRJbmRleFZpZXckLnZhbHVlID09PSAxID8gNzAwIDogMDtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDApO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHZhbCkucGlwZShkZWxheShkZWxheVRpbWluZyksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKTtcbiAgICAgICAgfSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKHZhbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdGltZXIoMTUwMCk7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSAnLS0nO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xuICAgICAgICB0aGlzLmdldERhdGFUcmVlJC5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIHNldExvYWRpbmdTdGF0ZU5vZGUoaXNMb2FkaW5nOiBib29sZWFuLCBub2RlSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gaXNMb2FkaW5nO1xuICAgICAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICAgIH1cblxuICAgIG9uRXhwYW5kTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgaWYgKCFub2RlPy5leHBhbmRhYmxlKSByZXR1cm47XG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGVFdmVudC5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIG9uT3B0aW9uU2VhcmNoU2VsZWN0ZWQodmFsdWU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQodmFsdWUuaWQpO1xuICAgICAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcbiAgICB9XG5cbiAgICBvbkNoZWNrQWxsUm9vdFRyZWVOb2RlKCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUgfHwgIXRoaXMuY29uZmlnLmFjdGl2ZVNlbGVjdEFsbE5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmRpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4udGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZXBhcnRtZW50Um9vdHMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLmRpc2FibGVkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCh4ID0+IHRoaXMub25DaGVja05vZGUoeCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGVja05vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXAgJiYgdGhpcy5pc0NoZWNrQWxsKG5vZGUpIHx8ICFub2RlLmV4cGFuZGFibGUpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSAmJiB0aGlzLm9uQ2hlY2tOb2RlKGl0ZW0pKTtcbiAgICAgICAgICAgIGlmICghbmVzdGVkTm9kZS5pc0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1vdmVUb0xvY2F0aW9uKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRyYXZlcnNlID0gKG8sIGZuKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gbykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGZuLmFwcGx5KHRoaXMsIFtvLCBrXSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvW2tdICE9PSBudWxsICYmIHR5cGVvZiBvW2tdID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRyYXZlcnNlKG9ba10sIGZuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGxpY2Vfc291cmNlID0gKG9iaiwgcHJlZGljYXRlKSA9PlxuICAgICAgICAgICAgdHJhdmVyc2UoXG4gICAgICAgICAgICAgICAgb2JqLFxuICAgICAgICAgICAgICAgIChvLCBrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtX2luZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ba10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4ID0gb1trXS5maW5kSW5kZXgoKG8pID0+IHByZWRpY2F0ZShvLCBrKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCAhPT0gLTEgPyBvW2tdLnNwbGljZShtX2luZGV4LCAxKVswXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpbmRfdGFyZ2V0X2FycmF5ID0gKG9iaiwgcHJlZGljYXRlKSA9PlxuICAgICAgICAgICAgdHJhdmVyc2UoXG4gICAgICAgICAgICAgICAgb2JqLFxuICAgICAgICAgICAgICAgIChvLCBrKSA9PiAocHJlZGljYXRlKG8sIGspID8gby5jaGlsZHJlbiA6IGZhbHNlKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmaW5kUGFyZW50ID0gKG5vZGVJZCwgbm9kZXMpID0+IHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChub2RlLmlkID09PSBub2RlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGZpbmRQYXJlbnQobm9kZUlkLCBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaXN0ID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0KTtcblxuICAgICAgICBpZiAoIXNlbGVjdGVkTGlzdC5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZV9pZCA9IHNlbGVjdGVkTGlzdFswXS5pZDtcblxuICAgICAgICAvLyBzb3VyY2UgbXVzdCB0byBoYXZlIGZvciBtb3ZlbWVudFxuICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QgPSBzcGxpY2Vfc291cmNlKHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBzb3VyY2VfaWQpO1xuXG4gICAgICAgIGlmICghdGhpcy5zb3VyY2Vfb2JqZWN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VycmVudFRyZWVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY3VycmVudFRyZWVEYXRhW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmlkID09PSBzb3VyY2VfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuc3BsaWNlKGksIDEpOztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2NoaWxkJzpcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpPy5jaGlsZHJlbi51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUuaWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5ID0gZmluZF90YXJnZXRfYXJyYXkodGhpcy5jdXJyZW50VHJlZURhdGEsIChvYmopID0+IG9iaj8uaWQgPT09IG5vZGU/LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2FycmF5LnVuc2hpZnQodGhpcy5zb3VyY2Vfb2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3NpYmxpbmcnOlxuICAgICAgICAgICAgICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRUcmVlRGF0YS5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpZHgsIDAsIHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0X2FycmF5X3BhcmVudCA9IGZpbmRfdGFyZ2V0X2FycmF5KHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBwYXJlbnROb2RlPy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVfaWR4ID0gdGFyZ2V0X2FycmF5X3BhcmVudC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0LnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2FycmF5X3BhcmVudC5zcGxpY2Uobm9kZV9pZHggKyAxLCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgICAgICBjb25zdCBuZXdMb2NhdGlvbiA9IGZpbmRQYXJlbnQodGhpcy5zb3VyY2Vfb2JqZWN0LmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gbmV3TG9jYXRpb247XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgc2V0RGVzdGluYXRpb25Mb2NhdGlvbihub2RlLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IG5vZGUuaWQgJiYgaXRlbS5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XG4gICAgICAgIHRoaXMubW92ZVRvTG9jYXRpb24odHJlZU5vZGUsIHR5cGUpO1xuICAgIH1cblxuXG4gICAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBmaXJlRXZlbnRDaGVja05vZGU6IGJvb2xlYW4gPSB0cnVlKSB7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHJldHVybjtcblxuICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5kaXNhYmxlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGZpcmVFdmVudENoZWNrTm9kZSlcbiAgICAgICAgICAgIHRoaXMub25DaGVja05vZGVFdmVudC5lbWl0KG5vZGUpO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIG5vZGUuZXhwYW5kYWJsZSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbiAmJiBmaXJlRXZlbnRDaGVja05vZGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbjtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlVHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBub2RlSWQpO1xuICAgICAgICBjb25zdCByZVNlbGVjdFNlbGVjdGlvbiA9IChpZDogc3RyaW5nLCAuLi5wYXJhbXM6IFNlbGVjdGlvbk1vZGVsPGFueT5bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgcGFyYW1zLmZvckVhY2goc2VsZWN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9IGlkKTtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFub2RlVHJlZSkge1xuICAgICAgICAgICAgdGhpcy5leGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbe1xuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxOYW1lOiBpdGVtLmV4dGVybmFsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfSBhcyBRTVNUcmVlTm9kZV07XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgcmVTZWxlY3RTZWxlY3Rpb24obm9kZUlkLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZVRyZWUpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbeyAuLi5uZXN0ZWROb2RlLCBjaGlsZHJlbjogW10gfV07XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5yZXN1bHRTZWxlY3RlZF07XG4gICAgICAgICAgICByZVNlbGVjdFNlbGVjdGlvbihuZXN0ZWROb2RlLmlkLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFtdO1xuICAgIH1cblxuICAgIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRzID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICBpZiAocGFyZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChwYXJlbnQpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXhwYW5kTm9kZShwYXJlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgICAgIGlmICghZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XG4gICAgICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gICAgfVxuXG4gICAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gbm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XG4gICAgICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4ubm9kZXMpO1xuICAgIH1cblxuICAgIG9uRGVzZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gbm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XG4gICAgICAgIGlmICghbm9kZXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5ub2Rlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgYSB2YWx1ZSBiZXR3ZWVuIHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkLlxuICAgICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcbiAgICAgKi9cbiAgICBvblRvZ2dsZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgfVxuXG4gICAgaXNJbmRldGVybWluYXRlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XG4gICAgICAgIHJldHVybiAoISFjaGlsZFNlbGVjdGVkLmxlbmd0aCAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XG4gICAgfVxuXG4gICAgaXNDaGVja0FsbChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcbiAgICAgICAgcmV0dXJuIGxpc3RDaGVjay5ldmVyeShpdGVtID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlIGNoZWNrIG5vZGUgb2YgdHJlZVxuICAgICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBkbyBzb21ldGhpbmcgYmVmb3JlIGhhbmRsZSBjaGVjayBub2RlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBvbkJlZm9yZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGNhbGxiYWNrPzogKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IHRydWU7XG4gICAgICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2hlY2tOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG5cbiAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGV4aXN0ZWQgZ3JvdXBcbiAgICAgICAgICAgIGNvbnN0IGFsbFBhcmVuTm9kZUlkcyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5tYXAoeCA9PiB4LmlkKTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaXNHcm91cCAmJiBhbGxQYXJlbk5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXA/LmlkXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiAheC5kaXNhYmxlZCk7XG4gICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSAhZXhpc3RlZEdyb3VwICYmICEhY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfbm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh4KTtcbiAgICAgICAgICAgICAgICBfbm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwID8gZXhpc3RlZEdyb3VwLmlkIDogbm9kZS5pZDtcbiAgICAgICAgICAgICAgICBfbm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uY2hpbGRTZWxlY3RlZC5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmNoaWxkcmVuLm1hcCh4ID0+IHRoaXMucmVzZXROb2RlKHgpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX3NlbGVjdGVkSW5kZXggPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgIF9zZWxlY3RlZEluZGV4ID4gLTEgJiYgdGhpcy5fc2VsZWN0ZWRMaXN0LnNwbGljZShfc2VsZWN0ZWRJbmRleCwgMSk7XG4gICAgICAgIGNvbnN0IGRlc2VsZWN0Tm9kZXMgPSAodGhpcy5pc0luY2x1ZGVDaGlsZHJlbiB8fCBuZXN0ZWROb2RlLmlzR3JvdXApID8gY2hpbGRTZWxlY3RlZCA6IFtub2RlXTtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzZWxlY3ROb2Rlcyk7XG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIG5vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcbiAgICB9XG5cbiAgICBnZXRDaGlsZHJlblNlbGVjdGVkKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgbGlzdCBvZiB0aGUgZGF0YSBub2RlJ3Mgc3VidHJlZSBvZiBkZXNjZW5kZW50IGRhdGEgbm9kZXMuXG4gICAgICogQHBhcmFtIG5vZGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xuICAgICAgICBpZiAoIWZsYXROb2RlKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhmbGF0Tm9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFwVG9OZXN0ZWRMaXN0Tm9kZShmbGF0Tm9kZUxpc3Q6IFFNU0ZsYXROb2RlVHJlZVtdKTogUU1TVHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU1RyZWVOb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdFRyZWVOb2RlTWFwLmdldChub2RlKSB8fCB7fSBhcyBRTVNUcmVlTm9kZTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9GbGF0Tm9kZShub2RlOiBRTVNUcmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5nZXQobm9kZSk7XG4gICAgfVxuXG4gICAgZ2V0QWxsUGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XG4gICAgICAgIGNvbnN0IGxpc3RQYXJlbnQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGxpc3RQYXJlbnQucHVzaChwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpc3RQYXJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0UGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldExldmVsKG5vZGUpO1xuICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBnZXRJdGVtSWNvblR5cGUoaXRlbTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xuICAgICAgICBpZiAoISFpdGVtLml0ZW1JY29uU3ZnKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xuICAgICAgICBpZiAoISFpdGVtLml0ZW1JY29uKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUucGF0aDtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TY3JvbGxJbnRvTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICAgICAgaWYgKCFub2RlSWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KGZsYXROb2RlKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBmbGF0Tm9kZS5pZCk7XG4gICAgICAgIGlmICghdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdzbW9vdGgnKTtcbiAgICAgICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgICB9XG5cbiAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlIHx8IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWU/LnRyaW0oKSA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XG4gICAgICAgIHRoaXMub25TZWFyY2hFdmVudC5lbWl0KHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5jaGFuZ2VQYWdlKDApO1xuICAgICAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xuICAgIH1cblxuICAgIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xuICAgICAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgb25DbGlja1Jlc3VsdEl0ZW0oaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb05vZGUobm9kZS5pZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkJyZWFkQ3J1bWJJdGVtQ2xpY2soaXRlbTogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDApO1xuICAgICAgICAgICAgb2Yobm9kZS5pZCkucGlwZShkZWxheSg3MDApLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgICAgICBpZiAoaXRlbS5kaXNhYmxlZCB8fCB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC50b2dnbGUoaXRlbSk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4udGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPSBpdGVtLmlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGU6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSksXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25CZWZvcmVDaGVja0l0ZW1TZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBjYWxsYmFjaz86IChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGl0ZW0uaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XG4gICAgICAgIC8vIGhvbGQgc3RhdGUgYmVmb3JlIGNhbGwgbWV0aG9kIGNhbGxiYWNrIHRvIHByZXZlbnQgbG9zdCBpdCdzIHN0YXRlIHVuZXhwZWN0ZWRcbiAgICAgICAgY29uc3QgaXNTZWxlY3QgPSB0aGlzLmlzU2VsZWN0SXRlbVNlYXJjaChpdGVtLmlkKTtcbiAgICAgICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhpdGVtKTtcbiAgICAgICAgaXRlbS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSwgaXNTZWxlY3QpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYXN5bmMgb25CZWZvcmVDaGVja0FsbFNlYXJjaChjYWxsYmFjaz86IChkYXRhKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xuICAgICAgICBpZiAoISFjYWxsYmFjaylcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKHRoaXMucmVzdWx0U2VhcmNoKTtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuc29tZShub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpIHx8IHRoaXMuY29uZmlnLmxhenk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbWFwVG9SZXN1bHRTZWFyY2goKSB7XG4gICAgICAgIGlmICghIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcbiAgICAgICAgICAgIHRoaXMucmVzdWx0U2VhcmNoLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNFeGlzdEluUmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkPy5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHkgPT4geS5pZCA9PT0gaXRlbS5pZCkpO1xuICAgICAgICAgICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwsIHN0YXRlOiBib29sZWFuID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCkpIHtcbiAgICAgICAgaXRlbS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgaWYgKCEhY3VycmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY3VycmVudE5vZGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZTogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcCh0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoY3VycmVudE5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShpdGVtLmlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGUgPyAnYWRkJyA6ICdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGlzU2VsZWN0SXRlbVNlYXJjaChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZVNlbGVjdGVkTGlzdChzdGF0ZTogJ2FkZCcgfCAncmVtb3ZlJywgaXRlbTogUU1TVHJlZU5vZGUsIC4uLnNlbGVjdGVkTGlzdHM6IFFNU1RyZWVOb2RlW11bXSkge1xuICAgICAgICBpZiAoIWl0ZW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGVjdGVkTGlzdHMuZm9yRWFjaChzZWxlY3RlZExpc3QgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUV4aXN0ZWQgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmdyb3VwSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICFncm91cC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gaXRlbS5pZCkgJiYgZ3JvdXAuY2hpbGRyZW4ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAhaXRlbUV4aXN0ZWQgJiYgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXRlbUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmNoaWxkcmVuLnNvbWUoeDEgPT4geDEuaWQgPT09IGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBncm91cC5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3Quc3BsaWNlKHNlbGVjdGVkTGlzdC5pbmRleE9mKGl0ZW1FeGlzdGVkKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3Rpb25TZWFyY2ggPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gaXRlbUV4aXN0ZWQuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0aW9uU2VhcmNoICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW1TZWxlY3Rpb25TZWFyY2gpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvblNlbGVjdEFsbFNlYXJjaFJlc3VsdChjaGVja2VkKSB7XG4gICAgICAgIGNoZWNrZWQgPSAhY2hlY2tlZDtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5oYW5kbGVDaGVja0FsbEl0ZW1TZWFyY2gpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWFyY2hbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5TZWxlY3QgPSAoISF0cmVlTm9kZSB8fCB0aGlzLmNvbmZpZy5sYXp5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5TZWxlY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2l0ZW1TZWxlY3Rpb25zID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbVNlbGVjdGlvbnMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoLi4uX2l0ZW1TZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5IHx8ICF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2gpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGNoZWNrZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGVja0FsbEl0ZW1TZWFyY2hFdmVudC5lbWl0KGNoZWNrZWQpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0Rpc2FibGVDaGVjYm94QWxsU2VhcmNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRTZWFyY2ggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB4LmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xuICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMub25QYWdpbmdTZWFyY2hFdmVudC5lbWl0KHZhbCk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLm5leHQobm9kZUlkKTtcbiAgICB9XG5cbiAgICBzZXRJbmRleFZpZXcoaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoaW5kZXggPT09IDEgJiYgdGhpcy5jb25maWcucmVzZXRUb2dnbGVJbmNsdWRlQ2hpbGRXaGVuQ2hhbmdlVmlldykge1xuICAgICAgICAgICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0SW5kZXhWaWV3JC5uZXh0KGluZGV4KTtcbiAgICB9XG5cbiAgICBjYW5BY3RpdmVOb2RlRXh0ZXJuYWwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuICFhbGxQYXJlbnQgfHwgYWxsUGFyZW50LmV2ZXJ5KGl0ZW0gPT4gdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBnZXRIZWlnaHRTdHlsZVJlZk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZUVsZSA9IHRoaXMuZWxlUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLm1hdC10cmVlLW5vZGUjbWF0LW5vZGUtJHtub2RlSWR9YCkgYXMgRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIGAke25vZGVFbGU/LmNsaWVudEhlaWdodCB8fCAwfXB4YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZVN0b3JhZ2UoKTogUU1TRmxhdE5vZGVUcmVlIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZE5vZGVTdG9yYWdlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFBhZ2luYXRvclNpemUob3B0aW9uczogbnVtYmVyW10pIHtcbiAgICAgICAgdGhpcy5QQUdFX1NJWkVfT1BUSU9OID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4OiBudW1iZXIsIGl0ZW06IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIHVzZSBmb3IgbGF6eSBsb2FkIGNoaWxkcmVuIG9mIG5vZGVcbiAgICAgICAgICogQHBhcmFtIG5vZGUgbm9kZSB1cGRhdGUuIGlmIG5vZGUgaXMgbnVsbCBkYXRhIGF1dG8gaW5zZXJ0IGFzIHJvb3RzXG4gICAgICAgICAqIEBwYXJhbSBkYXRhIGxpc3QgY2hpbGRyZW4gdG8gdXBkYXRlIG5vZGUuXG4gICAgICAgICAqIEBwYXJhbSBtb2RlIGRlZmF1bHQgaXMgdXBkYXRlIHRoYXQgcmVwbGFjZSBjdXJyZW50IGxpc3QgY2hpbGRyZW4gYnkgbmV3IGxpc3QgY2hpbGRyZW4gLCBpZiBtb2RlID0gJ2luc2VydCcgd2lsbCBpbnNlcnQgbmV3IHZhbHVlcyB0byBsaXN0IGNoaWxkcmVuIGV4aXN0ZWQgYmVmb3JlLlxuICAgICovXG4gICAgdXBkYXRlQ2hpbGRPZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCBtb2RlOiAnaW5zZXJ0JyB8ICd1cGRhdGUnID0gJ3VwZGF0ZScpIHtcbiAgICAgICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgZGF0YU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSkuZmlsdGVyKHggPT4geC5wYXJlbnRJZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgIGlmICghbmVzdGVkTm9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdpbnNlcnQnOlxuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4ucHVzaCguLi5kYXRhTm9kZXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gZGF0YU5vZGVzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgICAgICBjb25zdCBfbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZS5pZCk7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhfbm9kZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWxlY3RlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWRbaV07XG4gICAgICAgICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoaXRlbS5pZCk7XG4gICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlc2NlbmRhbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBkZXNjZW5kYW50c1tqXTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUoY2hpbGQuaWQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KFtfbm9kZSwgLi4ubm9kZXNdKTtcbiAgICB9XG5cbiAgICAvL3JlLXNlbGVjdCB3aGVuIHVwZGF0ZSBjaGlsZHJlbiBvZiBub2RlXG4gICAgcHJpdmF0ZSBfcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgICAgIGlmICghbm9kZSB8fCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBleGlzdEluU2VsZWN0aW9uID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT0gbm9kZS5pZCk7XG4gICAgICAgIGlmIChleGlzdEluU2VsZWN0aW9uKVxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZXhpc3RJblNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcbiAgICB9XG5cbiAgICBjaGVja0xvYWRpbmdPZlBhcmVudChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgYWxsUGFyZW50ID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUGFyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBhbGxQYXJlbnRbaV07XG4gICAgICAgICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudC5pc0xvYWRpbmcgPSBkZXNjZW5kYW50cy5zb21lKHggPT4geC5pc0xvYWRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXRSb290T2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKCFhbGxQYXJlbnQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGFsbFBhcmVudC5wb3AoKTtcbiAgICB9XG5cbiAgICBhZGRSb290VHJlZShkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdKSB7XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xuICAgICAgICBpZiAoIWRhdGEubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB0cmVlTm9kZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKTtcbiAgICAgICAgLy8gcmUtY2hlY2sgcm9vdCB3YXMgZXhpc3RlZCBpbiB0cmVlXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJlZU5vZGVEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdHJlZU5vZGVEYXRhW2ldO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoISFub2RlICYmIG5vZGUuZXhwYW5kYWJsZSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja2VkU3RhdHVzTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTm9kZUluZm9ybWF0aW9uKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBsZXQgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgaWYgKCFuZXN0ZWROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XG4gICAgICAgIG5lc3RlZE5vZGUubmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgbmVzdGVkTm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgICAgIG5lc3RlZE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xuICAgICAgICBuZXN0ZWROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xuICAgICAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcbiAgICAgICAgbmVzdGVkTm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkID0gbm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkO1xuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdGVkUmVzdWx0RGF0YShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3Qgbm9kZVJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCgoeCkgPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgIGlmIChub2RlUmVzdWx0KSB7XG4gICAgICAgICAgICBub2RlUmVzdWx0LmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XG4gICAgICAgICAgICBub2RlUmVzdWx0LnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsbENoZWNrTm9kZU91dHNpZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcbiAgICAgICAgLy90aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudChhY3Rpb246ICgpID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy5sb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlzRGlzYWJsZWROb2RlID0gKG5vZGVJZDogc3RyaW5nKSA9PiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PSBub2RlSWQpPy5kaXNhYmxlZDtcblxuICAgIGlzUHVzaGluZ05vZGUoYWxsQ2hpbGROb2RlOiBRTVNUcmVlTm9kZVtdLCBjb3VudENoaWxkcmVuUHVzaGluZz86IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzUHVzaGluZ0NoaWxkTm9kZXMuZW1pdCh0cnVlKTtcbiAgICAgICAgaWYgKGFsbENoaWxkTm9kZT8ubGVuZ3RoID09IGNvdW50Q2hpbGRyZW5QdXNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHVzaGluZ0NoaWxkTm9kZXMuZW1pdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRTaG93U2VhcmNoQ29udHJvbChpc1Nob3dTZWFyY2hDb250cm9sOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNTaG93U2VhcmNoQ29udHJvbCA9IGlzU2hvd1NlYXJjaENvbnRyb2w7XG4gICAgfVxufVxuIl19
1350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxT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QUFLLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxtQkFBNEI7UUFDN0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ25ELENBQUM7OztZQXA2Q0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLDZsa0JBQXNEO2dCQUV0RCxVQUFVLEVBQUU7b0JBQ1IsdUJBQXVCO2lCQUMxQjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQXRDa0UsaUJBQWlCO1lBSzNFLFlBQVk7WUFPWixzQkFBc0I7WUFWdEIsZUFBZTtZQUZ5RSxVQUFVO1lBV2xHLHVCQUF1QjtZQWR2QixPQUFPO1lBRzZJLGdCQUFnQjtZQXFCcEssb0NBQW9DOzs7MkJBc0J4QyxLQUFLO3FCQUdMLEtBQUs7cUJBQ0wsS0FBSzsyQkFDTCxLQUFLOzRCQWdCTCxNQUFNO2tDQUNOLE1BQU07aUNBQ04sTUFBTTt1Q0FDTixNQUFNOytCQUNOLE1BQU07Z0NBQ04sTUFBTTs4QkFDTixNQUFNO3FDQUNOLE1BQU07d0NBQ04sTUFBTTtzQ0FDTixNQUFNO2tDQUNOLE1BQU07dUNBRU4sU0FBUyxTQUFDLHdCQUF3Qjs4QkFDbEMsU0FBUyxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgcGFpcndpc2UsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFFNU0ZsYXROb2RlVHJlZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TSWNvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uL2FwcC1pY29uL2ljb24tcmVnaXN0cnkuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2l6ZSwgUU1TUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLXBhZ2luYXRvcic7XG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcbmltcG9ydCB7IEFuaW1hdGlvblRyZWVEZXBhcnRtZW50IH0gZnJvbSAnLi9hbmltYXRpb24vYW5pbWF0aW9uJztcbmltcG9ydCB7IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bSB9IGZyb20gJy4vZW51bS9tb2RlLWRlcGFydG1lbnQtdHJlZS12aWV3LmVudW0nO1xuaW1wb3J0IHsgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXBhZ2luZy5tb2RlbCc7XG5pbXBvcnQgeyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iLCBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtc2VhcmNoLXJlc3VsdC5tb2RlbCc7XG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UgfSBmcm9tICcuL21vZGVsL3NlbGVjdGlvbi1jaGFuZ2UubW9kZWwnO1xuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUtZ2xvYmFsLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSUhhbmRsaW5nRXZlbnRMYXp5IHtcbiAgICBjaGVja0FsbFNlYXJjaDogYm9vbGVhbjtcbiAgICBjaGVja0l0ZW1TZWFyY2g6IGJvb2xlYW47XG4gICAgY2hlY2tOb2RlOiBib29sZWFuO1xuICAgIGV4cGFuZDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIEFuaW1hdGlvblRyZWVEZXBhcnRtZW50XG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuICAgIExBTkc6IGFueTtcbiAgICByZWFkb25seSBzcGlubmVyQXJyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xuICAgIGFyclNrZWxldG9uID0gbmV3IEFycmF5KDYpLmZpbGwoMCk7XG4gICAgQElucHV0KCkgc2V0IHJvd3NTa2VsZXRvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYXJyU2tlbGV0b24gPSBuZXcgQXJyYXkodmFsdWUpLmZpbGwoMCk7XG4gICAgfVxuICAgIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwdmgnO1xuICAgIEBJbnB1dCgpIGNvbmZpZzogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgPSBuZXcgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcoKTtcbiAgICBASW5wdXQoKSBtYXhXaWR0aE5vZGU6IG51bWJlciA9IDY1MDtcbiAgICBpc0luY2x1ZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGdldCBkZXBhcnRtZW50Um9vdHMoKSB7XG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT09IDApO1xuICAgIH1cblxuICAgIGdldCBpc0FsbERlcGFydG1lbnRTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICAgIH1cblxuICAgIGdldCBpc0luZGV0ZXJtaW5hdGVDaGVja2JveEFsbFRyZWUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBvblNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgQE91dHB1dCgpIG9uUGFnaW5nU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgb25WYWx1ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNUcmVlTm9kZVtdPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPj4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGVja05vZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TRmxhdE5vZGVUcmVlPigpO1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZE5vZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TRmxhdE5vZGVUcmVlPigpO1xuICAgIEBPdXRwdXQoKSBvbkxvYWRNb3JlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhdGU6IGJvb2xlYW4sIGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCB9PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoZWNrQWxsSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSB0b2dnbGVJbmNsdWRlQ2hpbGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgaXNQdXNoaW5nQ2hpbGROb2RlcyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSBjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcbiAgICBAVmlld0NoaWxkKCdwYWdpbmF0b3JTZWFyY2gnKSBwYWdpbmF0b3JTZWFyY2g6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcblxuICAgIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xuICAgIElURU1fU0laRSA9IDUwO1xuICAgIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgcmVzdWx0U2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgICByZWFkb25seSBnZXREYXRhVHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU1RyZWVOb2RlW10+KFtdKTtcbiAgICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcbiAgICByZXN1bHRTZWFyY2g6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbFtdID0gW107XG5cbiAgICBnZXQgY3VycmVudFRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhVHJlZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2goKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgICB9XG5cbiAgICBnZXQgaW5kZXRlcm1pbmF0ZVNlYXJjaFJlc3VsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcbiAgICB9XG5cbiAgICByZWFkb25seSBnZXRJbmRleFZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHJlYWRvbmx5IHNjcm9sbFRvTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICByZWFkb25seSBnZXRBY3RpdmVOb2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICctLSc7XG5cbiAgICByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSBQYWdpbmF0aW9uU2l6ZTtcbiAgICBQQUdFX1NJWkVfT1BUSU9OOiBudW1iZXJbXSA9IFs1LCAxMCwgMTUsIDIwLCAyNSwgMTAwXTtcbiAgICBDVVJSRU5UX1BBR0VTSVpFOiBudW1iZXIgPSAxMDtcbiAgICByZWFkb25seSBuZXN0ZWRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT4oKTtcbiAgICByZWFkb25seSBmbGF0VHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU0ZsYXROb2RlVHJlZSwgUU1TVHJlZU5vZGU+KCk7XG4gICAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFFNU0ZsYXROb2RlVHJlZT4odHJ1ZSk7XG4gICAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoID0gbmV3IFNlbGVjdGlvbk1vZGVsPERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbD4odHJ1ZSk7XG4gICAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+O1xuICAgIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XG4gICAgZGF0YVNvdXJjZTogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xuXG4gICAgZGF0YVNvdXJjZVRyZWVTZWFyY2g6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcbiAgICBwcml2YXRlIF9zZWxlY3RlZExpc3Q6IFFNU1RyZWVOb2RlW10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkID0gbmV3IFN1YmplY3Q8UU1TRmxhdE5vZGVUcmVlW10+KCk7XG5cbiAgICBmb3JtU2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgcmVhZG9ubHkgZ2V0TG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICByZWFkb25seSBnZXRMb2FkaW5nTW9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHJlYWRvbmx5IHVudGlsRGVzdHJveUxvYWRNb3JlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgcmVhZG9ubHkgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICByZWFkb25seSB0ZXh0U2VhcmNoU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICAgIGl0ZW1JY29uVHlwZSA9IEl0ZW1JY29uVHlwZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2Zvcm1lciA9IChub2RlOiBRTVNUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuY29udmVydFRvRmxhdE5vZGUobm9kZSkgfHwgbmV3IFFNU0ZsYXROb2RlVHJlZSgpO1xuICAgICAgICBmbGF0Tm9kZS5pZCA9IG5vZGUuaWQ7XG4gICAgICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgICAgIGZsYXROb2RlLmV4cGFuZGFibGUgPSAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8ICghIW5vZGUuY2hpbGRDb3VudCkgfHwgbm9kZS5leHBhbmRhYmxlO1xuICAgICAgICBmbGF0Tm9kZS5sZXZlbCA9IGxldmVsO1xuICAgICAgICBmbGF0Tm9kZS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgIGZsYXROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgICAgICBmbGF0Tm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XG4gICAgICAgIGZsYXROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICAgICAgZmxhdE5vZGUuaXNGaWxlID0gbm9kZS5pc0ZpbGU7XG4gICAgICAgIGZsYXROb2RlLmRpc2FibGVkID0gbm9kZS5kaXNhYmxlZDtcbiAgICAgICAgZmxhdE5vZGUuaXNHcm91cCA9IG5vZGUuaXNHcm91cDtcbiAgICAgICAgZmxhdE5vZGUuZ3JvdXBJZCA9IG5vZGUuZ3JvdXBJZDtcbiAgICAgICAgZmxhdE5vZGUuZXh0ZXJuYWxOYW1lID0gbm9kZS5leHRlcm5hbE5hbWU7XG4gICAgICAgIGZsYXROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XG4gICAgICAgIGZsYXROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xuICAgICAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XG4gICAgICAgIGZsYXROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XG4gICAgICAgIGZsYXROb2RlLmV4cGFuZEljb24gPSBub2RlLmV4cGFuZEljb247XG5cbiAgICAgICAgdGhpcy5mbGF0VHJlZU5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcbiAgICAgICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xuICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dldENoaWxkID0gKG5vZGU6IFFNU1RyZWVOb2RlKSA9PiBub2RlLmNoaWxkcmVuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xuICAgIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGluZ0xhenlPYmplY3Q6IElIYW5kbGluZ0V2ZW50TGF6eSA9IHtcbiAgICAgICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxuICAgICAgICBjaGVja0l0ZW1TZWFyY2g6IGZhbHNlLFxuICAgICAgICBjaGVja05vZGU6IGZhbHNlLFxuICAgICAgICBleHBhbmQ6IGZhbHNlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2NrSGFuZGxlU2VsZWN0aW9uQ2hhbmdlID0gZmFsc2U7XG4gICAgc291cmNlX29iamVjdCA9IHt9IGFzIFFNU1RyZWVOb2RlO1xuICAgIGlzU2hvd1NlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSBhcHBJY29uU2VydmljZTogUU1TSWNvblJlZ2lzdHJ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICAgICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyB0cmFuczogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSB0cmVlRGVwYXJ0bWVudFNlcnZpY2U6IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZVxuICAgICkge1xuICAgICAgICAvLyBJbml0IHRyZWUgZGF0YVxuICAgICAgICB0aGlzLmdldERhdGFUcmVlJFxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhU291cmNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGljb25cbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcblxuICAgICAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zLmdldE9iamVjdExhbmcocmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2hhbmRsZVNlYXJjaEV2ZW50KCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpO1xuICAgICAgICB0aGlzLl9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZyQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID8gdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmVuYWJsZSgpO1xuICAgICAgICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRJbmRleFZpZXckLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwobWVyZ2UodGhpcy5uZ1Vuc3Vic2NyaWJlLCB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCkpLFxuICAgICAgICAgICAgdGFwKF8gPT4gdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0aGlzLmNvbmZpZy5sYXp5KSksXG4gICAgICAgICAgICBkZWxheSg3MDApLFxuICAgICAgICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IDApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChfID0+IHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChbeDEsIHgyXSkgPT4geDEgPiB4MiAmJiB4MiA8IDE0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSgyMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRMb2FkaW5nTW9yZSQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlc3Ryb3lMb2FkTW9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkTW9yZUV2ZW50LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCB0YXAoXyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9KSkuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuID0gdGhpcy5jb25maWcuaXNJbmNsdWRlQ2hpbGRyZW47XG4gICAgICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vYWN0aW9uIGZvciBsYXp5IGNvbmZpZ1xuICAgICAgICB0aGlzLl9pbml0TGlzdFNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUFmdGVyRGF0YU5vZGVDaGFuZ2VFdmVudCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQodGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvbkRlc3Ryb3lMb2FkTW9yZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQubmV4dCgpO1xuICAgICAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRUcmVlRGF0YSgpIHtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XG4gICAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKHRoaXMuX3RyYW5zZm9ybWVyLCB0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSwgdGhpcy5fZ2V0Q2hpbGQpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCAmJiB0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoID09PSAxICYmICF0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3RbMF0uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnRyZWVEYXRhLnB1c2godGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0WzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IF90cmVlRGF0YUlucHV0OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnRyZWVEYXRhKVxuXG4gICAgICAgIGlmICghX3RyZWVEYXRhSW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKF90cmVlRGF0YUlucHV0KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRyZWVEYXRhKTtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVMaXN0U2VsZWN0ZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdHJlZU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEodGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lm1hcCh4ID0+ICh7IC4uLngsIHBhcmVudElkOiB4Lmdyb3VwSWQgfSkpKTtcblxuICAgICAgICB0aGlzLmV4ZWNXaXRob3V0RW1pdE5vZGVDaGFuZ2VFdmVudCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICAgICAgICBjb25zdCByZU1hcFRyZWVOb2RlID0gKGl0ZW06IFFNU1RyZWVOb2RlLCBjbGVhckdyb3VwSWQ6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIG5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICBub2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm5lc3RlZE5vZGUsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwSWQ6IGNsZWFyR3JvdXBJZCA/IG51bGwgOiBpdGVtLmdyb3VwSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzR3JvdXA6IGl0ZW0uaXNHcm91cCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDb3VudDogbmVzdGVkTm9kZS5jaGlsZENvdW50ID8/IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cmVlTm9kZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCh4ID0+IHguaWQgPT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goeyAuLi5yZU1hcFRyZWVOb2RlKGl0ZW0sIHRydWUpLCBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbi5tYXAoeCA9PiByZU1hcFRyZWVOb2RlKHgpKSB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLm1vdmVMb2NhdGlvbk1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4uc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0TGlzdFNlbGVjdGVkKCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xuICAgICAgICAvL0NvbnZlcnQgYXJyYXkgc2VsZWN0ZWRMaXN0IGludG8gbmVzdGVkIGFycmF5IGFzIDEgbGV2ZWwgZm9ybVxuICAgICAgICBjb25zdCBpbmRleFJlbW92ZSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pLmZpbHRlcih4ID0+IHguZ3JvdXBJZCA9PSBpdGVtLmlkKTtcbiAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4gPSByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiByZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaW5kZXhSZW1vdmUucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbHRlcigoXywgaW5kZXgpID0+ICFpbmRleFJlbW92ZS5pbmNsdWRlcyhpbmRleCkpO1xuXG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaCguLi50aGlzLl9zZWxlY3RlZExpc3QpO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZSBzZWxlY3RlZCBsaXN0IHdoZW4gZGF0YSBub2RlcyBjaGFuZ2VcbiAgICBwcml2YXRlIF9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICB0YXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLnBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gZWxlbWVudC5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHgxID0+IHgxLmlkID09PSBlbGVtZW50LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNlbGVjdCA9IGRlc2NlbmRhbnRzLmZpbHRlcih4ID0+IGl0ZW0uY2hpbGRyZW4ubWFwKHgxID0+IHgxLmlkKS5pbmNsdWRlcyh4LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1TZWxlY3QubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdC5mb3JFYWNoKF9pdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShfaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uY2hpbGRyZW5bMF0uZ3JvdXBJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5pdGVtU2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgdXNlIGZvciBsYXp5IG1vZGUsIGRvIHNvbWUgdGhpbmcgYmVmb3JlIGluaXQgbGlzdCBub2RlIHNlbGVjdGVkXG4gICAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBvbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQoY2FsbGJhY2s/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XG4gICAgICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2soKTtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvL0hhbmRsZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VkXG4gICAgcHJpdmF0ZSBfaGFuZGxlSXRlbVNlbGVjdGlvbkNoYW5nZWQoKSB7XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmNoYW5nZWRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBhZGRlZCwgcmVtb3ZlZCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRXhpc3RJblJlc3VsdCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUgfCBRTVNUcmVlTm9kZSk6IGJvb2xlYW4gPT4gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKSA+IC0xO1xuICAgICAgICAgICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTm9kZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsQ2hpbGROb2RlOiBRTVNUcmVlTm9kZVtdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUHVzaGluZ0NoaWxkTm9kZXMuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ2hpbGROb2RlLnB1c2goeyAuLi5ub2RlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZTogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcCh0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE5vZGUgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmVzdGVkTm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCh4ID0+IHguaXNHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RHcm91cDogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcChzZWxlY3RlZE5vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhZXhpc3RHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbGF0RXhpc3RHcm91cCA9IHRoaXMuZ2V0Tm9kZUJ5SWQoZXhpc3RHcm91cC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0R3JvdXAuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVzdWx0ID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gZXhpc3RHcm91cC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cFJlc3VsdCAmJiAhZ3JvdXBSZXN1bHQuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5pc0dyb3VwID0gZXhpc3RHcm91cC5pc0dyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuY2hpbGRyZW4ucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNQdXNoaW5nTm9kZShhbGxDaGlsZE5vZGUsIGdyb3VwUmVzdWx0LmNoaWxkcmVuPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCd1cGRhdGVkJywgW2dyb3VwUmVzdWx0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQgfHwgIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrRXhpc3RJblJlc3VsdChub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCBbbmVzdGVkTm9kZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmdyb3VwSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmNvbmNhdChub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gX25vZGUuaWQpICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKF9ub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoZ3JvdXAuY2hpbGRyZW4uaW5kZXhPZihfaXRlbSksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmxlbmd0aCAmJiB0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBzZWxlY3RlZCBub2RlIHRvIGNoZWNrZWQgbm9kZSBpbiBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZEFsbENoaWxkcmVuID0gKHBhcmVudElkOiBzdHJpbmcsIG5vZGVzOiBhbnkpOiBhbnlbXSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE5vZGUgPSBmaW5kTm9kZUJ5SWQocGFyZW50SWQsIG5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmROb2RlIHx8ICFmb3VuZE5vZGU/LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kTm9kZT8uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZE5vZGVCeUlkID0gKGlkOiBzdHJpbmcsIG5vZGVzOiBhbnkpOiBhbnkgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZE5vZGUgPSBmaW5kTm9kZUJ5SWQoaWQsIG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmROb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbk9mQ2hlY2tlZE5vZGUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5PZkNoZWNrZWROb2RlID0gZmluZEFsbENoaWxkcmVuKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkWzBdLmlkLCB0aGlzLmN1cnJlbnRUcmVlRGF0YSk7XG5cblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3RbMF0ucGFyZW50SWQgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZFswXS5pZDtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5PZkNoZWNrZWROb2RlLnVuc2hpZnQoc2VsZWN0ZWRMaXN0WzBdKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gY2hpbGRyZW5PZkNoZWNrZWROb2RlLmZpbHRlcigodiwgaSwgYSkgPT4gYS5maW5kSW5kZXgodjIgPT4gWydpZCcsICdwYXJlbnRJZCddLmV2ZXJ5KGsgPT4gdjJba10gPT09IHZba10pKSA9PT0gaSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KHN0YXRlOiAncmVtb3ZlZCcgfCAndXBkYXRlZCcgfCAnYWRkZWQnLCBkYXRhOiBRTVNUcmVlTm9kZVtdKSB7XG4gICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndXBkYXRlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhZGRlZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZDogW10sXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZVNlYXJjaEV2ZW50KCkge1xuICAgICAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaCA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dFNlYXJjaFN1YmplY3QkLm5leHQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsb2NhdGlvbjogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYltdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gaXRlbS5wYXRoPy5tYXAoeCA9PiAoeyBuYW1lOiB4IH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IG5vZGUgPyB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhcmVudHMubGVuZ3RoID8gcGFyZW50cy5tYXAoKHgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkucmV2ZXJzZSgpIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8ICF0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMuY29uZmlnLmNoZWNrU2VhcmNoTWFwcGluZ1RyZWUgJiYgIW5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5jbGVhckNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaFdoZW5IYW5kbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCgodmFsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWxheVRpbWluZyA9IHRoaXMuZ2V0SW5kZXhWaWV3JC52YWx1ZSA9PT0gMSA/IDcwMCA6IDA7XG4gICAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgICAgICAgIHJldHVybiBvZih2YWwpLnBpcGUoZGVsYXkoZGVsYXlUaW1pbmcpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSk7XG4gICAgICAgIH0pKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCh2YWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVyKDE1MDApO1xuICAgICAgICB9KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gJy0tJztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGFUcmVlKGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcbiAgICAgICAgdGhpcy5nZXREYXRhVHJlZSQubmV4dChkYXRhKTtcbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nU3RhdGVOb2RlKGlzTG9hZGluZzogYm9vbGVhbiwgbm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcbiAgICAgICAgaWYgKCFub2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBub2RlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcbiAgICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcbiAgICB9XG5cbiAgICBvbkV4cGFuZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGlmICghbm9kZT8uZXhwYW5kYWJsZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxhenkgJiYgdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25FeHBhbmROb2RlRXZlbnQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICBvbk9wdGlvblNlYXJjaFNlbGVjdGVkKHZhbHVlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKHZhbHVlLmlkKTtcbiAgICAgICAgaWYgKCFmbGF0Tm9kZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShmbGF0Tm9kZS5pZCk7XG4gICAgfVxuXG4gICAgb25DaGVja0FsbFJvb3RUcmVlTm9kZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lIHx8ICF0aGlzLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxOb2RlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLnRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+ICF4LmRpc2FibGVkKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudFJvb3RzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5kaXNhYmxlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZSh4KSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tOb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwICYmIHRoaXMuaXNDaGVja0FsbChub2RlKSB8fCAhbm9kZS5leHBhbmRhYmxlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XG4gICAgICAgICAgICBpZiAoIW5lc3RlZE5vZGUuaXNHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGVja05vZGUobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtb3ZlVG9Mb2NhdGlvbihub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIHR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0cmF2ZXJzZSA9IChvLCBmbikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIG8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBmbi5hcHBseSh0aGlzLCBbbywga10pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1trXSA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0cmF2ZXJzZShvW2tdLCBmbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BsaWNlX3NvdXJjZSA9IChvYmosIHByZWRpY2F0ZSkgPT5cbiAgICAgICAgICAgIHRyYXZlcnNlKFxuICAgICAgICAgICAgICAgIG9iaixcbiAgICAgICAgICAgICAgICAobywgaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbV9pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2tdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCA9IG9ba10uZmluZEluZGV4KChvKSA9PiBwcmVkaWNhdGUobywgaykpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggIT09IC0xID8gb1trXS5zcGxpY2UobV9pbmRleCwgMSlbMF0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmaW5kX3RhcmdldF9hcnJheSA9IChvYmosIHByZWRpY2F0ZSkgPT5cbiAgICAgICAgICAgIHRyYXZlcnNlKFxuICAgICAgICAgICAgICAgIG9iaixcbiAgICAgICAgICAgICAgICAobywgaykgPT4gKHByZWRpY2F0ZShvLCBrKSA/IG8uY2hpbGRyZW4gOiBmYWxzZSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmluZFBhcmVudCA9IChub2RlSWQsIG5vZGVzKSA9PiB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5pZCA9PT0gbm9kZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBmaW5kUGFyZW50KG5vZGVJZCwgbm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZExpc3QubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuZ2V0UGFyZW50Tm9kZShub2RlKTtcblxuICAgICAgICBjb25zdCBzb3VyY2VfaWQgPSBzZWxlY3RlZExpc3RbMF0uaWQ7XG5cbiAgICAgICAgLy8gc291cmNlIG11c3QgdG8gaGF2ZSBmb3IgbW92ZW1lbnRcbiAgICAgICAgdGhpcy5zb3VyY2Vfb2JqZWN0ID0gc3BsaWNlX3NvdXJjZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gc291cmNlX2lkKTtcblxuICAgICAgICBpZiAoIXRoaXMuc291cmNlX29iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1cnJlbnRUcmVlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmN1cnJlbnRUcmVlRGF0YVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZCA9PT0gc291cmNlX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnNwbGljZShpLCAxKTs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdjaGlsZCc6XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKT8uY2hpbGRyZW4udW5zaGlmdCh0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLmlkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldF9hcnJheSA9IGZpbmRfdGFyZ2V0X2FycmF5KHRoaXMuY3VycmVudFRyZWVEYXRhLCAob2JqKSA9PiBvYmo/LmlkID09PSBub2RlPy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUuaWQ7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldF9hcnJheS51bnNoaWZ0KHRoaXMuc291cmNlX29iamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzaWJsaW5nJzpcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5jdXJyZW50VHJlZURhdGEuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZV9vYmplY3QucGFyZW50SWQgPSBub2RlLnBhcmVudElkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUcmVlRGF0YS5zcGxpY2UoaWR4LCAwLCB0aGlzLnNvdXJjZV9vYmplY3QpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldF9hcnJheV9wYXJlbnQgPSBmaW5kX3RhcmdldF9hcnJheSh0aGlzLmN1cnJlbnRUcmVlRGF0YSwgKG9iaikgPT4gb2JqPy5pZCA9PT0gcGFyZW50Tm9kZT8uaWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlX2lkeCA9IHRhcmdldF9hcnJheV9wYXJlbnQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlX29iamVjdC5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldF9hcnJheV9wYXJlbnQuc3BsaWNlKG5vZGVfaWR4ICsgMSwgMCwgdGhpcy5zb3VyY2Vfb2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgICAgY29uc3QgbmV3TG9jYXRpb24gPSBmaW5kUGFyZW50KHRoaXMuc291cmNlX29iamVjdC5pZCwgdGhpcy5jdXJyZW50VHJlZURhdGEpO1xuXG4gICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IG5ld0xvY2F0aW9uO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHNldERlc3RpbmF0aW9uTG9jYXRpb24obm9kZSwgdHlwZSkge1xuICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBub2RlLmlkICYmIGl0ZW0ucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpO1xuICAgICAgICB0aGlzLm1vdmVUb0xvY2F0aW9uKHRyZWVOb2RlLCB0eXBlKTtcbiAgICB9XG5cblxuICAgIG9uQ2hlY2tOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZmlyZUV2ZW50Q2hlY2tOb2RlOiBib29sZWFuID0gdHJ1ZSkge1xuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tb3ZlTG9jYXRpb25Nb2RlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUuZGlzYWJsZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChmaXJlRXZlbnRDaGVja05vZGUpXG4gICAgICAgICAgICB0aGlzLm9uQ2hlY2tOb2RlRXZlbnQuZW1pdChub2RlKTtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShub2RlLmlkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW47XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHguZXhwYW5kYWJsZSAmJiAheC5tYXJrZWRHZXRDaGlsZHJlbik7XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKHggPT4geC5pc0xvYWRpbmcgPSB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9oYW5kbGVTZWxlY3RPbmUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgbm9kZVRyZWUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gbm9kZUlkKTtcbiAgICAgICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoaWQ6IHN0cmluZywgLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPSBpZCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmRlc2VsZWN0KC4uLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghbm9kZVRyZWUpIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY1dpdGhvdXRFbWl0Tm9kZUNoYW5nZUV2ZW50KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3tcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsTmFtZTogaXRlbS5leHRlcm5hbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH0gYXMgUU1TVHJlZU5vZGVdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnJlc3VsdFNlbGVjdGVkXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgICAgICAgICAgICAgIHJlU2VsZWN0U2VsZWN0aW9uKG5vZGVJZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xuICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKSk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3sgLi4ubmVzdGVkTm9kZSwgY2hpbGRyZW46IFtdIH1dO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xuICAgICAgICAgICAgcmVTZWxlY3RTZWxlY3Rpb24obmVzdGVkTm9kZS5pZCwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcbiAgICB9XG5cbiAgICBvbkV4cGFuZEFsbFBhcmVudChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKHBhcmVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50KSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkV4cGFuZE5vZGUocGFyZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgICAgICBpZiAoIWZsYXROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xuICAgICAgICAgICAgaWYgKCFpdGVtKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkTGlzdCgncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgICAgICBpZiAoIW5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLm5vZGVzKTtcbiAgICB9XG5cbiAgICBvbkRlc2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xuICAgICAgICBpZiAoIW5vZGVzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4ubm9kZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIGEgdmFsdWUgYmV0d2VlbiBzZWxlY3RlZCBhbmQgZGVzZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0gbm9kZUlkIDppZCBvZiBub2RlXG4gICAgICovXG4gICAgb25Ub2dnbGVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xuICAgIH1cblxuICAgIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgY2hpbGRTZWxlY3RlZCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcihpdGVtID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpO1xuICAgICAgICByZXR1cm4gKCEhY2hpbGRTZWxlY3RlZC5sZW5ndGggJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xuICAgIH1cblxuICAgIGlzQ2hlY2tBbGwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGNvbnN0IGxpc3RDaGVjayA9IFsuLi50aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKSwgbm9kZV07XG4gICAgICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZSBjaGVjayBub2RlIG9mIHRyZWVcbiAgICAgKiBAcGFyYW0gbm9kZSBub2RlIG9mIHRyZWVcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgZG8gc29tZXRoaW5nIGJlZm9yZSBoYW5kbGUgY2hlY2sgbm9kZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgb25CZWZvcmVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBjYWxsYmFjaz86IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUgPSB0cnVlO1xuICAgICAgICBpZiAoISFjYWxsYmFjaylcbiAgICAgICAgICAgIGF3YWl0IGNhbGxiYWNrKG5vZGUpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhhbmRsZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0ZWQobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuXG4gICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXG4gICAgICAgICAgICBjb25zdCBhbGxQYXJlbk5vZGVJZHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkubWFwKHggPT4geC5pZCk7XG4gICAgICAgICAgICBjb25zdCBleGlzdGVkR3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlzR3JvdXAgJiYgYWxsUGFyZW5Ob2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwPy5pZFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4gIXguZGlzYWJsZWQpO1xuICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gIWV4aXN0ZWRHcm91cCAmJiAhIWNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoeCk7XG4gICAgICAgICAgICAgICAgX25vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cCA/IGV4aXN0ZWRHcm91cC5pZCA6IG5vZGUuaWQ7XG4gICAgICAgICAgICAgICAgX25vZGUuaXNHcm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmNoaWxkU2VsZWN0ZWQubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbi5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9zZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICBfc2VsZWN0ZWRJbmRleCA+IC0xICYmIHRoaXMuX3NlbGVjdGVkTGlzdC5zcGxpY2UoX3NlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgICBjb25zdCBkZXNlbGVjdE5vZGVzID0gKHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gfHwgbmVzdGVkTm9kZS5pc0dyb3VwKSA/IGNoaWxkU2VsZWN0ZWQgOiBbbm9kZV07XG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2VsZWN0Tm9kZXMpO1xuICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSlcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBub2RlLmlzR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIHJldHVybiBub2RlICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRyZW5TZWxlY3RlZChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBhIGxpc3Qgb2YgdGhlIGRhdGEgbm9kZSdzIHN1YnRyZWUgb2YgZGVzY2VuZGVudCBkYXRhIG5vZGVzLlxuICAgICAqIEBwYXJhbSBub2RlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcbiAgICAgICAgaWYgKCFmbGF0Tm9kZSlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoZmxhdE5vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gZmxhdE5vZGVMaXN0Lm1hcChpdGVtID0+IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKSk7XG4gICAgfVxuXG4gICAgY29udmVydFRvTmVzdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNUcmVlTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXRUcmVlTm9kZU1hcC5nZXQobm9kZSkgfHwge30gYXMgUU1TVHJlZU5vZGU7XG4gICAgfVxuXG4gICAgY29udmVydFRvRmxhdE5vZGUobm9kZTogUU1TVHJlZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuZ2V0KG5vZGUpO1xuICAgIH1cblxuICAgIGdldEFsbFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xuICAgICAgICBjb25zdCBsaXN0UGFyZW50OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaXN0UGFyZW50O1xuICAgIH1cblxuICAgIGdldFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcbiAgICAgICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHJldHVybjtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBpZiAoISFpdGVtLml0ZW1NYXRJY29uKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubmFtZTtcbiAgICAgICAgaWYgKCEhaXRlbS5pdGVtSWNvblN2ZykgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcbiAgICAgICAgaWYgKCEhaXRlbS5pdGVtSWNvbikgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnBhdGg7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2Nyb2xsSW50b05vZGUobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XG4gICAgICAgIGlmICghbm9kZUlkKSByZXR1cm47XG4gICAgICAgIHRoaXMub25FeHBhbmROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gZmxhdE5vZGUuaWQpO1xuICAgICAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KGluZGV4LCAnc21vb3RoJyk7XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2goKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSB8fCB0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlPy50cmltKCkgPT09ICcnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoRXZlbnQuZW1pdCh0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRvclNlYXJjaClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JTZWFyY2guY2hhbmdlUGFnZSgwKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcbiAgICB9XG5cbiAgICBzZXRSZXN1bHRTZWFyY2goZGF0YTogUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4pIHtcbiAgICAgICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JC5uZXh0KGRhdGEpO1xuICAgIH1cblxuICAgIG9uQ2xpY2tSZXN1bHRJdGVtKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlKG5vZGUuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CcmVhZENydW1iSXRlbUNsaWNrKGl0ZW06IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcbiAgICAgICAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoZWNrSXRlbVNlYXJjaFJlc3VsdChpdGVtOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWwpIHtcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgdGhpcy5jb25maWcubW92ZUxvY2F0aW9uTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gudG9nZ2xlKGl0ZW0pO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLnRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaXRlbS5pZCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGVja0l0ZW1TZWFyY2hFdmVudC5lbWl0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xuICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VFdmVudC5lbWl0KHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIGFzeW5jIG9uQmVmb3JlQ2hlY2tJdGVtU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgY2FsbGJhY2s/OiAoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBpdGVtLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0l0ZW1TZWFyY2ggPSB0cnVlO1xuICAgICAgICAvLyBob2xkIHN0YXRlIGJlZm9yZSBjYWxsIG1ldGhvZCBjYWxsYmFjayB0byBwcmV2ZW50IGxvc3QgaXQncyBzdGF0ZSB1bmV4cGVjdGVkXG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ID0gdGhpcy5pc1NlbGVjdEl0ZW1TZWFyY2goaXRlbS5pZCk7XG4gICAgICAgIGlmICghIWNhbGxiYWNrKVxuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2soaXRlbSk7XG4gICAgICAgIGl0ZW0uaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIG9uQmVmb3JlQ2hlY2tBbGxTZWFyY2goY2FsbGJhY2s/OiAoZGF0YSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgaWYgKCEhY2FsbGJhY2spXG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayh0aGlzLnJlc3VsdFNlYXJjaCk7XG4gICAgICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5IYW5kbGVJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xuICAgICAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKSB8fCB0aGlzLmNvbmZpZy5sYXp5O1xuICAgIH1cblxuICAgIHByaXZhdGUgX21hcFRvUmVzdWx0U2VhcmNoKCkge1xuICAgICAgICBpZiAoISF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID0gdGhpcy5yZXN1bHRTZWxlY3RlZD8uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh5ID0+IHkuaWQgPT09IGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQ/LnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBzdGF0ZTogYm9vbGVhbiA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpKSB7XG4gICAgICAgIGl0ZW0uaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICghIWN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShjdXJyZW50Tm9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoaXRlbS5pZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlID8gJ2FkZCcgOiAncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdEl0ZW1TZWFyY2goaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuc29tZSh4ID0+IHguaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGU6ICdhZGQnIHwgJ3JlbW92ZScsIGl0ZW06IFFNU1RyZWVOb2RlLCAuLi5zZWxlY3RlZExpc3RzOiBRTVNUcmVlTm9kZVtdW10pIHtcbiAgICAgICAgaWYgKCFpdGVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWxlY3RlZExpc3RzLmZvckVhY2goc2VsZWN0ZWRMaXN0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1FeGlzdGVkID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5ncm91cElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5ncm91cElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAgJiYgIWl0ZW1FeGlzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIWl0ZW1FeGlzdGVkICYmIHNlbGVjdGVkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdyZW1vdmUnOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5jaGlsZHJlbi5zb21lKHgxID0+IHgxLmlkID09PSBpdGVtLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdyb3VwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnNwbGljZShzZWxlY3RlZExpc3QuaW5kZXhPZihpdGVtRXhpc3RlZCksIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0aW9uU2VhcmNoID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGl0ZW1FeGlzdGVkLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGlvblNlYXJjaCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdChpdGVtU2VsZWN0aW9uU2VhcmNoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgb25TZWxlY3RBbGxTZWFyY2hSZXN1bHQoY2hlY2tlZCkge1xuICAgICAgICBjaGVja2VkID0gIWNoZWNrZWQ7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5jb25maWcuaGFuZGxlQ2hlY2tBbGxJdGVtU2VhcmNoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FuU2VsZWN0ID0gKCEhdHJlZU5vZGUgfHwgdGhpcy5jb25maWcubGF6eSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FuU2VsZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pdGVtU2VsZWN0aW9ucyA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2l0ZW1TZWxlY3Rpb25zLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLl9pdGVtU2VsZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSB8fCAhdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtLCBjaGVja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQuZW1pdChjaGVja2VkKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNEaXNhYmxlQ2hlY2JveEFsbFNlYXJjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoICYmIHRoaXMucmVzdWx0U2VhcmNoLmV2ZXJ5KHggPT4geC5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgb25QYWdpbmdTZWFyY2hSZXN1bHQodmFsOiBQYWdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLm9uUGFnaW5nU2VhcmNoRXZlbnQuZW1pdCh2YWwpO1xuICAgIH1cblxuICAgIHNjcm9sbFRvTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNjcm9sbFRvTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XG4gICAgfVxuXG4gICAgc2V0SW5kZXhWaWV3KGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAxICYmIHRoaXMuY29uZmlnLnJlc2V0VG9nZ2xlSW5jbHVkZUNoaWxkV2hlbkNoYW5nZVZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEluZGV4VmlldyQubmV4dChpbmRleCk7XG4gICAgfVxuXG4gICAgY2FuQWN0aXZlTm9kZUV4dGVybmFsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIHJldHVybiAhYWxsUGFyZW50IHx8IGFsbFBhcmVudC5ldmVyeShpdGVtID0+IHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSk7XG4gICAgfVxuXG4gICAgZ2V0SGVpZ2h0U3R5bGVSZWZOb2RlKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5vZGVFbGUgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5tYXQtdHJlZS1ub2RlI21hdC1ub2RlLSR7bm9kZUlkfWApIGFzIEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBgJHtub2RlRWxlPy5jbGllbnRIZWlnaHQgfHwgMH1weGA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWxlY3RlZE5vZGUnKSkgYXMgUU1TRmxhdE5vZGVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgdGhpcy5pc0luY2x1ZGVDaGlsZHJlbiAmJiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0ZWROb2RlJywgSlNPTi5zdHJpbmdpZnkobm9kZSkpO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRQYWdpbmF0b3JTaXplKG9wdGlvbnM6IG51bWJlcltdKSB7XG4gICAgICAgIHRoaXMuUEFHRV9TSVpFX09QVElPTiA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgICAgICogVGhpcyBmdW5jdGlvbiB1c2UgZm9yIGxhenkgbG9hZCBjaGlsZHJlbiBvZiBub2RlXG4gICAgICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdXBkYXRlLiBpZiBub2RlIGlzIG51bGwgZGF0YSBhdXRvIGluc2VydCBhcyByb290c1xuICAgICAgICAgKiBAcGFyYW0gZGF0YSBsaXN0IGNoaWxkcmVuIHRvIHVwZGF0ZSBub2RlLlxuICAgICAgICAgKiBAcGFyYW0gbW9kZSBkZWZhdWx0IGlzIHVwZGF0ZSB0aGF0IHJlcGxhY2UgY3VycmVudCBsaXN0IGNoaWxkcmVuIGJ5IG5ldyBsaXN0IGNoaWxkcmVuICwgaWYgbW9kZSA9ICdpbnNlcnQnIHdpbGwgaW5zZXJ0IG5ldyB2YWx1ZXMgdG8gbGlzdCBjaGlsZHJlbiBleGlzdGVkIGJlZm9yZS5cbiAgICAqL1xuICAgIHVwZGF0ZUNoaWxkT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSwgbW9kZTogJ2luc2VydCcgfCAndXBkYXRlJyA9ICd1cGRhdGUnKSB7XG4gICAgICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XG4gICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IGRhdGFOb2RlcyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpLmZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IG5vZGUuaWQpO1xuICAgICAgICBpZiAoIW5lc3RlZE5vZGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnaW5zZXJ0JzpcbiAgICAgICAgICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuLnB1c2goLi4uZGF0YU5vZGVzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3VwZGF0ZSc6XG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGRhdGFOb2RlcztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcbiAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMoX25vZGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkW2ldO1xuICAgICAgICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGl0ZW0uaWQpO1xuICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcbiAgICAgICAgICAgIGlmICghZGVzY2VuZGFudHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZXNjZW5kYW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gZGVzY2VuZGFudHNbal07XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGNoaWxkLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChbX25vZGUsIC4uLm5vZGVzXSk7XG4gICAgfVxuXG4gICAgLy9yZS1zZWxlY3Qgd2hlbiB1cGRhdGUgY2hpbGRyZW4gb2Ygbm9kZVxuICAgIHByaXZhdGUgX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShub2RlSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xuICAgICAgICBpZiAoIW5vZGUgfHwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZXhpc3RJblNlbGVjdGlvbiA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09IG5vZGUuaWQpO1xuICAgICAgICBpZiAoZXhpc3RJblNlbGVjdGlvbilcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGV4aXN0SW5TZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XG4gICAgfVxuXG4gICAgY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKCFhbGxQYXJlbnQubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFBhcmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gYWxsUGFyZW50W2ldO1xuICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKHBhcmVudCk7XG4gICAgICAgICAgICBwYXJlbnQuaXNMb2FkaW5nID0gZGVzY2VuZGFudHMuc29tZSh4ID0+IHguaXNMb2FkaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5vZGVCeUlkKGlkOiBzdHJpbmcpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGlkKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0Um9vdE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBhbGxQYXJlbnQucG9wKCk7XG4gICAgfVxuXG4gICAgYWRkUm9vdFRyZWUoZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSkge1xuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgaWYgKCFkYXRhLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdHJlZU5vZGVEYXRhID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSk7XG4gICAgICAgIC8vIHJlLWNoZWNrIHJvb3Qgd2FzIGV4aXN0ZWQgaW4gdHJlZVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWVOb2RlRGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlRGF0YVtpXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xuICAgICAgICAgICAgaWYgKCEhbm9kZSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghbm9kZSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUcmVlRGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQoZGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tlZFN0YXR1c05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpO1xuICAgIH1cblxuICAgIHVwZGF0ZU5vZGVJbmZvcm1hdGlvbihub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcbiAgICAgICAgbGV0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XG4gICAgICAgIGlmICghbmVzdGVkTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgICAgICBuZXN0ZWROb2RlLm5hbWUgPSBub2RlLm5hbWU7XG4gICAgICAgIG5lc3RlZE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xuICAgICAgICBuZXN0ZWROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcbiAgICAgICAgbmVzdGVkTm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICAgICAgbmVzdGVkTm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZSA9IG5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmU7XG4gICAgICAgIG5lc3RlZE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3RlZFJlc3VsdERhdGEobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoKHgpID0+IHguaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICBpZiAobm9kZVJlc3VsdCkge1xuICAgICAgICAgICAgbm9kZVJlc3VsdC5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xuICAgICAgICAgICAgbm9kZVJlc3VsdC5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGxDaGVja05vZGVPdXRzaWRlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG4gICAgICAgIC8vdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleGVjV2l0aG91dEVtaXROb2RlQ2hhbmdlRXZlbnQoYWN0aW9uOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMubG9ja0hhbmRsZVNlbGVjdGlvbkNoYW5nZSA9IHRydWU7XG4gICAgICAgIGFjdGlvbigpO1xuICAgICAgICB0aGlzLmxvY2tIYW5kbGVTZWxlY3Rpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpc0Rpc2FibGVkTm9kZSA9IChub2RlSWQ6IHN0cmluZykgPT4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT0gbm9kZUlkKT8uZGlzYWJsZWQ7XG5cbiAgICBpc1B1c2hpbmdOb2RlKGFsbENoaWxkTm9kZTogUU1TVHJlZU5vZGVbXSwgY291bnRDaGlsZHJlblB1c2hpbmc/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1B1c2hpbmdDaGlsZE5vZGVzLmVtaXQodHJ1ZSk7XG4gICAgICAgIGlmIChhbGxDaGlsZE5vZGU/Lmxlbmd0aCA9PSBjb3VudENoaWxkcmVuUHVzaGluZykge1xuICAgICAgICAgICAgdGhpcy5pc1B1c2hpbmdDaGlsZE5vZGVzLmVtaXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2hvd1NlYXJjaENvbnRyb2woaXNTaG93U2VhcmNoQ29udHJvbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzU2hvd1NlYXJjaENvbnRyb2wgPSBpc1Nob3dTZWFyY2hDb250cm9sO1xuICAgIH1cbn1cbiJdfQ==