tnx-shared 5.1.207 → 5.1.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +210 -103
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/environment-schema.d.ts.map +1 -1
- package/classes/form-schema.d.ts +6 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +8 -5
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +2 -2
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts +0 -1
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts.map +1 -1
- package/components/statemachines/utils/utils.d.ts.map +1 -1
- package/components/tn-tabview/tn-tabview.component.d.ts +2 -0
- package/components/tn-tabview/tn-tabview.component.d.ts.map +1 -1
- package/components/workflow/models/models.d.ts +1 -0
- package/components/workflow/models/models.d.ts.map +1 -1
- package/components/workflow/services/workflow-permission-detail.service.d.ts.map +1 -1
- package/esm2015/classes/environment-schema.js +1 -1
- package/esm2015/classes/form-schema.js +7 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +73 -27
- package/esm2015/components/crud/crud-list/crud-list.component.js +12 -3
- package/esm2015/components/dropdown/dropdown.component.js +5 -6
- package/esm2015/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.js +16 -3
- package/esm2015/components/statemachines/utils/utils.js +2 -1
- package/esm2015/components/tn-tabview/tn-tabview.component.js +8 -3
- package/esm2015/components/workflow/models/models.js +1 -1
- package/esm2015/components/workflow/services/workflow-permission-detail.service.js +2 -1
- package/esm2015/public-api.js +2 -1
- package/esm2015/services/base.service.js +10 -1
- package/esm2015/services/notifier.service.js +23 -5
- package/esm2015/tnx-shared.js +70 -71
- package/esm2015/tnx-shared.module.js +2 -2
- package/fesm2015/tnx-shared.js +148 -41
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +3 -0
- package/services/base.service.d.ts.map +1 -1
- package/services/notifier.service.d.ts +6 -1
- package/services/notifier.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +69 -70
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -2
- package/tnx-shared.module.d.ts.map +1 -1
|
@@ -42,7 +42,6 @@ export class DropdownComponent extends ComponentBase {
|
|
|
42
42
|
this.funcReturnValue = value => value;
|
|
43
43
|
this.hideTransitionOptions = '195ms ease-in';
|
|
44
44
|
this.showTransitionOptions = '225ms ease-out';
|
|
45
|
-
this.virtualScroll = true;
|
|
46
45
|
this.autofocusSelectedItem = true;
|
|
47
46
|
this.valueSearchServer = '';
|
|
48
47
|
this.keyUp = new Subject();
|
|
@@ -137,7 +136,6 @@ export class DropdownComponent extends ComponentBase {
|
|
|
137
136
|
this.setDefaultSetting();
|
|
138
137
|
if (this.control.baseService) {
|
|
139
138
|
if (this.control.isServerLoad) {
|
|
140
|
-
// this.virtualScroll = false;
|
|
141
139
|
this.control.maxItemDisplay = 9999;
|
|
142
140
|
this.createFilterFunction();
|
|
143
141
|
this.subscription = this.keyUp.pipe(map(event => event.target.value), debounceTime(500), distinctUntilChanged()).subscribe(value => {
|
|
@@ -528,6 +526,7 @@ export class DropdownComponent extends ComponentBase {
|
|
|
528
526
|
else {
|
|
529
527
|
this.onDataSourceLoaded.emit({
|
|
530
528
|
dataSource,
|
|
529
|
+
rawDataSource,
|
|
531
530
|
elm: this
|
|
532
531
|
});
|
|
533
532
|
}
|
|
@@ -723,7 +722,7 @@ export class DropdownComponent extends ComponentBase {
|
|
|
723
722
|
if (!this.control.isServerLoad) {
|
|
724
723
|
return;
|
|
725
724
|
}
|
|
726
|
-
if (this.virtualScroll) {
|
|
725
|
+
if (this.control.virtualScroll) {
|
|
727
726
|
this.scrollContainer = this.dropdown.overlay.querySelector('.cdk-virtual-scroll-viewport');
|
|
728
727
|
}
|
|
729
728
|
else {
|
|
@@ -746,7 +745,7 @@ export class DropdownComponent extends ComponentBase {
|
|
|
746
745
|
if (!this.control.isServerLoad) {
|
|
747
746
|
return;
|
|
748
747
|
}
|
|
749
|
-
if (this.virtualScroll) {
|
|
748
|
+
if (this.control.virtualScroll) {
|
|
750
749
|
this.scrollContainer = this.multiSelect.overlay.querySelector('.cdk-virtual-scroll-viewport');
|
|
751
750
|
}
|
|
752
751
|
else {
|
|
@@ -814,7 +813,7 @@ export class DropdownComponent extends ComponentBase {
|
|
|
814
813
|
DropdownComponent.decorators = [
|
|
815
814
|
{ type: Component, args: [{
|
|
816
815
|
selector: 'dropdown',
|
|
817
|
-
template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\">\r\n <p-dropdown *ngIf=\"!control.multiple\" [options]=\"dataSourceInternal\" [placeholder]=\"control.placeholder\"\r\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\r\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\r\n [disabled]=\"control.disabled ? true : null\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\r\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\r\n [virtualScroll]=\"virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\r\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\r\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\r\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\r\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\r\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\r\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\r\n </ng-template>\r\n </p-dropdown>\r\n <p-multiSelect *ngIf=\"control.multiple\" [options]=\"dataSourceInternal\" [filter]=\"control.filter\"\r\n [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\" [panelStyleClass]=\"getPanelClass()\"\r\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\r\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"control.disabled ? true : null\"\r\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"virtualScroll\"\r\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\r\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\r\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\r\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\r\n (onPanelHide)=\"onHideHandler($event)\">\r\n <ng-template pTemplate=\"selectedItems\" let-value>\r\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\r\n <ng-container *ngIf=\"value && value.length > 0\">\r\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\r\n {{selectedItem[control.displayField]}}<span class=\"remove-item\"\r\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </p-multiSelect>\r\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\r\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\r\n <button *ngIf=\"control.quickAdd && control.cols\" type=\"button\" pButton icon=\"pi pi-plus\"\r\n class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\" tooltipPosition=\"top\"\r\n (click)=\"showFormQuickAdd()\"></button>\r\n</div>\r\n<tn-dialog *ngIf=\"showQuickAddForm\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"'Th\u00EAm m\u1EDBi ' + control.label | translate\" [popupSize]=\"control.popupSize\"\r\n (onHide)=\"showQuickAddForm = false\">\r\n <quick-add-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\" [control]=\"control\"\r\n [baseService]=\"control.baseService\" (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\r\n </quick-add-form>\r\n</tn-dialog>",
|
|
816
|
+
template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\">\r\n <p-dropdown *ngIf=\"!control.multiple\" [options]=\"dataSourceInternal\" [placeholder]=\"control.placeholder\"\r\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\r\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\r\n [disabled]=\"control.disabled ? true : null\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\r\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\r\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\r\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\r\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\r\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\r\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\r\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\r\n <ng-container\r\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\r\n </ng-container>\r\n </ng-template>\r\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\r\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\r\n </ng-template>\r\n </p-dropdown>\r\n <p-multiSelect *ngIf=\"control.multiple\" [options]=\"dataSourceInternal\" [filter]=\"control.filter\"\r\n [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\" [panelStyleClass]=\"getPanelClass()\"\r\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\r\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"control.disabled ? true : null\"\r\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\r\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\r\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\r\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\r\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\r\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\r\n (onPanelHide)=\"onHideHandler($event)\">\r\n <ng-template pTemplate=\"selectedItems\" let-value>\r\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\r\n <ng-container *ngIf=\"value && value.length > 0\">\r\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\r\n {{selectedItem[control.displayField]}}<span class=\"remove-item\"\r\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </p-multiSelect>\r\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\r\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\r\n <button *ngIf=\"control.quickAdd && control.cols\" type=\"button\" pButton icon=\"pi pi-plus\"\r\n class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\" tooltipPosition=\"top\"\r\n (click)=\"showFormQuickAdd()\"></button>\r\n</div>\r\n<tn-dialog *ngIf=\"showQuickAddForm\" #dialog [styleClass]=\"'address-form'\"\r\n [header]=\"'Th\u00EAm m\u1EDBi ' + control.label | translate\" [popupSize]=\"control.popupSize\"\r\n (onHide)=\"showQuickAddForm = false\">\r\n <quick-add-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [model]=\"formModel\" [control]=\"control\"\r\n [baseService]=\"control.baseService\" (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\r\n </quick-add-form>\r\n</tn-dialog>",
|
|
818
817
|
providers: [ComponentContextService],
|
|
819
818
|
styles: [".tn-dropdown{display:flex}.tn-dropdown p-dropdown,.tn-dropdown p-multiSelect{flex:1 1;width:100%}.tn-dropdown>.button-quick-add{flex:0 0 auto}.input-mask{background:transparent;border:1px solid transparent;border-radius:3px;box-sizing:border-box;outline:none;padding-left:12px;position:absolute;width:100%;z-index:1}.input-mask.hide{display:none}.input-mask:focus{border-color:#2196f3;box-shadow:0 0 0 .2rem #a6d5fa}.custom-select-item{align-items:center;background:#d2eefb;border:1px solid #a9d8ff;border-radius:3px;display:inline-flex;margin:0 0 0 3px;padding:3px 5px}.custom-select-item>span{color:#555;font-size:12px;margin-left:3px}.custom-select-item>span i{font-size:10px}.custom-select-item.min{margin-left:2px;padding:1px 5px}.custom-select-item:first-child{margin-left:0}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item{background:#e1e1e1;border-color:#d4d4d4}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item>span{display:none}::ng-deep .ui-multiselect-filter-container .input-mask{box-sizing:border-box;height:22px;left:1px;padding:.2em;text-indent:1.5em;top:1px;width:calc(100% - 2px)}::ng-deep .ui-multiselect-filter-container .input-mask:focus{left:1px;width:calc(100% - 2px)}"]
|
|
820
819
|
},] }
|
|
@@ -853,4 +852,4 @@ DropdownComponent.propDecorators = {
|
|
|
853
852
|
valueChange: [{ type: Output }],
|
|
854
853
|
adjustValue: [{ type: Output }]
|
|
855
854
|
};
|
|
856
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBU3pELE1BQU0sT0FBTyxpQkFB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QkFFckIsS0FBSzs4Q0FNTCxLQUFLO3FCQUVMLEtBQUs7c0JBS0wsS0FBSzsyQkFDTCxLQUFLO3VCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFXTCxLQUFLO3FDQVlMLEtBQUs7d0JBU0wsTUFBTTt5QkFDTixNQUFNO3VCQUNOLE1BQU07OEJBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07cUJBQ04sTUFBTTsrQkFDTixNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNO2lDQUNOLE1BQU07MEJBQ04sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xyXG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL211bHRpc2VsZWN0JztcclxuXHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnZWwnKSBlbDogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0TWFzaycpIGlucHV0OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xyXG4gICAgQFZpZXdDaGlsZChNdWx0aVNlbGVjdCkgbXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0O1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5zaG93Q2xlYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNob3dDbGVhciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmlsdGVyID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xyXG4gICAgQElucHV0KCkgZGVmYXVsdExhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55ID0gJ2JvZHknO1xyXG4gICAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCh0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCAxKTtcclxuICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmV0dXJuVmFsdWUgIT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAvLyBmaXJlIGV2ZW50IMSRaeG7gXUgY2jhu4luaCB2YWx1ZSB04burIFt2YWx1ZTogZ3VpZF0gPT4ge1tmaWVsZFZhbHVlXTogW3ZhbHVlOiBndWlkXSwgLi4uWzEgc+G7kSB0csaw4budbmcga2jDoWMgbuG7r2EgdHJvbmcgZGF0YXNvdXJjZV19XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3MgPSAnY3VzdG9tLXNlbGVjdC1pdGVtJztcclxuICAgIF9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzO1xyXG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkRyb3Bkb3duQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblNob3dTbWFydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25IaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25EYXRhU291cmNlTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xyXG4gICAgZGF0YVNvdXJjZVNlbGVjdGVkID0gW107XHJcbiAgICBzZWxlY3RlZFZhbHVlQmVmb3JlOiBhbnk7XHJcbiAgICBfdmFsdWU6IGFueTtcclxuICAgIF9yZXR1cm5WYWx1ZTogYW55O1xyXG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XHJcbiAgICB0b29sdGlwOiBzdHJpbmc7XHJcbiAgICBoaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSAnMTk1bXMgZWFzZS1pbic7XHJcbiAgICBzaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnMjI1bXMgZWFzZS1vdXQnO1xyXG4gICAgdmlydHVhbFNjcm9sbCA9IHRydWU7XHJcblxyXG4gICAgaW5wdXRFbG06IGFueTtcclxuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBnZXRGaWx0ZXJPblNlcnZlclNlYXJjaDogRnVuY3Rpb247XHJcbiAgICB2YWx1ZVNlYXJjaFNlcnZlciA9ICcnO1xyXG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xyXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICBfaGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xyXG5cclxuICAgIHNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgIGZvcm1Nb2RlbDogYW55ID0ge307XHJcblxyXG4gICAgZmxhc2hDYWNoZVBhcmVudDogYW55W10gPSBbXTtcclxuICAgIGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XHJcbiAgICBkZWxheUZpbHRlcjogbnVtYmVyID0gMTAwO1xyXG4gICAgc2Nyb2xsQ29udGFpbmVyOiBhbnk7XHJcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XHJcbiAgICBmaXJzdFNjcm9sbDogYW55ID0gdHJ1ZTtcclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHBhZ2U6IG51bWJlciA9IDE7XHJcbiAgICB0b3RhbFBhZ2U6IG51bWJlciA9IDI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpdFBhbmVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzV3JhcENvbnRlbnQgPSAnLS13cmFwLWNvbnRlbnQnO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyA9IGNsYXNzV3JhcENvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyArPSBgICR7Y2xhc3NXcmFwQ29udGVudH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9ICdDaMawYSBjaOG7jW4gYuG6o24gZ2hpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudmlydHVhbFNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1heEl0ZW1EaXNwbGF5ID0gOTk5OTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyRnVuY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICAgICAgICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLmxvYWRPbkluaXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSB0aGlzLnNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGF5RmlsdGVyID0gMjAwO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5fcHJlZml4ICsgaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwICYmICF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpIHtcclxuICAgICAgICBpZiAodGhpcy5mbGFzaENhY2hlUGFyZW50LnNvbWUocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSB0aGlzLmRyb3Bkb3duT3B0aW9ucy5maW5kKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtQWRkID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uaXRlbVBhcmVudCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNvbnRyb2wuZGlzYWJsZWRQYXJlbnRJdGVtXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW1BZGQpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleEV4aXN0ID0gdGhpcy5mbGFzaENhY2hlUGFyZW50LmZpbmRJbmRleChxID0+IHEudmFsdWUuX2xldmVsID09IGl0ZW1BZGQudmFsdWUuX2xldmVsKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4RXhpc3QgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50W2luZGV4RXhpc3RdID0gaXRlbUFkZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5wdXNoKGl0ZW1BZGQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSBi4bqjbiBnaGkgY2hhIGPhu6dhIGLhuqNuIGdoaSBjaGFcclxuICAgICAgICAgICAgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0oaXRlbVBhcmVudCk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhbHJlYWR5SGFzUGFyZW50KG9wdGlvbnM6IGFueVtdLCBpbmRleFN0YXJ0OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcclxuICAgICAgICB3aGlsZSAoaW5kZXhTdGFydCA+IC0xKSB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmlkID09IHBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmxldmVsID09IGxldmVsICYmIHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2luZGV4U3RhcnRdKSAhPSBwYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kZXhTdGFydC0tO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRJZEZyb21JdGVtKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgIH1cclxuXHJcbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyID0gKG9wdGlvbnMpID0+IHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZHJvcGRvd24uX29wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kaWZ5T3B0aW9uV2hlbkZpbHRlck11bHRpcGxlID0gKG9wdGlvbnMpID0+IHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3QuX29wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudCA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2ldKTtcclxuICAgICAgICAgICAgaWYgKHBhcmVudElkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIHBhcmVudElkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgY8OhYyBi4bqjbiBnaGkgcGjDrWEgdHLGsOG7m2MgeGVtIMSRw6MgY8OzIGLhuqNuIGdoaSBjaGEgY2jGsGEgKENobyDEkeG6v24gZ2hpIGfhurdwIGLhuqNuIGdoaSBjw7luZyBsZXZlbCBuaMawbmcga2jDoWMgcGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNQYXJlbnQgPSB0aGlzLmFscmVhZHlIYXNQYXJlbnQob3B0aW9ucywgaSAtIDEsIHBhcmVudElkLCBvcHRpb25zW2ldLmxldmVsKTtcclxuICAgICAgICAgICAgICAgIGlmICghaGFzUGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocGFyZW50cywgcGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaSwgMCwgLi4ucGFyZW50cy5yZXZlcnNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBhcmVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGaWx0ZXJGdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5wdXNoKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+ICh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkWzBdLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh7IGZpZWxkOiBmaWVsZFNlYXJjaCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiB0bXBWYWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGEoZmlsdGVyUGFyZW50cz86IEZpbHRlcltdKSB7XHJcbiAgICAgICAgaWYgKCFmaWx0ZXJQYXJlbnRzKSBmaWx0ZXJQYXJlbnRzID0gW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJGcm9tUGFyZW50cyA9IGZpbHRlclBhcmVudHM7XHJcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICBpZiAocGFnZSA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bikgdGhpcy5kcm9wZG93bi5zZWxlY3RlZE9wdGlvblVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aMOqbSBkYXRhc291cmNlXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZUludGVybmFsXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCBkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0bXBEYXRhU291cmNlLmxlbmd0aCA9PSB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gdG1wRGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgJiYgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZVNlYXJjaFNlcnZlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCwgLTEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gdG1wRGF0YVNvdXJjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kRGF0YVNvdXJjZShkZXN0U291cmNlOiBhbnlbXSwgZGF0YVNvdXJjZTogYW55W10sIGRpcmVjdGlvbjogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkTWFQaGFuQ2FwXSA+IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgYuG6o24gZ2hpIGN14buRaSBjw7luZyBsw6AgbsOzIHRow6wgayBpbnNlcnRcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZS5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlc3RTb3VyY2VbZGVzdFNvdXJjZS5sZW5ndGggLSAxXS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTuG6v3UgYuG6o24gZ2hpIG5nYXkgdHLGsOG7m2MgduG7iyB0csOtIGPhuqduIGluc2VydCBsw6AgYuG6o24gZ2hpIGhp4buHbiB04bqhaSB0aMOsIGsgaW5zZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3RTb3VyY2VbaW5kZXggLSAxXS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZVtpbmRleCAtIDFdLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnNwbGljZShpbmRleCwgMCwgc291cmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGVzdFNvdXJjZS5maW5kSW5kZXgocSA9PiBxLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSA9PSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS51bnNoaWZ0KHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnB1c2goc291cmNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0FuZEZpcmVFdmVudChmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JjZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQodGhpcy5jb250cm9sLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGlmICghb2xkVmFsdWUpIG9sZFZhbHVlID0gW107XHJcbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLm5vdEluQ3J1ZEZvcm1cclxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5hdXRvRGlzcGxheUZpcnN0XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBbdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAob2xkVmFsdWUubGVuZ3RoICE9IHRoaXMuX3ZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlU2VsZWN0ZWRTaW5nbGUoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcclxuICAgICAgICAgICAgLy8gVsOsIGdpw6EgdHLhu4sgY+G7p2EgdGhpcy5fdmFsdWUgc+G6vSDEkcaw4bujYyBjb3JyZWN0aW5nIOG7nyB0csOqbiAoaWQgPT4gb2JqZWN0KSBuw6puIHNvIHPDoW5oIHPhur0ga2jDoWMgbmhhdVxyXG4gICAgICAgICAgICBpZiAoKG9sZFZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuX3ZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMuX3ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMuX3ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgMSwgbGVuZ3RoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgPSBkYXRhU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gW107XHJcbiAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBbLi4udGhpcy5fdmFsdWVdO1xyXG4gICAgICAgIHRoaXMuYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZSwgdG1wVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcclxuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZTogYW55W10sIGN1cnJlbnRWYWx1ZTogYW55W10sIGRhdGFTb3VyY2U6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudFZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGN1cnJlbnRWYWx1ZVtpXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtKVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkanVzdFZhbHVlU2VsZWN0ZWRTaW5nbGUoKSB7XHJcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG9sZFZhbHVlID09IG51bGwgfHwgb2xkVmFsdWUgPT0gJycpIHJldHVybjtcclxuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcclxuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWU6IGFueSwgZGF0YVNvdXJjZTogYW55W10pIHtcclxuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZSlcclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tSZWFkeSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uQWRqdXN0ZWRWYWx1ZVxyXG4gICAgICAgICAgICAmJiB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlXHJcbiAgICAgICAgICAgICYmICgoIXRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVBZGp1c3RWYWx1ZUV2ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHtcclxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8IGl0ZW0uX0dlbmVyYXRlZEJ5QmFzZSA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZW1wLnZhbHVlLl9kcm9wZG93bnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlRmllbGQ7XHJcbiAgICAgICAgcmV0dXJuIHRlbXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRDb250cm9sKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRGF0YXNvdXJjZSgpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhKHBhZ2U6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2UocGFnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlclByb2Nlc3ModGhpcy5maWx0ZXJGcm9tUGFyZW50cyk7XHJcbiAgICAgICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShbXSwgcGFnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZSwgdG90YWxQYWdlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIHBhZ2UpO1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlID0gdG90YWxQYWdlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgcGFnZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE7hur91IGRyb3Bkb3duIGsgbuG6sW0gdHJvbmcgY3J1ZCBmb3JtIHRow6wgY+G6pXUgaMOsbmggZmlyZUNhbGxCYWNrSW5zaWRlID0gdHJ1ZSAobeG6t2MgxJHhu4tuaCkgxJHhu4MgZmlyZSB0cuG7sWMgdGnhur9wIHThu6sgdHJvbmcgY29tcG9uZW50XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maXJlQ2FsbEJhY2tJbnNpZGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2goPGFueT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3RGF0YVNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICBlbG06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9uRGF0YVNvdXJjZUxvYWRlZC5lbWl0KHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICBlbG06IHRoaXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVyczogRmlsdGVyW10sIHBhZ2U6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIGxldCB0b3RhbFBhZ2UgPSAxO1xyXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyh0aGlzLmNvbnRyb2wpO1xyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9ucy5wYWdlID0gcGFnZTtcclxuICAgICAgICBpZiAocGFnZVNpemUpIHtcclxuICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmdyb3VwQ29kZSwgbnVsbCwgZmlsdGVycywgZHJvcGRvd25PcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuY29udHJvbC5maWVsZFRyZWUsIHRoaXMuY29udHJvbC52YWx1ZVBhcmVudFJvb3RcclxuICAgICAgICAgICAgICAgICAgICAsIGRyb3Bkb3duT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhU291cmNlID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgdG90YWxQYWdlID0gTWF0aC5jZWlsKHJlc3BvbnNlLnRvdGFsUmVjb3JkIC8gZHJvcGRvd25PcHRpb25zLnBhZ2VTaXplKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YShkYXRhU291cmNlLCBkcm9wZG93bk9wdGlvbnMpO1xyXG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZGF0YVNvdXJjZTogcmVzdWx0LCByYXdEYXRhU291cmNlOiBkYXRhU291cmNlLCB0b3RhbFBhZ2UgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGZpbHRlclByb2Nlc3MoZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbLi4uZmlsdGVyRnJvbVBhcmVudHNdO1xyXG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoKHRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoYWxsb3cgPT09IGZhbHNlKSBmaWx0ZXJzID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhbmVsQ2xhc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hcHBlbmRUbyA9PSAnYm9keScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5wYW5lbENsYXNzfSBwLWZpeGVkYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5wYW5lbENsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xyXG4gICAgICAgIHRoaXMuX3JldHVyblZhbHVlID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb250cm9sLl9jb21wb25lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgYWRqdXN0VmFsdWUyV2F5QmluZGluZygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVSZXR1cm4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcmVDaGFuZ2VkRXZlbnQoKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHZhbHVlUmV0dXJuKTtcclxuICAgIH1cclxuXHJcbiAgICBmaXJlQWRqdXN0VmFsdWVFdmVudCgpIHtcclxuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLmFkanVzdFZhbHVlLm5leHQodmFsdWVSZXR1cm4pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlU2VsZWN0ZWQoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VsZWN0RGVzY2VuZGFudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWRzID0gW2V2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF1dO1xyXG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uLCBjaMOhdVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2YoZXZlbnQuaXRlbVZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkcy5pbmRleE9mKHBhcmVudElkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRzLnB1c2gocGFyZW50SWQsIHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wuc2VsZWN0Q2hpbGRJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBpdGVtIMSRxrDhu6NjIGNo4buNbiA9PiBDaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oZXZ0LCBzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkRyb3Bkb3duQ2xpY2submV4dChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soJGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaScgJiYgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3VpLWRyb3Bkb3duLWNsZWFyLWljb24nKSkge1xyXG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNob3dIYW5kbGVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBhbmVsQ2xhc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vdmVybGF5LnN0eWxlLndpZHRoID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnN0eWxlLm1pbldpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5wLWRyb3Bkb3duLWl0ZW1zLXdyYXBwZXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbnB1dCA9IHRoaXMuZHJvcGRvd24uZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xyXG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTY3JvbGwgPSAoZXZ0KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcclxuICAgICAgICAgICAgJiYgIXRoaXMuZmlyc3RTY3JvbGxcclxuICAgICAgICAgICAgJiYgZXZ0LnNyY0VsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsVG9wID09IGV2dC5zcmNFbGVtZW50LnNjcm9sbEhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0U2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XHJcbiAgICAgICAgICAgIHRoaXMudGltZW91dFNjcm9sbCA9IHNldFRpbWVvdXQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGFOZXh0UGFnZSgpO1xyXG4gICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGFOZXh0UGFnZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFnZSsrO1xyXG4gICAgICAgIHRoaXMuX2dldERhdGEodGhpcy5wYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcclxuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IaWRlSGFuZGxlcihldnQpIHtcclxuICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KHtcclxuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgICAgICBldmVudDogZXZ0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSAhPSB0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID09IG51bGwgJiYgdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRW1pdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGRhdGFFbWl0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cihldnQpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Zvcm1RdWlja0FkZCgpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0geyAuLi50aGlzLmNvbnRyb2wuaW5pdERhdGEgfTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrQWRkRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2FuY2VsKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrQWRkRm9ybSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrQWRkRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
855
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBU3pELE1BQU0sT0FBTyxpQkFB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OzhDQU1MLEtBQUs7cUJBRUwsS0FBSztzQkFNTCxLQUFLOzJCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFFTCxLQUFLO29CQVdMLEtBQUs7cUNBYUwsS0FBSzt3QkFTTCxNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvbXVsdGlzZWxlY3QnO1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hLCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhcHBlbmREZWZhdWx0RmlsdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdlbCcpIGVsOiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXRNYXNrJykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgICBAVmlld0NoaWxkKERyb3Bkb3duKSBkcm9wZG93bjogRHJvcGRvd247XHJcbiAgICBAVmlld0NoaWxkKE11bHRpU2VsZWN0KSBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3Q7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHNob3dDbGVhcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLnNob3dDbGVhcikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2hvd0NsZWFyID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIGRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2ggPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZmlsdGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5maWx0ZXIgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xyXG4gICAgQElucHV0KCkgZGVmYXVsdExhYmVsID0gJyc7XHJcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55ID0gJ2JvZHknO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgMSk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3JldHVyblZhbHVlICE9IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgLy8gZmlyZSBldmVudCDEkWnhu4F1IGNo4buJbmggdmFsdWUgdOG7qyBbdmFsdWU6IGd1aWRdID0+IHtbZmllbGRWYWx1ZV06IFt2YWx1ZTogZ3VpZF0sIC4uLlsxIHPhu5EgdHLGsOG7nW5nIGtow6FjIG7hu69hIHRyb25nIGRhdGFzb3VyY2VdfVxyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzcyA9ICdjdXN0b20tc2VsZWN0LWl0ZW0nO1xyXG4gICAgX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3M7XHJcbiAgICBASW5wdXQoKSBzZXQgaXRlbVNlbGVjdGVkU3R5bGVDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSBgJHt0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3N9ICR7dmFsdWV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSBgJHt0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3N9ICR7dmFsdWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2hvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU2hvd1NtYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkhpZGVTbWFydEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkRhdGFTb3VyY2VMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIGFkanVzdFZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICBkYXRhU291cmNlU2VsZWN0ZWQgPSBbXTtcclxuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcclxuICAgIF92YWx1ZTogYW55O1xyXG4gICAgX3JldHVyblZhbHVlOiBhbnk7XHJcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgIHRvb2x0aXA6IHN0cmluZztcclxuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucyA9ICcxOTVtcyBlYXNlLWluJztcclxuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XHJcblxyXG4gICAgaW5wdXRFbG06IGFueTtcclxuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBnZXRGaWx0ZXJPblNlcnZlclNlYXJjaDogRnVuY3Rpb247XHJcbiAgICB2YWx1ZVNlYXJjaFNlcnZlciA9ICcnO1xyXG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xyXG4gICAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICBfaGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xyXG5cclxuICAgIHNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgIGZvcm1Nb2RlbDogYW55ID0ge307XHJcblxyXG4gICAgZmxhc2hDYWNoZVBhcmVudDogYW55W10gPSBbXTtcclxuICAgIGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XHJcbiAgICBkZWxheUZpbHRlcjogbnVtYmVyID0gMTAwO1xyXG4gICAgc2Nyb2xsQ29udGFpbmVyOiBhbnk7XHJcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XHJcbiAgICBmaXJzdFNjcm9sbDogYW55ID0gdHJ1ZTtcclxuICAgIGxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHBhZ2U6IG51bWJlciA9IDE7XHJcbiAgICB0b3RhbFBhZ2U6IG51bWJlciA9IDI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpdFBhbmVsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzV3JhcENvbnRlbnQgPSAnLS13cmFwLWNvbnRlbnQnO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyA9IGNsYXNzV3JhcENvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyArPSBgICR7Y2xhc3NXcmFwQ29udGVudH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9ICdDaMawYSBjaOG7jW4gYuG6o24gZ2hpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbHRlckZ1bmN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMua2V5VXAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBtYXAoZXZlbnQgPT4gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5sb2FkT25Jbml0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGVmYXVsdFNldHRpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxheUZpbHRlciA9IDIwMDtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uX3ByZWZpeCArIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCAmJiAhdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gdmFsdWUgPT4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpdGVtUGFyZW50ID0gdGhpcy5kcm9wZG93bk9wdGlvbnMuZmluZChxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChpdGVtUGFyZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbUFkZCA9IHtcclxuICAgICAgICAgICAgICAgIC4uLml0ZW1QYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5jb250cm9sLmRpc2FibGVkUGFyZW50SXRlbVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChpdGVtQWRkKTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXhFeGlzdCA9IHRoaXMuZmxhc2hDYWNoZVBhcmVudC5maW5kSW5kZXgocSA9PiBxLnZhbHVlLl9sZXZlbCA9PSBpdGVtQWRkLnZhbHVlLl9sZXZlbCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleEV4aXN0ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudFtpbmRleEV4aXN0XSA9IGl0ZW1BZGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQucHVzaChpdGVtQWRkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDqm0gYuG6o24gZ2hpIGNoYSBj4bunYSBi4bqjbiBnaGkgY2hhXHJcbiAgICAgICAgICAgIHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKGl0ZW1QYXJlbnQpO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocmVzdWx0LCBwYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWxyZWFkeUhhc1BhcmVudChvcHRpb25zOiBhbnlbXSwgaW5kZXhTdGFydDogbnVtYmVyLCBwYXJlbnRJZDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XHJcbiAgICAgICAgd2hpbGUgKGluZGV4U3RhcnQgPiAtMSkge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uc1tpbmRleFN0YXJ0XS52YWx1ZS5pZCA9PSBwYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9uc1tpbmRleFN0YXJ0XS52YWx1ZS5sZXZlbCA9PSBsZXZlbCAmJiB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpbmRleFN0YXJ0XSkgIT0gcGFyZW50SWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluZGV4U3RhcnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XHJcbiAgICB9XHJcblxyXG4gICAgbW9kaWZ5T3B0aW9uV2hlbkZpbHRlciA9IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duLl9vcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXJNdWx0aXBsZSA9IChvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0Ll9vcHRpb25zO1xyXG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGPDoWMgYuG6o24gZ2hpIHBow61hIHRyxrDhu5tjIHhlbSDEkcOjIGPDsyBi4bqjbiBnaGkgY2hhIGNoxrBhIChDaG8gxJHhur9uIGdoaSBn4bq3cCBi4bqjbiBnaGkgY8O5bmcgbGV2ZWwgbmjGsG5nIGtow6FjIHBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gdGhpcy5hbHJlYWR5SGFzUGFyZW50KG9wdGlvbnMsIGkgLSAxLCBwYXJlbnRJZCwgb3B0aW9uc1tpXS5sZXZlbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHBhcmVudHMsIHBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3BsaWNlKGksIDAsIC4uLnBhcmVudHMucmV2ZXJzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwYXJlbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRmlsdGVyRnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5kaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZFswXSwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goeyBmaWVsZDogZmllbGRTZWFyY2gsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCB2YWx1ZTogdG1wVmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xyXG4gICAgICAgIGlmICghZmlsdGVyUGFyZW50cykgZmlsdGVyUGFyZW50cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRnJvbVBhcmVudHMgPSBmaWx0ZXJQYXJlbnRzO1xyXG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmF1dG9mb2N1c1NlbGVjdGVkSXRlbSA9IHRydWU7XHJcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9mb2N1c1NlbGVjdGVkSXRlbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRPcHRpb25VcGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGjDqm0gZGF0YXNvdXJjZVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VJbnRlcm5hbF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodG1wRGF0YVNvdXJjZS5sZW5ndGggPT0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdG1wRGF0YVNvdXJjZSA9IFsuLi5kYXRhU291cmNlXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkICYmIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQsIC0xKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZERhdGFTb3VyY2UoZGVzdFNvdXJjZTogYW55W10sIGRhdGFTb3VyY2U6IGFueVtdLCBkaXJlY3Rpb246IG51bWJlciA9IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGVzdFNvdXJjZS5maW5kSW5kZXgocSA9PiBxLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZE1hUGhhbkNhcF0gPiBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkTWFQaGFuQ2FwXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGLhuqNuIGdoaSBjdeG7kWkgY8O5bmcgbMOgIG7DsyB0aMOsIGsgaW5zZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3RTb3VyY2UubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBkZXN0U291cmNlW2Rlc3RTb3VyY2UubGVuZ3RoIC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnB1c2goc291cmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluZGV4ID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE7hur91IGLhuqNuIGdoaSBuZ2F5IHRyxrDhu5tjIHbhu4sgdHLDrSBj4bqnbiBpbnNlcnQgbMOgIGLhuqNuIGdoaSBoaeG7h24gdOG6oWkgdGjDrCBrIGluc2VydFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlW2luZGV4IC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2VbaW5kZXggLSAxXS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDAsIHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5wdXNoKHNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tBbmRGaXJlRXZlbnQoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMuY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoIW9sZFZhbHVlKSBvbGRWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAob2xkVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldFZhbHVlU2VsZWN0ZWRNdWx0aXBsZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gW3RoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCAhPSB0aGlzLl92YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wubm90SW5DcnVkRm9ybVxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMxrB1IMO9IGlmIOG7nyBkxrDhu5tpIGtow7RuZyDEkcaw4bujYyDEkeG7lWkgdGjDoG5oIG9sZFZhbHVlICE9IHRoaXMuX3ZhbHVlXHJcbiAgICAgICAgICAgIC8vIFbDrCBnacOhIHRy4buLIGPhu6dhIHRoaXMuX3ZhbHVlIHPhur0gxJHGsOG7o2MgY29ycmVjdGluZyDhu58gdHLDqm4gKGlkID0+IG9iamVjdCkgbsOqbiBzbyBzw6FuaCBz4bq9IGtow6FjIG5oYXVcclxuICAgICAgICAgICAgaWYgKChvbGRWYWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB8fCAob2xkVmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jaGVja1JlYWR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0U2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIGxldCBsZW5ndGggPSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLl92YWx1ZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLl92YWx1ZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLl92YWx1ZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIDEsIGxlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkID0gZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbHVlU2VsZWN0ZWRNdWx0aXBsZSgpIHtcclxuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRtcFZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTtcclxuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZUZyb21EYXRhU291cmNlKG5ld1ZhbHVlLCB0bXBWYWx1ZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQpO1xyXG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWU6IGFueVtdLCBjdXJyZW50VmFsdWU6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBjdXJyZW50VmFsdWVbaV07XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbSlcclxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICBpLS07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCkge1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGlmIChvbGRWYWx1ZSA9PSBudWxsIHx8IG9sZFZhbHVlID09ICcnKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XHJcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlOiBhbnksIGRhdGFTb3VyY2U6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrUmVhZHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5vbkFkanVzdGVkVmFsdWVcclxuICAgICAgICAgICAgJiYgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZVxyXG4gICAgICAgICAgICAmJiAoKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlQWRqdXN0VmFsdWVFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xyXG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCBpdGVtLl9HZW5lcmF0ZWRCeUJhc2UgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0Q29udHJvbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcclxuICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YShwYWdlOiBudW1iZXIgPSAxKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHBhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gYXdhaXQgdGhpcy5maWx0ZXJQcm9jZXNzKHRoaXMuZmlsdGVyRnJvbVBhcmVudHMpO1xyXG4gICAgICAgIGlmIChmaWx0ZXJzID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoW10sIHBhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KGZhbHNlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UsIHJhd0RhdGFTb3VyY2UsIHRvdGFsUGFnZSB9ID0gYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzLCBwYWdlKTtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZSA9IHRvdGFsUGFnZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2UsIHBhZ2UpO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBO4bq/dSBkcm9wZG93biBrIG7hurFtIHRyb25nIGNydWQgZm9ybSB0aMOsIGPhuqV1IGjDrG5oIGZpcmVDYWxsQmFja0luc2lkZSA9IHRydWUgKG3hurdjIMSR4buLbmgpIMSR4buDIGZpcmUgdHLhu7FjIHRp4bq/cCB04burIHRyb25nIGNvbXBvbmVudFxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmlyZUNhbGxCYWNrSW5zaWRlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJhd0RhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VMb2FkZWQuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSxcclxuICAgICAgICAgICAgICAgIGVsbTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzOiBGaWx0ZXJbXSwgcGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRvdGFsUGFnZSA9IDE7XHJcbiAgICAgICAgY29uc3QgZHJvcGRvd25PcHRpb25zID0gdGhpcy5fY3J1ZFNlcnZpY2UuY3JlYXRlRHJvcGRvd25PcHRpb25zKHRoaXMuY29udHJvbCk7XHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIGlmIChwYWdlU2l6ZSkge1xyXG4gICAgICAgICAgICBkcm9wZG93bk9wdGlvbnMucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ3JvdXBDb2RlLCBudWxsLCBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycywgdGhpcy5jb250cm9sLmZpZWxkVHJlZSwgdGhpcy5jb250cm9sLnZhbHVlUGFyZW50Um9vdFxyXG4gICAgICAgICAgICAgICAgICAgICwgZHJvcGRvd25PcHRpb25zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycywgZHJvcGRvd25PcHRpb25zXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICB0b3RhbFBhZ2UgPSBNYXRoLmNlaWwocmVzcG9uc2UudG90YWxSZWNvcmQgLyBkcm9wZG93bk9wdGlvbnMucGFnZVNpemUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhKGRhdGFTb3VyY2UsIGRyb3Bkb3duT3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBkYXRhU291cmNlOiByZXN1bHQsIHJhd0RhdGFTb3VyY2U6IGRhdGFTb3VyY2UsIHRvdGFsUGFnZSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZmlsdGVyUHJvY2VzcyhmaWx0ZXJGcm9tUGFyZW50czogRmlsdGVyW10pIHtcclxuICAgICAgICBsZXQgZmlsdGVycyA9IFsuLi5maWx0ZXJGcm9tUGFyZW50c107XHJcbiAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZVNlYXJjaFNlcnZlcikge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2godGhpcy52YWx1ZVNlYXJjaFNlcnZlcikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxvdyA9IGF3YWl0IHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIoZmlsdGVycywgdGhpcyk7XHJcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIGZpbHRlcnMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFuZWxDbGFzcygpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFwcGVuZFRvID09ICdib2R5Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb250cm9sLnBhbmVsQ2xhc3N9IHAtZml4ZWRgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLnBhbmVsQ2xhc3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XHJcbiAgICAgICAgdGhpcy5fcmV0dXJuVmFsdWUgPSB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAodGhpcy5fdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSW5pdGVkQ29udHJvbCgpIHtcclxuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcclxuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2wuX2NvbXBvbmVudDtcclxuICAgIH1cclxuXHJcbiAgICBhZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUNoYW5nZWRFdmVudCgpIHtcclxuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVSZXR1cm4pO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodmFsdWVSZXR1cm4pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcmVBZGp1c3RWYWx1ZUV2ZW50KCkge1xyXG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMuYWRqdXN0VmFsdWUubmV4dCh2YWx1ZVJldHVybik7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2VTZWxlY3RlZChldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWxlY3REZXNjZW5kYW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XHJcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBpdGVtIMSRxrDhu6NjIGNo4buNbiA9PiBDaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb24sIGNow6F1XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihldmVudC5pdGVtVmFsdWUpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRzLmluZGV4T2YocGFyZW50SWQpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBpdGVtIMSRYW5nIGLhu4sgYuG7jyBjaOG7jW4gPT4gaOG7p3kgY2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkcy5pbmRleE9mKHBhcmVudElkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5zZWxlY3RDaGlsZEl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2YoZXZlbnQuaXRlbVZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkID09IGV2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBpdGVtIMSRYW5nIGLhu4sgYuG7jyBjaOG7jW4gPT4gaOG7p3kgY2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkID09IGV2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gIT0gc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Ecm9wZG93bkNsaWNrSGFuZGxlcihldnQpIHtcclxuICAgICAgICB0aGlzLm9uRHJvcGRvd25DbGljay5uZXh0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygkZXZlbnQpIHtcclxuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XHJcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xyXG4gICAgICAgIHRoaXMub25TaG93U21hcnRFdmVudC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25QYW5lbFNob3dIYW5kbGVyKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xyXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBhbmVsQ2xhc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnN0eWxlLndpZHRoID0gdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnN0eWxlLm1pbldpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnZpcnR1YWxTY3JvbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XHJcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTY3JvbGwgPSAoZXZ0KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcclxuICAgICAgICAgICAgJiYgIXRoaXMuZmlyc3RTY3JvbGxcclxuICAgICAgICAgICAgJiYgZXZ0LnNyY0VsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsVG9wID09IGV2dC5zcmNFbGVtZW50LnNjcm9sbEhlaWdodFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcnN0U2Nyb2xsID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XHJcbiAgICAgICAgICAgIHRoaXMudGltZW91dFNjcm9sbCA9IHNldFRpbWVvdXQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGFOZXh0UGFnZSgpO1xyXG4gICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRhTmV4dFBhZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZyB8fCB0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbFBhZ2UpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhZ2UrKztcclxuICAgICAgICB0aGlzLl9nZXREYXRhKHRoaXMucGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCkge1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7XHJcbiAgICAgICAgLy8gZGVmYXVsdElucHV0LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0SW5wdXQpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSGlkZUhhbmRsZXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgIT0gdGhpcy5fdmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YUVtaXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldnRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChkYXRhRW1pdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcclxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJsdXIoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHsgLi4udGhpcy5jb250cm9sLmluaXREYXRhIH07XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNhbmNlbCgpIHtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTYXZlZCgpIHtcclxuICAgICAgICB0aGlzLnNob3dRdWlja0FkZEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9nZXREYXRhKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -3,7 +3,7 @@ import { Component, EventEmitter, Injector, Input, Output, TemplateRef, ViewChil
|
|
|
3
3
|
import { ComponentContextService } from '../../../app-context/component-context.service';
|
|
4
4
|
import { UpperCorrector } from '../../../classes/base/correctors';
|
|
5
5
|
import { DataFormBase } from '../../../classes/base/data-form-base';
|
|
6
|
-
import { DropdownControlSchema, MaskControlSchema, TextControlSchema } from '../../../classes/form-schema';
|
|
6
|
+
import { CheckboxControlSchema, DropdownControlSchema, MaskControlSchema, TextControlSchema } from '../../../classes/form-schema';
|
|
7
7
|
import { NotifierService } from '../../../services/notifier.service';
|
|
8
8
|
import { StateMachinesConnectionReceiverComponent } from '../statemachines-connection-receiver/statemachines-connection-receiver.component';
|
|
9
9
|
import { StateMachinesConnectionSenderComponent } from '../statemachines-connection-sender/statemachines-connection-sender.component';
|
|
@@ -56,6 +56,12 @@ export class StateMachinesConnectionMetadataComponent extends DataFormBase {
|
|
|
56
56
|
defaultValue: 1,
|
|
57
57
|
mdWidth: 1
|
|
58
58
|
}),
|
|
59
|
+
new CheckboxControlSchema({
|
|
60
|
+
label: 'Mở hộp thoại',
|
|
61
|
+
field: 'openPopup',
|
|
62
|
+
required: true,
|
|
63
|
+
mdWidth: 2
|
|
64
|
+
}),
|
|
59
65
|
new DropdownControlSchema({
|
|
60
66
|
field: 'icon',
|
|
61
67
|
label: 'Biểu tượng',
|
|
@@ -77,12 +83,13 @@ export class StateMachinesConnectionMetadataComponent extends DataFormBase {
|
|
|
77
83
|
field: 'code',
|
|
78
84
|
correctors: [new UpperCorrector()],
|
|
79
85
|
required: true,
|
|
80
|
-
mdWidth:
|
|
86
|
+
mdWidth: 3,
|
|
81
87
|
}),
|
|
82
88
|
new TextControlSchema({
|
|
83
89
|
label: 'Tên hành động',
|
|
84
90
|
field: 'name',
|
|
85
91
|
required: true,
|
|
92
|
+
mdWidth: 5
|
|
86
93
|
})
|
|
87
94
|
];
|
|
88
95
|
if (this.data && this.data.editing) {
|
|
@@ -96,10 +103,16 @@ export class StateMachinesConnectionMetadataComponent extends DataFormBase {
|
|
|
96
103
|
return __awaiter(this, void 0, void 0, function* () {
|
|
97
104
|
if (!this.isFormAdd) {
|
|
98
105
|
setMetadataConnection(evt.model, this.data);
|
|
106
|
+
// Set lại giá trị của openPopup vì đây là thuộc tính mới thêm
|
|
107
|
+
// Các cấu hình workflow đang k có sẵn value nên sẽ k pass được require của control
|
|
108
|
+
if (!evt.model.openPopup) {
|
|
109
|
+
evt.model.openPopup = false;
|
|
110
|
+
}
|
|
99
111
|
this.source = this.data.source;
|
|
100
112
|
}
|
|
101
113
|
else {
|
|
102
114
|
evt.model.id = this._commonService.guid();
|
|
115
|
+
evt.model.openPopup = true;
|
|
103
116
|
evt.model.data = {};
|
|
104
117
|
}
|
|
105
118
|
});
|
|
@@ -172,4 +185,4 @@ StateMachinesConnectionMetadataComponent.propDecorators = {
|
|
|
172
185
|
viewOnly: [{ type: Input }],
|
|
173
186
|
onRemove: [{ type: Output }]
|
|
174
187
|
};
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLW1ldGFkYXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3N0YXRlbWFjaGluZXMvc3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLW1ldGFkYXRhL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1tZXRhZGF0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQTZCLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzVJLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRTtJQUNyQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtJQUNsQyxFQUFFLEVBQUUsRUFB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QUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7SUFDTCxDQUFDOzs7WUF4SkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxtQ0FBbUM7Z0JBQzdDLG9uRUFBaUU7Z0JBRWpFLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDOzthQUN2Qzs7O1lBMUJpQyxRQUFRO1lBS2pDLGVBQWU7Ozt5QkF1Qm5CLFNBQVMsU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzJCQUN6QyxTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTttQ0FDM0MsU0FBUyxTQUFDLHNCQUFzQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTsyQ0FDbEQsU0FBUyxTQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs4QkFDMUQsS0FBSzttQkFDTCxLQUFLOzJCQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXBwZXJDb3JyZWN0b3IgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29ycmVjdG9ycyc7XHJcbmltcG9ydCB7IERhdGFGb3JtQmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRXZlbnREYXRhLCBGb3JtU2NoZW1hQmFzZSwgTWFza0NvbnRyb2xTY2hlbWEsIFRleHRDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzQ29ubmVjdGlvblJlY2VpdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vc3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLXJlY2VpdmVyL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1yZWNlaXZlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzQ29ubmVjdGlvblNlbmRlckNvbXBvbmVudCB9IGZyb20gJy4uL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1zZW5kZXIvc3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLXNlbmRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBzZXRNZXRhZGF0YUNvbm5lY3Rpb24gfSBmcm9tICcuLi91dGlscy91dGlscyc7XHJcblxyXG5leHBvcnQgY29uc3QgZGF0YVNvdXJjZUljb24gPSBbXHJcbiAgICB7IGlkOiAncmVwbGF5JywgdGVuOiAncGkgcGktcmVwbGF5JyB9LFxyXG4gICAgeyBpZDogJ3NoYXJlJywgdGVuOiAncGkgcGktc2VuZCcgfSxcclxuICAgIHsgaWQ6ICdjaGVjaycsIHRlbjogJ3BpIHBpLWNoZWNrJyB9LFxyXG4gICAgeyBpZDogJ3RpbWVzJywgdGVuOiAncGkgcGktdGltZXMnIH0sXHJcbiAgICB7IGlkOiAnYmFuJywgdGVuOiAncGkgcGktYmFuJyB9LFxyXG4gICAgeyBpZDogJ2ZvcndhcmQnLCB0ZW46ICdwaSBwaS1mb3J3YXJkJyB9LFxyXG4gICAgeyBpZDogJ2xpbmsnLCB0ZW46ICdwaSBwaS1saW5rJyB9LFxyXG4gICAgeyBpZDogJ2NvbW1lbnQnLCB0ZW46ICdwaSBwaS1jb21tZW50cycgfVxyXG5dO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1tZXRhZGF0YScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vc3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLW1ldGFkYXRhLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1tZXRhZGF0YS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTdGF0ZU1hY2hpbmVzQ29ubmVjdGlvbk1ldGFkYXRhQ29tcG9uZW50IGV4dGVuZHMgRGF0YUZvcm1CYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3NlbmRlckZvcm0nLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VuZGVyRm9ybTogU3RhdGVNYWNoaW5lc0Nvbm5lY3Rpb25TZW5kZXJDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdyZWNlaXZlckZvcm0nLCB7IHN0YXRpYzogZmFsc2UgfSkgcmVjZWl2ZXJGb3JtOiBTdGF0ZU1hY2hpbmVzQ29ubmVjdGlvblJlY2VpdmVyQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVEcm9wZG93bkljb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZURyb3Bkb3duSWNvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlRHJvcGRvd25JY29uU2VsZWN0ZWQnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZURyb3Bkb3duSWNvblNlbGVjdGVkOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQElucHV0KCkgZGVzaWduZXJDb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuICAgIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICAgIEBJbnB1dCgpIG1hY2hpbmVzRGF0YTogYW55O1xyXG4gICAgQElucHV0KCkgdmlld09ubHk6IGJvb2xlYW47XHJcbiAgICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBzb3VyY2U6IGFueTtcclxuXHJcbiAgICBpc0Zvcm1BZGQgPSB0cnVlO1xyXG4gICAgY29udGFpbmVySWQ6IHN0cmluZztcclxuICAgIGhlaWdodERlc2lnbmVyOiBudW1iZXI7XHJcbiAgICBkYXRhRGVzaWduID0ge1xyXG4gICAgICAgIG1hY2hpbmVzOiBbXSxcclxuICAgICAgICBjb25uZWN0aW9uczogW11cclxuICAgIH07XHJcblxyXG4gICAgZm9ybVJlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBtYWluVGFiRGF0YTogYW55W10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAnc2VuZGVyJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXRhZ3MnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ1Bow6JuIHF1eeG7gW4gdGhhbyB0w6FjJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAncmVjZWl2ZXInLFxyXG4gICAgICAgICAgICBpY29uOiAncGkgcGktdXNlcnMnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ05nxrDhu51pIG5o4bqtbicsXHJcbiAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgICAgICB0aGlzLmF1dG9HZXREZXRhaWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmF1dG9TYXZlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lcklkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgdGhpcy5kb05vdENoZWNrQmFzZVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybVNjaGVtYUJhc2VbXT5bXHJcbiAgICAgICAgICAgIG5ldyBNYXNrQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3NvVGh1VHUnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdT4buRIHRo4bupIHThu7EnLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAxLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ljb24nLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdCaeG7g3UgdMaw4bujbmcnLFxyXG4gICAgICAgICAgICAgICAgZnVsbExhYmVsOiAnQmnhu4N1IHTGsOG7o25nJyxcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogMSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRhdGFTb3VyY2VJY29uWzBdLmlkLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogW1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmRhdGFTb3VyY2VJY29uXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgcGFuZWxDbGFzczogJ19fd29ya2Zsb3ctc2V0dGluZy1pY29uJyxcclxuICAgICAgICAgICAgICAgIHNob3dDbGVhcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUl0ZW06IHRoaXMudGVtcGxhdGVEcm9wZG93bkljb24sXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNlbGVjdGVkSXRlbTogdGhpcy50ZW1wbGF0ZURyb3Bkb3duSWNvblNlbGVjdGVkXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgVGV4dENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw6MgaMOgbmggxJHhu5luZycsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgY29ycmVjdG9yczogW25ldyBVcHBlckNvcnJlY3RvcigpXSxcclxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgbWRXaWR0aDogNCxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBUZXh0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1TDqm4gaMOgbmggxJHhu5luZycsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuZWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmlzRm9ybUFkZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Zvcm1BZGQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkZvcm1Jbml0aWFsaXplZChldnQ6IEV2ZW50RGF0YSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0Zvcm1BZGQpIHtcclxuICAgICAgICAgICAgc2V0TWV0YWRhdGFDb25uZWN0aW9uKGV2dC5tb2RlbCwgdGhpcy5kYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLmRhdGEuc291cmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZXZ0Lm1vZGVsLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgICAgIGV2dC5tb2RlbC5kYXRhID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlRm9ybSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbm4gb2YgdGhpcy5tYWNoaW5lc0RhdGEuY29ubmVjdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IHRoaXMuc291cmNlXHJcbiAgICAgICAgICAgICAgICAmJiBjb25uLmNvZGUudG9VcHBlckNhc2UoKSA9PSB0aGlzLm1vZGVsLmRhdGEuY29kZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb25uLmVkaXRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBNw6MgaMOgbmggxJHhu5luZyBcIiR7dGhpcy5tb2RlbC5kYXRhLmNvZGV9XCIgxJHDoyB04buTbiB04bqhaSwgdnVpIGzDsm5nIMSR4bq3dCBtw6Mga2jDoWMhYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlTWFudWFsU2F2ZSgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmRhdGEuZGF0YSA9IHt9O1xyXG4gICAgICAgIGNvbnN0IGRhdGFQbHVzID0gdGhpcy5tb2RlbC5kYXRhLmRhdGE7XHJcbiAgICAgICAgY29uc3QgZGF0YVNlbmRlciA9IHRoaXMuc2VuZGVyRm9ybS5nZXRNb2RlbERhdGEoKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFQbHVzLCBkYXRhU2VuZGVyKTtcclxuICAgICAgICBjb25zdCBkYXRhUmVjZWl2ZXIgPSBhd2FpdCB0aGlzLnJlY2VpdmVyRm9ybS5nZXRNb2RlbERhdGEoKTtcclxuICAgICAgICBpZiAoZGF0YVJlY2VpdmVyID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhUGx1cywgZGF0YVJlY2VpdmVyKTtcclxuICAgICAgICB0aGlzLm9uU2F2ZWQuZW1pdCh0aGlzLm1vZGVsLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShldnQpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLmNvZGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBtdeG7kW4geMOzYSDEkcaw4budbmcgbuG7kWkgJyArIHRoaXMuZGF0YS5jb2RlICsgJyAtICcgKyB0aGlzLmRhdGEubmFtZSArICc/JykudGhlbigocnMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbChldnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUuZW1pdChldnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNhbmNlbChldnQpO1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLW1ldGFkYXRhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3N0YXRlbWFjaGluZXMvc3RhdGVtYWNoaW5lcy1jb25uZWN0aW9uLW1ldGFkYXRhL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1tZXRhZGF0YS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQTZCLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0osT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLGtGQUFrRixDQUFDO0FBQzVJLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDhFQUE4RSxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRTtJQUNyQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtJQUNsQyxF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SUFBSSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDNUgsSUFBSSxFQUFFLEVBQUU7b0JBQ0osSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtJQUNMLENBQUM7OztZQXJLSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1DQUFtQztnQkFDN0Msb25FQUFpRTtnQkFFakUsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7O2FBQ3ZDOzs7WUExQmlDLFFBQVE7WUFLakMsZUFBZTs7O3lCQXVCbkIsU0FBUyxTQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7MkJBQ3pDLFNBQVMsU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO21DQUMzQyxTQUFTLFNBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzJDQUNsRCxTQUFTLFNBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzhCQUMxRCxLQUFLO21CQUNMLEtBQUs7MkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVcHBlckNvcnJlY3RvciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb3JyZWN0b3JzJztcclxuaW1wb3J0IHsgRGF0YUZvcm1CYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtZm9ybS1iYXNlJztcclxuaW1wb3J0IHsgQ2hlY2tib3hDb250cm9sU2NoZW1hLCBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIEV2ZW50RGF0YSwgRm9ybVNjaGVtYUJhc2UsIE1hc2tDb250cm9sU2NoZW1hLCBUZXh0Q29udHJvbFNjaGVtYSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc0Nvbm5lY3Rpb25SZWNlaXZlckNvbXBvbmVudCB9IGZyb20gJy4uL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1yZWNlaXZlci9zdGF0ZW1hY2hpbmVzLWNvbm5lY3Rpb24tcmVjZWl2ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc0Nvbm5lY3Rpb25TZW5kZXJDb21wb25lbnQgfSBmcm9tICcuLi9zdGF0ZW1hY2hpbmVzLWNvbm5lY3Rpb24tc2VuZGVyL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1zZW5kZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgc2V0TWV0YWRhdGFDb25uZWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRhdGFTb3VyY2VJY29uID0gW1xyXG4gICAgeyBpZDogJ3JlcGxheScsIHRlbjogJ3BpIHBpLXJlcGxheScgfSxcclxuICAgIHsgaWQ6ICdzaGFyZScsIHRlbjogJ3BpIHBpLXNlbmQnIH0sXHJcbiAgICB7IGlkOiAnY2hlY2snLCB0ZW46ICdwaSBwaS1jaGVjaycgfSxcclxuICAgIHsgaWQ6ICd0aW1lcycsIHRlbjogJ3BpIHBpLXRpbWVzJyB9LFxyXG4gICAgeyBpZDogJ2JhbicsIHRlbjogJ3BpIHBpLWJhbicgfSxcclxuICAgIHsgaWQ6ICdmb3J3YXJkJywgdGVuOiAncGkgcGktZm9yd2FyZCcgfSxcclxuICAgIHsgaWQ6ICdsaW5rJywgdGVuOiAncGkgcGktbGluaycgfSxcclxuICAgIHsgaWQ6ICdjb21tZW50JywgdGVuOiAncGkgcGktY29tbWVudHMnIH1cclxuXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzdGF0ZW1hY2hpbmVzLWNvbm5lY3Rpb24tbWV0YWRhdGEnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N0YXRlbWFjaGluZXMtY29ubmVjdGlvbi1tZXRhZGF0YS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zdGF0ZW1hY2hpbmVzLWNvbm5lY3Rpb24tbWV0YWRhdGEuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3RhdGVNYWNoaW5lc0Nvbm5lY3Rpb25NZXRhZGF0YUNvbXBvbmVudCBleHRlbmRzIERhdGFGb3JtQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdzZW5kZXJGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbmRlckZvcm06IFN0YXRlTWFjaGluZXNDb25uZWN0aW9uU2VuZGVyQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgncmVjZWl2ZXJGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIHJlY2VpdmVyRm9ybTogU3RhdGVNYWNoaW5lc0Nvbm5lY3Rpb25SZWNlaXZlckNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlRHJvcGRvd25JY29uJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVEcm9wZG93bkljb246IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZURyb3Bkb3duSWNvblNlbGVjdGVkJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVEcm9wZG93bkljb25TZWxlY3RlZDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBJbnB1dCgpIGRlc2lnbmVyQ29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcbiAgICBASW5wdXQoKSBkYXRhOiBhbnk7XHJcbiAgICBASW5wdXQoKSBtYWNoaW5lc0RhdGE6IGFueTtcclxuICAgIEBJbnB1dCgpIHZpZXdPbmx5OiBib29sZWFuO1xyXG4gICAgQE91dHB1dCgpIG9uUmVtb3ZlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgc291cmNlOiBhbnk7XHJcblxyXG4gICAgaXNGb3JtQWRkID0gdHJ1ZTtcclxuICAgIGNvbnRhaW5lcklkOiBzdHJpbmc7XHJcbiAgICBoZWlnaHREZXNpZ25lcjogbnVtYmVyO1xyXG4gICAgZGF0YURlc2lnbiA9IHtcclxuICAgICAgICBtYWNoaW5lczogW10sXHJcbiAgICAgICAgY29ubmVjdGlvbnM6IFtdXHJcbiAgICB9O1xyXG5cclxuICAgIGZvcm1SZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbWFpblRhYkRhdGE6IGFueVtdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3NlbmRlcicsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS10YWdzJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdQaMOibiBxdXnhu4FuIHRoYW8gdMOhYydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3JlY2VpdmVyJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXVzZXJzJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBuaOG6rW4nLFxyXG4gICAgICAgICAgICBhY3RpdmU6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5hdXRvR2V0RGV0YWlsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hdXRvU2F2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJJZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgIHRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuc2NoZW1hID0gPEZvcm1TY2hlbWFCYXNlW10+W1xyXG4gICAgICAgICAgICBuZXcgTWFza0NvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzb1RodVR1JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnU+G7kSB0aOG7qSB04buxJyxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogMSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDFcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBDaGVja2JveENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdN4bufIGjhu5lwIHRob+G6oWknLFxyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdvcGVuUG9wdXAnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAyXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWNvbicsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0Jp4buDdSB0xrDhu6NuZycsXHJcbiAgICAgICAgICAgICAgICBmdWxsTGFiZWw6ICdCaeG7g3UgdMaw4bujbmcnLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZGF0YVNvdXJjZUljb25bMF0uaWQsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uZGF0YVNvdXJjZUljb25cclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiAnX193b3JrZmxvdy1zZXR0aW5nLWljb24nLFxyXG4gICAgICAgICAgICAgICAgc2hvd0NsZWFyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlSXRlbTogdGhpcy50ZW1wbGF0ZURyb3Bkb3duSWNvbixcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlU2VsZWN0ZWRJdGVtOiB0aGlzLnRlbXBsYXRlRHJvcGRvd25JY29uU2VsZWN0ZWRcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBUZXh0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoyBow6BuaCDEkeG7mW5nJyxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICBjb3JyZWN0b3JzOiBbbmV3IFVwcGVyQ29ycmVjdG9yKCldLFxyXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAzLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IFRleHRDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVMOqbiBow6BuaCDEkeG7mW5nJyxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5lZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGb3JtQWRkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzRm9ybUFkZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRm9ybUluaXRpYWxpemVkKGV2dDogRXZlbnREYXRhKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRm9ybUFkZCkge1xyXG4gICAgICAgICAgICBzZXRNZXRhZGF0YUNvbm5lY3Rpb24oZXZ0Lm1vZGVsLCB0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAvLyBTZXQgbOG6oWkgZ2nDoSB0cuG7iyBj4bunYSBvcGVuUG9wdXAgdsOsIMSRw6J5IGzDoCB0aHXhu5ljIHTDrW5oIG3hu5tpIHRow6ptXHJcbiAgICAgICAgICAgIC8vIEPDoWMgY+G6pXUgaMOsbmggd29ya2Zsb3cgxJFhbmcgayBjw7Mgc+G6tW4gdmFsdWUgbsOqbiBz4bq9IGsgcGFzcyDEkcaw4bujYyByZXF1aXJlIGPhu6dhIGNvbnRyb2xcclxuICAgICAgICAgICAgaWYgKCFldnQubW9kZWwub3BlblBvcHVwKSB7XHJcbiAgICAgICAgICAgICAgICBldnQubW9kZWwub3BlblBvcHVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLmRhdGEuc291cmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZXZ0Lm1vZGVsLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgICAgIGV2dC5tb2RlbC5vcGVuUG9wdXAgPSB0cnVlO1xyXG4gICAgICAgICAgICBldnQubW9kZWwuZGF0YSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB2YWxpZGF0ZUZvcm0oKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb25uIG9mIHRoaXMubWFjaGluZXNEYXRhLmNvbm5lY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSB0aGlzLnNvdXJjZVxyXG4gICAgICAgICAgICAgICAgJiYgY29ubi5jb2RlLnRvVXBwZXJDYXNlKCkgPT0gdGhpcy5tb2RlbC5kYXRhLmNvZGVcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29ubi5lZGl0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgTcOjIGjDoG5oIMSR4buZbmcgXCIke3RoaXMubW9kZWwuZGF0YS5jb2RlfVwiIMSRw6MgdOG7k24gdOG6oWksIHZ1aSBsw7JuZyDEkeG6t3QgbcOjIGtow6FjIWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZU1hbnVhbFNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmRhdGEgPSB7fTtcclxuICAgICAgICBjb25zdCBkYXRhUGx1cyA9IHRoaXMubW9kZWwuZGF0YS5kYXRhO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTZW5kZXIgPSB0aGlzLnNlbmRlckZvcm0uZ2V0TW9kZWxEYXRhKCk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhUGx1cywgZGF0YVNlbmRlcik7XHJcbiAgICAgICAgY29uc3QgZGF0YVJlY2VpdmVyID0gYXdhaXQgdGhpcy5yZWNlaXZlckZvcm0uZ2V0TW9kZWxEYXRhKCk7XHJcbiAgICAgICAgaWYgKGRhdGFSZWNlaXZlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YVBsdXMsIGRhdGFSZWNlaXZlcik7XHJcbiAgICAgICAgdGhpcy5vblNhdmVkLmVtaXQodGhpcy5tb2RlbC5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUoZXZ0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jb2RlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgbXXhu5FuIHjDs2EgxJHGsOG7nW5nIG7hu5FpICcgKyB0aGlzLmRhdGEuY29kZSArICcgLSAnICsgdGhpcy5kYXRhLm5hbWUgKyAnPycpLnRoZW4oKHJzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDYW5jZWwoZXZ0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUmVtb3ZlLmVtaXQoZXZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVDYW5jZWwoZXZ0KTtcclxuICAgICAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGV2dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|