tnx-shared 5.1.509 → 5.1.511
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 +8 -3
- 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/components/dropdown/dropdown.component.d.ts +3 -1
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +2 -2
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/dropdown/dropdown.component.js +7 -2
- package/fesm2015/tnx-shared.js +8 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -73,7 +73,7 @@ export class CrudListComponent extends ListComponentBase {
|
|
|
73
73
|
var _a;
|
|
74
74
|
const defaultSetting = new CrudListSetting();
|
|
75
75
|
if (this.environment.customizeUi) {
|
|
76
|
-
if (this.setting.showExportWordSelectedItems
|
|
76
|
+
if (this.setting.showExportWordSelectedItems == defaultSetting.showExportWordSelectedItems
|
|
77
77
|
&& this.environment.customizeUi.showExportWordSelectedItems != undefined
|
|
78
78
|
&& this.setting.showExportWordSelectedItems != this.environment.customizeUi.showExportWordSelectedItems) {
|
|
79
79
|
this.setting.showExportWordSelectedItems = this.environment.customizeUi.showExportWordSelectedItems;
|
|
@@ -146,4 +146,4 @@ CrudListComponent.ctorParameters = () => [
|
|
|
146
146
|
CrudListComponent.propDecorators = {
|
|
147
147
|
commonSearch: [{ type: ViewChild, args: ['commonSearch',] }]
|
|
148
148
|
};
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFVbEcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUlwRCxZQUNXLFNBQW1CO1FBRTFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUg5QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBcUV0QiwyQkFBc0IsR0FBRyxDQUFPLE9BQTBCLEVBQUUsS0FBTSxFQUFFLE9BQVEsRUFBRSxJQUFLLEVBQUUsRUFBRTtZQUNuRixNQUFNLFNBQVMsR0FBRztnQkFDZCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsSUFBSTthQUNQLENBQUM7WUFFRixRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNuQixJQUFJOzRCQUNBLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdEM7d0JBQ0QsV0FBTTt5QkFDTDtx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RyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hELFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ3pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7b0JBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUM5QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDVjtpQkFDSTtnQkFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzthQUNwQztRQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7OztZQTVFSixTQUFTLFNBQUM7Z0JBQ1AsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsV0FBVztnQkFDckIsNGxsRUFBeUM7Z0JBRXpDLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7O2FBQ3JDOzs7WUFkbUIsUUFBUTs7OzJCQWdCdkIsU0FBUyxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9saXN0LWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IENydWRMaXN0U2V0dGluZywgRXZlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21tb25TZWFyY2hGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uLXNlYXJjaC1mb3JtL2NvbW1vbi1zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZFNldHRpbmcgfSBmcm9tICcuLi8uLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLXNldHRpbmdzJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2NydWQtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NydWQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDcnVkTGlzdENvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY29tbW9uU2VhcmNoJykgY29tbW9uU2VhcmNoOiBDb21tb25TZWFyY2hGb3JtQ29tcG9uZW50O1xuICAgIGV2ZW50VHlwZSA9IEV2ZW50VHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSBkZWZhdWx0U2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXNcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zICE9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyA9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGE/LmN1cnJlbnRBcHBNZXRhZGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2V0dGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLnNldHRpbmc7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2V0dGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNldHRpbmdba2V5XSA9PSB0aGlzLnNldHRpbmdba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2V0dGluZ1trZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gc2V0dGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdba2V5XSA9IHNldHRpbmdba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRmllbGRWYWx1ZUNoYW5nZSA9IGFzeW5jIChjb250cm9sOiBGaWxlVXBsb2FkU2V0dGluZywgZXZlbnQ/LCByb3dEYXRhPywgdHlwZT8pID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuQ0hBTkdFOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLklOSVQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25Jbml0KGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuREVMRVRFRDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uUmVtb3ZlKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU0VMRUNUOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vblNlbGVjdGVkKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuVVBMT0FERUQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vblVwbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uVXBsb2FkZWQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFVbEcsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUlwRCxZQUNXLFNBQW1CO1FBRTFCLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUg5QixjQUFTLEdBQUcsU0FBUyxDQUFDO1FBcUV0QiwyQkFBc0IsR0FBRyxDQUFPLE9BQTBCLEVBQUUsS0FBTSxFQUFFLE9BQVEsRUFBRSxJQUFLLEVBQUUsRUFBRTtZQUNuRixNQUFNLFNBQVMsR0FBRztnQkFDZCxLQUFLO2dCQUNMLE9BQU87Z0JBQ1AsSUFBSTthQUNQLENBQUM7WUFFRixRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkIsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNuQixJQUFJOzRCQUNBLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt5QkFDdEM7d0JBQ0QsV0FBTTt5QkFDTDtx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RyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2hELFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ3pDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7b0JBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUM5QyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDVjtpQkFDSTtnQkFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQzthQUNwQztRQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7OztZQTVFSixTQUFTLFNBQUM7Z0JBQ1AsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsV0FBVztnQkFDckIsNGxsRUFBeUM7Z0JBRXpDLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7O2FBQ3JDOzs7WUFkbUIsUUFBUTs7OzJCQWdCdkIsU0FBUyxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9saXN0LWNvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IENydWRMaXN0U2V0dGluZywgRXZlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21tb25TZWFyY2hGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uLXNlYXJjaC1mb3JtL2NvbW1vbi1zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVVwbG9hZFNldHRpbmcgfSBmcm9tICcuLi8uLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLXNldHRpbmdzJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2NydWQtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NydWQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbRGVjaW1hbFBpcGUsIERhdGVQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBDcnVkTGlzdENvbXBvbmVudCBleHRlbmRzIExpc3RDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnY29tbW9uU2VhcmNoJykgY29tbW9uU2VhcmNoOiBDb21tb25TZWFyY2hGb3JtQ29tcG9uZW50O1xuICAgIGV2ZW50VHlwZSA9IEV2ZW50VHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyA9PSBkZWZhdWx0U2V0dGluZy5zaG93RXhwb3J0V29yZFNlbGVjdGVkSXRlbXNcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmVudmlyb25tZW50LmN1c3RvbWl6ZVVpLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyAhPSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zICE9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNob3dFeHBvcnRXb3JkU2VsZWN0ZWRJdGVtcyA9IHRoaXMuZW52aXJvbm1lbnQuY3VzdG9taXplVWkuc2hvd0V4cG9ydFdvcmRTZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvb3RDb250ZXh0LmRhdGE/LmN1cnJlbnRBcHBNZXRhZGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9vdENvbnRleHQuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuc2V0dGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLnJvb3RDb250ZXh0LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLnNldHRpbmc7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2V0dGluZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNldHRpbmdba2V5XSA9PSB0aGlzLnNldHRpbmdba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2V0dGluZ1trZXldICE9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nW2tleV0gIT0gc2V0dGluZ1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdba2V5XSA9IHNldHRpbmdba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIGFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKSB7XG4gICAgICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nIHx8IHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5jb250YWluZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucC1kYXRhdGFibGUtbG9hZGluZy1vdmVybGF5Jyk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQuY2xvc2VzdCgncC10YWJsZScpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZVNjcm9sbEJhckNvbnRlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlU2Nyb2xsQmFyQ29udGVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3BzLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5vZGVTY3JvbGxCYXJDb250ZW50LnBhcmVudE5vZGUucHJlcGVuZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5wYXJlbnROb2RlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGggPSBlbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigncC10YWJsZSB0aGVhZCB0cjpmaXJzdC1jaGlsZCA+IHRoJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0VGhTaXplID0gZmlyc3RUaC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9hZGluZ0ljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wLWRhdGF0YWJsZS1sb2FkaW5nLWljb24nKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUobG9hZGluZ0ljb24pLmZvbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wID0gKGZpcnN0VGhTaXplLmhlaWdodCAtIGZvbnRTaXplKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSAoZmlyc3RUaFNpemUud2lkdGggLSBmb250U2l6ZSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5Ub3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICAgICAgICAgICAgICBsb2FkaW5nSWNvbi5zdHlsZS5tYXJnaW5MZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0sIDIwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRmllbGRWYWx1ZUNoYW5nZSA9IGFzeW5jIChjb250cm9sOiBGaWxlVXBsb2FkU2V0dGluZywgZXZlbnQ/LCByb3dEYXRhPywgdHlwZT8pID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuQ0hBTkdFOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChldmVudERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgRXZlbnRUeXBlLklOSVQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkluaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25Jbml0KGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuREVMRVRFRDoge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uUmVtb3ZlKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuU0VMRUNUOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vblNlbGVjdGVkKGV2ZW50RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBFdmVudFR5cGUuVVBMT0FERUQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vblVwbG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uVXBsb2FkZWQoZXZlbnREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -22,6 +22,7 @@ export class DropdownComponent extends ComponentBase {
|
|
|
22
22
|
this.control = new DropdownControlSchema();
|
|
23
23
|
this.defaultLabel = '';
|
|
24
24
|
this.appendTo = 'body';
|
|
25
|
+
this.data = {};
|
|
25
26
|
this.defaultSelectedStyleClass = 'custom-select-item';
|
|
26
27
|
this._itemSelectedStyleClass = this.defaultSelectedStyleClass;
|
|
27
28
|
this.onInit = new EventEmitter();
|
|
@@ -906,11 +907,14 @@ export class DropdownComponent extends ComponentBase {
|
|
|
906
907
|
this._getData();
|
|
907
908
|
});
|
|
908
909
|
}
|
|
910
|
+
checkDisabled(control) {
|
|
911
|
+
return (this.data._status && this.data._status[control.field] && this.data._status[control.field].disabled === true) || control.disabled;
|
|
912
|
+
}
|
|
909
913
|
}
|
|
910
914
|
DropdownComponent.decorators = [
|
|
911
915
|
{ type: Component, args: [{
|
|
912
916
|
selector: 'dropdown',
|
|
913
|
-
template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" pTooltip=\"D\u1EEF li\u1EC7u s\u1EBD \u0111\u01B0\u1EE3c l\u00E0m m\u1EDBi ghi t\u00ECm ki\u1EBFm\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" [options]=\"dataSourceInternal\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"control
|
|
917
|
+
template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" pTooltip=\"D\u1EEF li\u1EC7u s\u1EBD \u0111\u01B0\u1EE3c l\u00E0m m\u1EDBi ghi t\u00ECm ki\u1EBFm\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" [options]=\"dataSourceInternal\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"checkDisabled(control)\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\n <ng-container\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\n </ng-template>\n </p-dropdown>\n <p-multiSelect *ngIf=\"control.multiple\" [options]=\"dataSourceInternal\" [filter]=\"control.filter\"\n [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\" [panelStyleClass]=\"getPanelClass()\"\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"control.disabled ? true : null\"\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\n (onPanelHide)=\"onHideHandler($event)\">\n <ng-template pTemplate=\"selectedItems\" let-value>\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\n <ng-container *ngIf=\"value && value.length > 0\">\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\n {{selectedItem[control.displayField]}}<span class=\"remove-item\"\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\n </span>\n </ng-container>\n </ng-template>\n </p-multiSelect>\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\n <span #buttonSetting class=\"button-setting hide pi pi-cog\" (click)=\"showFormSetting()\"></span>\n <after-view-checked *ngIf=\"!loading\" (loaded)=\"handleLoaded()\"></after-view-checked>\n <button *ngIf=\"control.quickAdd && (control.cols || control.quickAddTemplate)\" type=\"button\" pButton\n icon=\"pi pi-plus\" class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\"\n tooltipPosition=\"top\" (click)=\"showFormQuickAdd()\"></button>\n</div>\n<tn-dialog *ngIf=\"quickAddDialogModel.showEditForm\" #dialog [header]=\"quickAddDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"quickAddDialogModel.showEditForm = false\">\n <quick-add-form *ngIf=\"control.cols\" #formBase [parentModel]=\"model\" [parentContext]=\"context\"\n [model]=\"quickAddDialogModel.data.formModel\" [control]=\"control\" [baseService]=\"control.baseService\"\n (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\n </quick-add-form>\n</tn-dialog>\n<tn-dialog *ngIf=\"settingDialogModel.showEditForm\" #dialog [header]=\"settingDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"settingDialogModel.showEditForm = false\">\n <dropdown-setting-form #formBase [model]=\"settingDialogModel.data.formModel\" (onSaved)=\"handleSavedSetting()\"\n (onCancel)=\"settingDialogModel.showEditForm = false\">\n </dropdown-setting-form>\n</tn-dialog>\n<ng-container *ngTemplateOutlet=\"control.quickAddTemplate; context: {\n handleSaved: handleSaved,\n handleCancel: handleCancel,\n dialogModel: quickAddDialogModel\n}\"></ng-container>",
|
|
914
918
|
providers: [ComponentContextService],
|
|
915
919
|
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}.tn-dropdown .server-load-info{display:none}.tn-dropdown.server-load{position:relative}.tn-dropdown.server-load .server-load-info{display:block;position:absolute;top:0;left:0;width:6px;height:6px}.tn-dropdown.server-load .server-load-info:before{content:\"\";display:block;position:absolute;top:-6px;left:-6px;z-index:1;transform:rotate(45deg);border:6px solid transparent;border-right-color:green}.input-mask{position:absolute;z-index:1;width:100%;padding-left:12px;padding-right:32px;box-sizing:border-box;border:1px solid transparent;outline:none;background:transparent;border-radius:3px}.input-mask.hide{display:none}.input-mask:focus{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3}.button-setting{position:absolute;width:30px;height:30px;top:1px;right:1px;display:flex;align-items:center;justify-content:center;z-index:1;cursor:pointer;background:#fff;border-radius:3px}.button-setting.hide{display:none}.custom-select-item{display:inline-flex;align-items:center;background:#d2eefb;border-radius:3px;padding:3px 5px;margin:0 0 0 3px;border:1px solid #a9d8ff}.custom-select-item>span{font-size:12px;color:#555;margin-left:3px}.custom-select-item>span i{font-size:10px}.custom-select-item.min{padding:1px 5px;margin-left:2px}.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{padding:.2em;height:22px;width:calc(100% - 2px);box-sizing:border-box;text-indent:1.5em;left:1px;top:1px}::ng-deep .ui-multiselect-filter-container .input-mask:focus{left:1px;width:calc(100% - 2px)}"]
|
|
916
920
|
},] }
|
|
@@ -934,6 +938,7 @@ DropdownComponent.propDecorators = {
|
|
|
934
938
|
appendTo: [{ type: Input }],
|
|
935
939
|
dataSource: [{ type: Input }],
|
|
936
940
|
value: [{ type: Input }],
|
|
941
|
+
data: [{ type: Input }],
|
|
937
942
|
itemSelectedStyleClass: [{ type: Input }],
|
|
938
943
|
onInit: [{ type: Output }],
|
|
939
944
|
onChanged: [{ type: Output }],
|
|
@@ -951,4 +956,4 @@ DropdownComponent.propDecorators = {
|
|
|
951
956
|
valueChange: [{ type: Output }],
|
|
952
957
|
adjustValue: [{ type: Output }]
|
|
953
958
|
};
|
|
954
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFN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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgRGlhbG9nTW9kZWwsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IGFwcGVuZERlZmF1bHRGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgS2V5U3RvcmFnZURyb3Bkb3duU2V0dGluZyB9IGZyb20gJy4vbW9kZWxzL2NvbnN0JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdlbCcpIGVsOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0TWFzaycpIGlucHV0OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2J1dHRvblNldHRpbmcnKSBidXR0b25TZXR0aW5nOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoRHJvcGRvd24pIGRyb3Bkb3duOiBEcm9wZG93bjtcbiAgICBAVmlld0NoaWxkKE11bHRpU2VsZWN0KSBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3Q7XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvd0NsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLnNob3dDbGVhcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNob3dDbGVhciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGlzYWJsZURpc3BsYXlGaWVsZFNlcnZlclNlYXJjaCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5maWx0ZXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoKTtcbiAgICBASW5wdXQoKSBkZWZhdWx0TGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55ID0gJ2JvZHknO1xuXG4gICAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgMSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fcmV0dXJuVmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmaXJlIGV2ZW50IMSRaeG7gXUgY2jhu4luaCB2YWx1ZSB04burIFt2YWx1ZTogZ3VpZF0gPT4ge1tmaWVsZFZhbHVlXTogW3ZhbHVlOiBndWlkXSwgLi4uWzEgc+G7kSB0csaw4budbmcga2jDoWMgbuG7r2EgdHJvbmcgZGF0YXNvdXJjZV19XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3MgPSAnY3VzdG9tLXNlbGVjdC1pdGVtJztcbiAgICBfaXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IHRoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzcztcbiAgICBASW5wdXQoKSBzZXQgaXRlbVNlbGVjdGVkU3R5bGVDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IGAke3RoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzc30gJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbVNlbGVjdGVkU3R5bGVDbGFzcyA9IGAke3RoaXMuZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzc30gJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ29sbGFwc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRXhwYW5kOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRyb3Bkb3duQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2hvd1NtYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uSGlkZVNtYXJ0RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRhdGFTb3VyY2VMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgYWRqdXN0VmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIF91blN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBkYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICBkYXRhU291cmNlU2VsZWN0ZWQgPSBbXTtcbiAgICBzZWxlY3RlZFZhbHVlQmVmb3JlOiBhbnk7XG4gICAgX3ZhbHVlOiBhbnk7XG4gICAgX3JldHVyblZhbHVlOiBhbnk7XG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XG4gICAgdG9vbHRpcDogc3RyaW5nO1xuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucyA9ICcxOTVtcyBlYXNlLWluJztcbiAgICBzaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnMjI1bXMgZWFzZS1vdXQnO1xuXG4gICAgaW5wdXRFbG06IGFueTtcbiAgICBhdXRvZm9jdXNTZWxlY3RlZEl0ZW06IGJvb2xlYW4gPSB0cnVlO1xuICAgIGdldEZpbHRlck9uU2VydmVyU2VhcmNoOiBGdW5jdGlvbjtcbiAgICB2YWx1ZVNlYXJjaFNlcnZlciA9ICcnO1xuICAgIGtleVVwID0gbmV3IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4oKTtcbiAgICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBfaGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xuXG4gICAgcXVpY2tBZGREaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7fSk7XG4gICAgc2V0dGluZ0RpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ+G6pXUgaMOsbmggZHJvcGRvd24nXG4gICAgfSk7XG5cbiAgICBmbGFzaENhY2hlUGFyZW50OiBhbnlbXSA9IFtdO1xuICAgIGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgIGRlbGF5RmlsdGVyOiBudW1iZXIgPSAxMDA7XG4gICAgc2Nyb2xsQ29udGFpbmVyOiBhbnk7XG4gICAgdGltZW91dFNjcm9sbDogYW55O1xuICAgIGZpcnN0U2Nyb2xsOiBhbnkgPSB0cnVlO1xuICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBwYWdlOiBudW1iZXIgPSAxO1xuICAgIHRvdGFsUGFnZTogbnVtYmVyID0gMjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5xdWlja0FkZCkge1xuICAgICAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLmhlYWRlciA9IGBUaMOqbSBt4bubaSAke3RoaXMuY29udHJvbC5sYWJlbH1gO1xuICAgICAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLnBvcHVwU2l6ZSA9IHRoaXMuY29udHJvbC5wb3B1cFNpemU7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBmb3JtTW9kZWw6IG5ldyBDcnVkRm9ybURhdGEoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpdFBhbmVsKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc1dyYXBDb250ZW50ID0gJy0td3JhcC1jb250ZW50JztcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnBhbmVsQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyA9IGNsYXNzV3JhcENvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wucGFuZWxDbGFzcyArPSBgICR7Y2xhc3NXcmFwQ29udGVudH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9PSBudWxsICYmIHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID0gJ0NoxrBhIGNo4buNbiBi4bqjbiBnaGknO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFNldHRpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWF4SXRlbURpc3BsYXkgPSA5OTk5O1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRmlsdGVyRnVuY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5sb2FkT25Jbml0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLm9uSW5pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl91blN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5RmlsdGVyID0gMjAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5fcHJlZml4ICsgaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwICYmICF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGVsYXlTZWFyY2hUaW1lKCkge1xuICAgICAgICBjb25zdCBqc0Ryb3Bkb3duU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEtleVN0b3JhZ2VEcm9wZG93blNldHRpbmcpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gNTAwO1xuICAgICAgICBpZiAoanNEcm9wZG93blNldHRpbmcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd25TZXR0aW5nID0gSlNPTi5wYXJzZShqc0Ryb3Bkb3duU2V0dGluZyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gZHJvcGRvd25TZXR0aW5nLmRlbGF5U2VhcmNoVGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0IHx8IGlzTmFOKHJlc3VsdCkgfHwgcmVzdWx0IDwgMjAwKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAyMDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRBbGxQYXJlbnQocmVzdWx0LCBwYXJlbnRJZCkge1xuICAgICAgICBpZiAodGhpcy5mbGFzaENhY2hlUGFyZW50LnNvbWUocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSB0aGlzLmRyb3Bkb3duT3B0aW9ucy5maW5kKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XG4gICAgICAgIGlmIChpdGVtUGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BZGQgPSB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbVBhcmVudCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5jb250cm9sLmRpc2FibGVkUGFyZW50SXRlbVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW1BZGQpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhFeGlzdCA9IHRoaXMuZmxhc2hDYWNoZVBhcmVudC5maW5kSW5kZXgocSA9PiBxLnZhbHVlLl9sZXZlbCA9PSBpdGVtQWRkLnZhbHVlLl9sZXZlbCk7XG4gICAgICAgICAgICBpZiAoaW5kZXhFeGlzdCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50W2luZGV4RXhpc3RdID0gaXRlbUFkZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5wdXNoKGl0ZW1BZGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSBi4bqjbiBnaGkgY2hhIGPhu6dhIGLhuqNuIGdoaSBjaGFcbiAgICAgICAgICAgIHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKGl0ZW1QYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudElkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIHBhcmVudElkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFscmVhZHlIYXNQYXJlbnQob3B0aW9uczogYW55W10sIGluZGV4U3RhcnQ6IG51bWJlciwgcGFyZW50SWQ6IHN0cmluZywgbGV2ZWw6IG51bWJlcikge1xuICAgICAgICB3aGlsZSAoaW5kZXhTdGFydCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uc1tpbmRleFN0YXJ0XS52YWx1ZS5pZCA9PSBwYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9uc1tpbmRleFN0YXJ0XS52YWx1ZS5sZXZlbCA9PSBsZXZlbCAmJiB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpbmRleFN0YXJ0XSkgIT0gcGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGFzaENhY2hlUGFyZW50LnNvbWUocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGluZGV4U3RhcnQtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRJZEZyb21JdGVtKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgfVxuXG4gICAgbW9kaWZ5T3B0aW9uV2hlbkZpbHRlciA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25PcHRpb25zID0gdGhpcy5kcm9wZG93bi5fb3B0aW9ucztcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgbW9kaWZ5T3B0aW9uV2hlbkZpbHRlck11bHRpcGxlID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLm11bHRpU2VsZWN0Ll9vcHRpb25zO1xuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBfbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKG9wdGlvbnNbaV0pO1xuICAgICAgICAgICAgaWYgKHBhcmVudElkICE9IHRoaXMuZ3VpZEVtcHR5ICYmIHBhcmVudElkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBjw6FjIGLhuqNuIGdoaSBwaMOtYSB0csaw4bubYyB4ZW0gxJHDoyBjw7MgYuG6o24gZ2hpIGNoYSBjaMawYSAoQ2hvIMSR4bq/biBnaGkgZ+G6t3AgYuG6o24gZ2hpIGPDuW5nIGxldmVsIG5oxrBuZyBraMOhYyBwYXJlbnRJZClcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNQYXJlbnQgPSB0aGlzLmFscmVhZHlIYXNQYXJlbnQob3B0aW9ucywgaSAtIDEsIHBhcmVudElkLCBvcHRpb25zW2ldLmxldmVsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1BhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudChwYXJlbnRzLCBwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc3BsaWNlKGksIDAsIC4uLnBhcmVudHMucmV2ZXJzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gcGFyZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVGaWx0ZXJGdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5kaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5zb21lKGl0ZW0gPT4gaXRlbSA9PSB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5wdXNoKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGRbMF0sIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2ggPSB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcFZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goeyBmaWVsZDogZmllbGRTZWFyY2gsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCB2YWx1ZTogdG1wVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RGF0YShmaWx0ZXJQYXJlbnRzPzogRmlsdGVyW10pIHtcbiAgICAgICAgaWYgKCFmaWx0ZXJQYXJlbnRzKSBmaWx0ZXJQYXJlbnRzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyRnJvbVBhcmVudHMgPSBmaWx0ZXJQYXJlbnRzO1xuICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgcGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICBpZiAocGFnZSA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9mb2N1c1NlbGVjdGVkSXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duKSB0aGlzLmRyb3Bkb3duLnNlbGVjdGVkT3B0aW9uVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIEFwcGVuZCB0aMOqbSBkYXRhc291cmNlXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VJbnRlcm5hbF07XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmREYXRhU291cmNlKHRtcERhdGFTb3VyY2UsIGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBEYXRhU291cmNlLmxlbmd0aCA9PSB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gdG1wRGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLmRhdGFTb3VyY2VdO1xuICAgICAgICAgICAgaWYgKCh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHx8ICghdGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkICYmIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSB0bXBEYXRhU291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBkYXRhU291cmNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGF0YVNvdXJjZShkZXN0U291cmNlOiBhbnlbXSwgZGF0YVNvdXJjZTogYW55W10sIGRpcmVjdGlvbjogbnVtYmVyID0gMSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkTWFQaGFuQ2FwXSA+IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBi4bqjbiBnaGkgY3Xhu5FpIGPDuW5nIGzDoCBuw7MgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBkZXN0U291cmNlW2Rlc3RTb3VyY2UubGVuZ3RoIC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE7hur91IGLhuqNuIGdoaSBuZ2F5IHRyxrDhu5tjIHbhu4sgdHLDrSBj4bqnbiBpbnNlcnQgbMOgIGLhuqNuIGdoaSBoaeG7h24gdOG6oWkgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZVtpbmRleCAtIDFdLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSA9PSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2VbaW5kZXggLSAxXS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2Uuc3BsaWNlKGluZGV4LCAwLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja0FuZEZpcmVFdmVudChmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQodGhpcy5jb250cm9sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAoIW9sZFZhbHVlKSBvbGRWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gW3RoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5sZW5ndGggIT0gdGhpcy5fdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcbiAgICAgICAgICAgIC8vIFbDrCBnacOhIHRy4buLIGPhu6dhIHRoaXMuX3ZhbHVlIHPhur0gxJHGsOG7o2MgY29ycmVjdGluZyDhu58gdHLDqm4gKGlkID0+IG9iamVjdCkgbsOqbiBzbyBzw6FuaCBz4bq9IGtow6FjIG5oYXVcbiAgICAgICAgICAgIGlmICgob2xkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5fdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMuX3ZhbHVlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgMSwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkID0gZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlSW50ZXJuYWwsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlU2VsZWN0ZWRNdWx0aXBsZSgpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBbLi4udGhpcy5fdmFsdWVdO1xuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XG4gICAgICAgIHRoaXMuYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZSwgdG1wVmFsdWUsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZTogYW55W10sIGN1cnJlbnRWYWx1ZTogYW55W10sIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGN1cnJlbnRWYWx1ZVtpXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0VmFsdWVTZWxlY3RlZFNpbmdsZSgpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAob2xkVmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlOiBhbnksIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wub25BZGp1c3RlZFZhbHVlXG4gICAgICAgICAgICAmJiB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlXG4gICAgICAgICAgICAmJiAoKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5maXJlQWRqdXN0VmFsdWVFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVTdHJ1Y3R1cmVGbGF0T2JqZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIHJlU3RydWN0dXJlRmxhdE9iamVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRJdGVtVmFsdWUoaXRlbSwgdGhpcy5jb250cm9sKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8IGl0ZW0uX0dlbmVyYXRlZEJ5QmFzZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5nZXRJdGVtTGFiZWwoaXRlbSwgdGhpcy5jb250cm9sKTtcbiAgICAgICAgaWYgKHRlbXAubGFiZWwgPT09IG51bGwgfHwgdGVtcC5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gJ0tow7RuZyB4w6FjIMSR4buLbmgnO1xuICAgICAgICB9XG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtVmFsdWUoaXRlbSwgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sLmZ1bmNHZXRWYWx1ZSA/IGNvbnRyb2wuZnVuY0dldFZhbHVlKGl0ZW0pIDogaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1MYWJlbChpdGVtLCBjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bY29udHJvbC5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XG4gICAgfVxuXG4gICAgcmVzZXRDb250cm9sKCkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRhc291cmNlKCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YShwYWdlOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2UocGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlKHBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLnBhZ2UgPSBwYWdlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gYXdhaXQgdGhpcy5maWx0ZXJQcm9jZXNzKHRoaXMuZmlsdGVyRnJvbVBhcmVudHMpO1xuICAgICAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoW10sIHBhZ2UpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhU291cmNlLCByYXdEYXRhU291cmNlLCB0b3RhbFBhZ2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgcGFnZSk7XG4gICAgICAgIHRoaXMudG90YWxQYWdlID0gdG90YWxQYWdlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCBwYWdlKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE7hur91IGRyb3Bkb3duIGsgbuG6sW0gdHJvbmcgY3J1ZCBmb3JtIHRow6wgY+G6pXUgaMOsbmggZmlyZUNhbGxCYWNrSW5zaWRlID0gdHJ1ZSAobeG6t2MgxJHhu4tuaCkgxJHhu4MgZmlyZSB0cuG7sWMgdGnhur9wIHThu6sgdHJvbmcgY29tcG9uZW50XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmlyZUNhbGxCYWNrSW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2goPGFueT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJhd0RhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VMb2FkZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnM6IEZpbHRlcltdLCBwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gbnVsbCkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICAgIGxldCB0b3RhbFBhZ2UgPSAxO1xuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSB0aGlzLl9jcnVkU2VydmljZS5jcmVhdGVEcm9wZG93bk9wdGlvbnModGhpcy5jb250cm9sKTtcbiAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2UgPSBwYWdlO1xuICAgICAgICBpZiAocGFnZVNpemUpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ3JvdXBDb2RlLCBudWxsLCBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUgfHwgdGhpcy5jb250cm9sLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpZWxkVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlUGFyZW50Um9vdCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0b3RhbFBhZ2UgPSBNYXRoLmNlaWwocmVzcG9uc2UudG90YWxSZWNvcmQgLyBkcm9wZG93bk9wdGlvbnMucGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NydWRTZXJ2aWNlLmdldFJlZkRhdGFJbkRhdGFzb3VyY2UoZGF0YVNvdXJjZSwgZHJvcGRvd25PcHRpb25zLnJlZkZpZWxkcyk7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhU291cmNlOiByZXN1bHQsIHJhd0RhdGFTb3VyY2U6IGRhdGFTb3VyY2UsIHRvdGFsUGFnZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmlsdGVyUHJvY2VzcyhmaWx0ZXJGcm9tUGFyZW50czogRmlsdGVyW10pIHtcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbLi4uZmlsdGVyRnJvbVBhcmVudHNdO1xuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2godGhpcy52YWx1ZVNlYXJjaFNlcnZlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIGZpbHRlcnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuXG4gICAgZ2V0UGFuZWxDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hcHBlbmRUbyA9PSAnYm9keScpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnRyb2wucGFuZWxDbGFzc30gcC1maXhlZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5wYW5lbENsYXNzO1xuICAgIH1cblxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xuICAgICAgICB0aGlzLl9yZXR1cm5WYWx1ZSA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAodGhpcy5fdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgY2hlY2tJbml0ZWRDb250cm9sKCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb250cm9sLl9jb21wb25lbnQ7XG4gICAgfVxuXG4gICAgYWRqdXN0VmFsdWUyV2F5QmluZGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgZmlyZUNoYW5nZWRFdmVudCgpIHtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVSZXR1cm4pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQWRqdXN0VmFsdWVFdmVudCgpIHtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB0aGlzLmFkanVzdFZhbHVlLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlU2VsZWN0ZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKCFldmVudC5pdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3Agc2VsZWN0IGFsbFxuICAgICAgICAgICAgICAgIGlmIChldmVudC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5tYXAocSA9PiBxLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVHLGsOG7nW5nIGjhu6NwIHVuc2VsZWN0IGFsbFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5zZWxlY3REZXNjZW5kYW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWRzID0gW2V2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF1dO1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvbiwgY2jDoXVcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihldmVudC5pdGVtVmFsdWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRzLmluZGV4T2YocGFyZW50SWQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnB1c2goc291cmNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRzLnB1c2gocGFyZW50SWQsIHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWRzLmluZGV4T2YocGFyZW50SWQpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5zZWxlY3RDaGlsZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBpdGVtIMSRxrDhu6NjIGNo4buNbiA9PiBDaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihldmVudC5pdGVtVmFsdWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBpdGVtIMSRYW5nIGLhu4sgYuG7jyBjaOG7jW4gPT4gaOG7p3kgY2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkID09IGV2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgIH1cblxuICAgIHJlbW92ZUl0ZW0oZXZ0LCBzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fdmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPSBzZWxlY3RlZEl0ZW0pO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5vbkhpZGVTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duQ2xpY2tIYW5kbGVyKGV2dCkge1xuICAgICAgICB0aGlzLm9uRHJvcGRvd25DbGljay5uZXh0KGV2dCk7XG4gICAgfVxuXG4gICAgb25DbGljaygkZXZlbnQpIHtcbiAgICAgICAgaWYgKCRldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaScgJiYgJGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3VpLWRyb3Bkb3duLWNsZWFyLWljb24nKSkge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dIYW5kbGVyKGV2dCkge1xuICAgICAgICB0aGlzLm9uU2hvdy5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIGV2ZW50OiBldnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5vdmVybGF5LnN0eWxlLndpZHRoID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnN0eWxlLm1pbldpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtZHJvcGRvd24taXRlbXMtd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5kcm9wZG93bi5maWx0ZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMub25TaG93U21hcnRFdmVudC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgb25QYW5lbFNob3dIYW5kbGVyKGV2dCkge1xuICAgICAgICB0aGlzLm9uU2hvdy5lbWl0KHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICAgIGV2ZW50OiBldnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnN0eWxlLndpZHRoID0gdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnN0eWxlLm1pbldpZHRoO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5tdWx0aVNlbGVjdC5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5wLW11bHRpc2VsZWN0LWl0ZW1zLXdyYXBwZXInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbnB1dCA9IHRoaXMubXVsdGlTZWxlY3QuZmlsdGVySW5wdXRDaGlsZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGwgPSAoZXZ0KSA9PiB7XG4gICAgICAgIGlmIChldnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPiAwXG4gICAgICAgICAgICAmJiAhdGhpcy5maXJzdFNjcm9sbFxuICAgICAgICAgICAgJiYgZXZ0LnNyY0VsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsVG9wID09IGV2dC5zcmNFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRTY3JvbGwgPSBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0RGF0YU5leHRQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSh0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcbiAgICAgICAgdGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0SW5wdXQpO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uSGlkZUhhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25IaWRlLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSAhPSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRW1pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChkYXRhRW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldnQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgbGV0IGluaXREYXRhID0gdGhpcy5jb250cm9sLmluaXREYXRhO1xuICAgICAgICBpZiAodHlwZW9mIGluaXREYXRhICE9ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpbml0RGF0YSA9ICg8RnVuY3Rpb24+KHRoaXMuY29udHJvbC5pbml0RGF0YSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7IC4uLmluaXREYXRhIH07XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuZGF0YS5mb3JtTW9kZWwgPSBmb3JtTW9kZWw7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEsgc+G7rWEgdGjDoG5oIGZ1bmN0aW9uLCBwaOG6o2kgxJHhu4MgYXJyb3cgZnVuY3Rpb25cbiAgICBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZVNhdmVkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9O1xuXG4gICAgc2hvd0Zvcm1TZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1Nb2RlbC5kYXRhID0ge307XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTYXZlZFNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGVsYXlTZWFyY2hUaW1lID0gdGhpcy5nZXREZWxheVNlYXJjaFRpbWUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKGRlbGF5U2VhcmNoVGltZSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
959
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBbUIsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFB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QixLQUFLOzhDQU1MLEtBQUs7cUJBRUwsS0FBSztzQkFNTCxLQUFLOzJCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFFTCxLQUFLO29CQVdMLEtBQUs7bUJBYUwsS0FBSztxQ0FJTCxLQUFLO3FCQVNMLE1BQU07d0JBQ04sTUFBTTt5QkFDTixNQUFNO3VCQUNOLE1BQU07OEJBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07cUJBQ04sTUFBTTsrQkFDTixNQUFNO3NCQUNOLE1BQU07cUJBQ04sTUFBTTtzQkFDTixNQUFNO2lDQUNOLE1BQU07MEJBQ04sTUFBTTswQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2Ryb3Bkb3duJztcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvbXVsdGlzZWxlY3QnO1xuXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDcnVkRm9ybURhdGEsIERpYWxvZ01vZGVsLCBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIEZvcm1Db250cm9sQmFzZSwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IGFwcGVuZERlZmF1bHRGaWx0ZXIgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgS2V5U3RvcmFnZURyb3Bkb3duU2V0dGluZyB9IGZyb20gJy4vbW9kZWxzL2NvbnN0JztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCdlbCcpIGVsOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2lucHV0TWFzaycpIGlucHV0OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2J1dHRvblNldHRpbmcnKSBidXR0b25TZXR0aW5nOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoRHJvcGRvd24pIGRyb3Bkb3duOiBEcm9wZG93bjtcbiAgICBAVmlld0NoaWxkKE11bHRpU2VsZWN0KSBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3Q7XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvd0NsZWFyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLnNob3dDbGVhcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNob3dDbGVhciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGlzYWJsZURpc3BsYXlGaWVsZFNlcnZlclNlYXJjaCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5maWx0ZXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoKTtcbiAgICBASW5wdXQoKSBkZWZhdWx0TGFiZWwgPSAnJztcbiAgICBASW5wdXQoKSBhcHBlbmRUbzogYW55ID0gJ2JvZHknO1xuXG4gICAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgMSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5fcmV0dXJuVmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmaXJlIGV2ZW50IMSRaeG7gXUgY2jhu4luaCB2YWx1ZSB04burIFt2YWx1ZTogZ3VpZF0gPT4ge1tmaWVsZFZhbHVlXTogW3ZhbHVlOiBndWlkXSwgLi4uWzEgc+G7kSB0csaw4budbmcga2jDoWMgbuG7r2EgdHJvbmcgZGF0YXNvdXJjZV19XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGRhdGE6IGFueSA9IHt9O1xuXG4gICAgZGVmYXVsdFNlbGVjdGVkU3R5bGVDbGFzcyA9ICdjdXN0b20tc2VsZWN0LWl0ZW0nO1xuICAgIF9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzO1xuICAgIEBJbnB1dCgpIHNldCBpdGVtU2VsZWN0ZWRTdHlsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgIGRhdGFTb3VyY2VTZWxlY3RlZCA9IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfcmV0dXJuVmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgaGlkZVRyYW5zaXRpb25PcHRpb25zID0gJzE5NW1zIGVhc2UtaW4nO1xuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XG5cbiAgICBpbnB1dEVsbTogYW55O1xuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gICAgZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2g6IEZ1bmN0aW9uO1xuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG5cbiAgICBxdWlja0FkZERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHt9KTtcbiAgICBzZXR0aW5nRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdD4bqldSBow6xuaCBkcm9wZG93bidcbiAgICB9KTtcblxuICAgIGZsYXNoQ2FjaGVQYXJlbnQ6IGFueVtdID0gW107XG4gICAgZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdID0gW107XG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcbiAgICBzY3JvbGxDb250YWluZXI6IGFueTtcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XG4gICAgZmlyc3RTY3JvbGw6IGFueSA9IHRydWU7XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHBhZ2U6IG51bWJlciA9IDE7XG4gICAgdG90YWxQYWdlOiBudW1iZXIgPSAyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnF1aWNrQWRkKSB7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuaGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5jb250cm9sLmxhYmVsfWA7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwucG9wdXBTaXplID0gdGhpcy5jb250cm9sLnBvcHVwU2l6ZTtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5kYXRhID0ge1xuICAgICAgICAgICAgICAgIGZvcm1Nb2RlbDogbmV3IENydWRGb3JtRGF0YSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZml0UGFuZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzV3JhcENvbnRlbnQgPSAnLS13cmFwLWNvbnRlbnQnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzID0gY2xhc3NXcmFwQ29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzICs9IGAgJHtjbGFzc1dyYXBDb250ZW50fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPSAnQ2jGsGEgY2jhu41uIGLhuqNuIGdoaSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmxvYWRPbkluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSB0aGlzLnNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wub25Jbml0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wub25Jbml0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3VuU3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdFNldHRpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlIHx8IHRoaXMuY29udHJvbC5pc1RyZWVCYXNlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlGaWx0ZXIgPSAyMDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLl9wcmVmaXggKyBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgJiYgIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCA9IHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gdmFsdWUgPT4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREZWxheVNlYXJjaFRpbWUoKSB7XG4gICAgICAgIGNvbnN0IGpzRHJvcGRvd25TZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oS2V5U3RvcmFnZURyb3Bkb3duU2V0dGluZyk7XG4gICAgICAgIGxldCByZXN1bHQgPSA1MDA7XG4gICAgICAgIGlmIChqc0Ryb3Bkb3duU2V0dGluZykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93blNldHRpbmcgPSBKU09OLnBhcnNlKGpzRHJvcGRvd25TZXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBkcm9wZG93blNldHRpbmcuZGVsYXlTZWFyY2hUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgaXNOYU4ocmVzdWx0KSB8fCByZXN1bHQgPCAyMDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IDIwMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKSB7XG4gICAgICAgIGlmICh0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVBhcmVudCA9IHRoaXMuZHJvcGRvd25PcHRpb25zLmZpbmQocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcbiAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbUFkZCA9IHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtUGFyZW50LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNvbnRyb2wuZGlzYWJsZWRQYXJlbnRJdGVtXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleEV4aXN0ID0gdGhpcy5mbGFzaENhY2hlUGFyZW50LmZpbmRJbmRleChxID0+IHEudmFsdWUuX2xldmVsID09IGl0ZW1BZGQudmFsdWUuX2xldmVsKTtcbiAgICAgICAgICAgIGlmIChpbmRleEV4aXN0ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnRbaW5kZXhFeGlzdF0gPSBpdGVtQWRkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEzhuqV5IHRow6ptIGLhuqNuIGdoaSBjaGEgY+G7p2EgYuG6o24gZ2hpIGNoYVxuICAgICAgICAgICAgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0oaXRlbVBhcmVudCk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxyZWFkeUhhc1BhcmVudChvcHRpb25zOiBhbnlbXSwgaW5kZXhTdGFydDogbnVtYmVyLCBwYXJlbnRJZDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHdoaWxlIChpbmRleFN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmlkID09IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmxldmVsID09IGxldmVsICYmIHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2luZGV4U3RhcnRdKSAhPSBwYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXhTdGFydC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudElkRnJvbUl0ZW0oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICB9XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duLl9vcHRpb25zO1xuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyTXVsdGlwbGUgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3QuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIF9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGPDoWMgYuG6o24gZ2hpIHBow61hIHRyxrDhu5tjIHhlbSDEkcOjIGPDsyBi4bqjbiBnaGkgY2hhIGNoxrBhIChDaG8gxJHhur9uIGdoaSBn4bq3cCBi4bqjbiBnaGkgY8O5bmcgbGV2ZWwgbmjGsG5nIGtow6FjIHBhcmVudElkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuYWxyZWFkeUhhc1BhcmVudChvcHRpb25zLCBpIC0gMSwgcGFyZW50SWQsIG9wdGlvbnNbaV0ubGV2ZWwpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHBhcmVudHMsIHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaSwgMCwgLi4ucGFyZW50cy5yZXZlcnNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwYXJlbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUZpbHRlckZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnB1c2godGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZFswXSwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFNlYXJjaCBvZiB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh7IGZpZWxkOiBmaWVsZFNlYXJjaCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiB0bXBWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xuICAgICAgICBpZiAoIWZpbHRlclBhcmVudHMpIGZpbHRlclBhcmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJGcm9tUGFyZW50cyA9IGZpbHRlclBhcmVudHM7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvZm9jdXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmIChwYWdlID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRPcHRpb25VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRow6ptIGRhdGFzb3VyY2VcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZUludGVybmFsXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcERhdGFTb3VyY2UubGVuZ3RoID09IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSB0bXBEYXRhU291cmNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRtcERhdGFTb3VyY2UgPSBbLi4uZGF0YVNvdXJjZV07XG4gICAgICAgICAgICBpZiAoKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgJiYgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREYXRhU291cmNlKGRlc3RTb3VyY2U6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSwgZGlyZWN0aW9uOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdID4gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZE1hUGhhbkNhcF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGLhuqNuIGdoaSBjdeG7kWkgY8O5bmcgbMOgIG7DsyB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlc3RTb3VyY2VbZGVzdFNvdXJjZS5sZW5ndGggLSAxXS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTuG6v3UgYuG6o24gZ2hpIG5nYXkgdHLGsOG7m2MgduG7iyB0csOtIGPhuqduIGluc2VydCBsw6AgYuG6o24gZ2hpIGhp4buHbiB04bqhaSB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlW2luZGV4IC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZVtpbmRleCAtIDFdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDAsIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrQW5kRmlyZUV2ZW50KGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCh0aGlzLmNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGlmICghb2xkVmFsdWUpIG9sZFZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZVNlbGVjdGVkTXVsdGlwbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLm5vdEluQ3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBbdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCAhPSB0aGlzLl92YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3ZhbHVlICE9IG9sZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlU2VsZWN0ZWRTaW5nbGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLm5vdEluQ3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbFswXS52YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTMawdSDDvSBpZiDhu58gZMaw4bubaSBraMO0bmcgxJHGsOG7o2MgxJHhu5VpIHRow6BuaCBvbGRWYWx1ZSAhPSB0aGlzLl92YWx1ZVxuICAgICAgICAgICAgLy8gVsOsIGdpw6EgdHLhu4sgY+G7p2EgdGhpcy5fdmFsdWUgc+G6vSDEkcaw4bujYyBjb3JyZWN0aW5nIOG7nyB0csOqbiAoaWQgPT4gb2JqZWN0KSBuw6puIHNvIHPDoW5oIHPhur0ga2jDoWMgbmhhdVxuICAgICAgICAgICAgaWYgKChvbGRWYWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlID09IG51bGwpXG4gICAgICAgICAgICAgICAgfHwgKG9sZFZhbHVlID09IG51bGwgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hlY2tSZWFkeSgpO1xuICAgIH1cblxuICAgIGFzeW5jIHNldFNlbGVjdGVkVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLl92YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMuX3ZhbHVlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZSB9ID0gYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzLCAxLCBsZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgPSBkYXRhU291cmNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZUludGVybmFsICYmIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IFtdO1xuICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IFsuLi50aGlzLl92YWx1ZV07XG4gICAgICAgIHRoaXMuYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZSwgdG1wVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcbiAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZUZyb21EYXRhU291cmNlKG5ld1ZhbHVlLCB0bXBWYWx1ZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQpO1xuICAgICAgICByZXR1cm4gbmV3VmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmRWYWx1ZUZyb21EYXRhU291cmNlKG5ld1ZhbHVlOiBhbnlbXSwgY3VycmVudFZhbHVlOiBhbnlbXSwgZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gY3VycmVudFZhbHVlW2ldO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIHNlbGVjdGVkSXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCkge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIGlmIChvbGRWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIHRoaXMuZmluZEl0ZW1Gcm9tRGF0YVNvdXJjZShvbGRWYWx1ZSwgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwpO1xuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWU6IGFueSwgZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tSZWFkeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5vbkFkanVzdGVkVmFsdWVcbiAgICAgICAgICAgICYmIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2VcbiAgICAgICAgICAgICYmICgoIXRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIHx8ICh0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPiAwKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmVBZGp1c3RWYWx1ZUV2ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZVN0cnVjdHVyZUZsYXRPYmplY3QoaXRlbSk7XG4gICAgfVxuXG4gICAgcmVTdHJ1Y3R1cmVGbGF0T2JqZWN0KGl0ZW0pIHtcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldEl0ZW1WYWx1ZShpdGVtLCB0aGlzLmNvbnRyb2wpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfHwgaXRlbS5fR2VuZXJhdGVkQnlCYXNlID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRlbXAubGFiZWwgPSB0aGlzLmdldEl0ZW1MYWJlbChpdGVtLCB0aGlzLmNvbnRyb2wpO1xuICAgICAgICBpZiAodGVtcC5sYWJlbCA9PT0gbnVsbCB8fCB0ZW1wLmxhYmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSAnS2jDtG5nIHjDoWMgxJHhu4tuaCc7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1WYWx1ZShpdGVtLCBjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wuZnVuY0dldFZhbHVlID8gY29udHJvbC5mdW5jR2V0VmFsdWUoaXRlbSkgOiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbUxhYmVsKGl0ZW0sIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xuICAgICAgICBpZiAoY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLmZ1bmNHZXRMYWJlbChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVtjb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcbiAgICB9XG5cbiAgICByZXNldENvbnRyb2woKSB7XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhckRhdGFzb3VyY2UoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XG4gICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhKHBhZ2U6IG51bWJlciA9IDEpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZShwYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2UocGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlclByb2Nlc3ModGhpcy5maWx0ZXJGcm9tUGFyZW50cyk7XG4gICAgICAgIGlmIChmaWx0ZXJzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShbXSwgcGFnZSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UsIHJhd0RhdGFTb3VyY2UsIHRvdGFsUGFnZSB9ID0gYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzLCBwYWdlKTtcbiAgICAgICAgdGhpcy50b3RhbFBhZ2UgPSB0b3RhbFBhZ2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2UsIHBhZ2UpO1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTuG6v3UgZHJvcGRvd24gayBu4bqxbSB0cm9uZyBjcnVkIGZvcm0gdGjDrCBj4bqldSBow6xuaCBmaXJlQ2FsbEJhY2tJbnNpZGUgPSB0cnVlICht4bq3YyDEkeG7i25oKSDEkeG7gyBmaXJlIHRy4buxYyB0aeG6v3AgdOG7qyB0cm9uZyBjb21wb25lbnRcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maXJlQ2FsbEJhY2tJbnNpZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCg8YW55PntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcmF3RGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgZWxtOiB0aGlzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YVNvdXJjZUxvYWRlZC5lbWl0KHtcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgZWxtOiB0aGlzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVyczogRmlsdGVyW10sIHBhZ2U6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSBudWxsKSB7XG4gICAgICAgIGxldCBkYXRhU291cmNlID0gbnVsbDtcbiAgICAgICAgbGV0IHRvdGFsUGFnZSA9IDE7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyh0aGlzLmNvbnRyb2wpO1xuICAgICAgICBkcm9wZG93bk9wdGlvbnMucGFnZSA9IHBhZ2U7XG4gICAgICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5ncm91cENvZGUsIG51bGwsIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmllbGRUcmVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVQYXJlbnRSb290LFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhU291cmNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIHRvdGFsUGFnZSA9IE1hdGguY2VpbChyZXNwb25zZS50b3RhbFJlY29yZCAvIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShkYXRhU291cmNlLCBkcm9wZG93bk9wdGlvbnMucmVmRmllbGRzKTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGFTb3VyY2U6IHJlc3VsdCwgcmF3RGF0YVNvdXJjZTogZGF0YVNvdXJjZSwgdG90YWxQYWdlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJQcm9jZXNzKGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSkge1xuICAgICAgICBsZXQgZmlsdGVycyA9IFsuLi5maWx0ZXJGcm9tUGFyZW50c107XG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkgZmlsdGVycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRQYW5lbENsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFwcGVuZFRvID09ICdib2R5Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5wYW5lbENsYXNzfSBwLWZpeGVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLnBhbmVsQ2xhc3M7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XG4gICAgICAgIHRoaXMuX3JldHVyblZhbHVlID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2wuX2NvbXBvbmVudDtcbiAgICB9XG5cbiAgICBhZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQ2hhbmdlZEV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIGZpcmVBZGp1c3RWYWx1ZUV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuYWRqdXN0VmFsdWUubmV4dCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VTZWxlY3RlZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50Lml0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBzZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLm1hcChxID0+IHEudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3AgdW5zZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdERlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uLCBjaMOhdVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdENoaWxkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Ecm9wZG93bkNsaWNrLm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcbiAgICAgICAgICAgICYmICF0aGlzLmZpcnN0U2Nyb2xsXG4gICAgICAgICAgICAmJiBldnQuc3JjRWxlbWVudC5vZmZzZXRIZWlnaHQgKyBldnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPT0gZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0U2Nyb2xsKSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0U2Nyb2xsKTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dFNjcm9sbCA9IHNldFRpbWVvdXQoZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0U2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXREYXRhTmV4dFBhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlKSByZXR1cm47XG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICB0aGlzLl9nZXREYXRhKHRoaXMucGFnZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICB0aGlzLmJ1dHRvblNldHRpbmcubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7XG4gICAgICAgIC8vIGRlZmF1bHRJbnB1dC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmJ1dHRvblNldHRpbmcubmF0aXZlRWxlbWVudCwgZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGVkKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dCkgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25IaWRlSGFuZGxlcihldnQpIHtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlICE9IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbWl0ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGRhdGFFbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKGV2dCkge1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgc2hvd0Zvcm1RdWlja0FkZCgpIHtcbiAgICAgICAgY29uc3QgZm9ybU1vZGVsID0gbmV3IENydWRGb3JtRGF0YSgpO1xuICAgICAgICBsZXQgaW5pdERhdGEgPSB0aGlzLmNvbnRyb2wuaW5pdERhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdERhdGEgIT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGluaXREYXRhID0gKDxGdW5jdGlvbj4odGhpcy5jb250cm9sLmluaXREYXRhKSkoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtTW9kZWwuZGF0YSA9IHsgLi4uaW5pdERhdGEgfTtcbiAgICAgICAgZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICAvLyBLIHPhu61hIHRow6BuaCBmdW5jdGlvbiwgcGjhuqNpIMSR4buDIGFycm93IGZ1bmN0aW9uXG4gICAgaGFuZGxlU2F2ZWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgIH07XG5cbiAgICBzaG93Rm9ybVNldHRpbmcoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLmRhdGEuZm9ybU1vZGVsID0gZm9ybU1vZGVsO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZVNhdmVkU2V0dGluZygpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCkge1xuICAgICAgICBjb25zdCBkZWxheVNlYXJjaFRpbWUgPSB0aGlzLmdldERlbGF5U2VhcmNoVGltZSgpO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmtleVVwLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVsYXlTZWFyY2hUaW1lKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5TdWJzY3JpYmVBbGwpXG4gICAgICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tEaXNhYmxlZChjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRhdGEuX3N0YXR1cyAmJiB0aGlzLmRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXSAmJiB0aGlzLmRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5kaXNhYmxlZCA9PT0gdHJ1ZSkgfHwgY29udHJvbC5kaXNhYmxlZDtcbiAgICB9XG59XG4iXX0=
|