@tilde-nlp/ngx-translate 5.0.82 → 5.0.83
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.
|
@@ -141,8 +141,11 @@ export class TldTranslateTextService {
|
|
|
141
141
|
return this.api.dictionaryTranslation(text, srcCode, trgCode);
|
|
142
142
|
}
|
|
143
143
|
changeSource(event) {
|
|
144
|
-
if (
|
|
145
|
-
this.
|
|
144
|
+
if (!event.phrase.trim().length) {
|
|
145
|
+
this._onClear.next(null);
|
|
146
|
+
if (this.activeData?.detectedLanguage) {
|
|
147
|
+
this.systemManagementService.setDetectedLanguage(null);
|
|
148
|
+
}
|
|
146
149
|
}
|
|
147
150
|
this._sourceText = event.phrase;
|
|
148
151
|
this._sourceChange.next(event);
|
|
@@ -494,4 +497,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
494
497
|
providedIn: 'root'
|
|
495
498
|
}]
|
|
496
499
|
}], ctorParameters: function () { return [{ type: i1.TldTranslateTextApiService }, { type: i2.TldTranslateSystemManagementService }, { type: i3.TldScrollService }, { type: i2.TldTranslateConfigService }, { type: i4.TranslateService }, { type: i2.TldHighlightService }, { type: i5.AlertService }, { type: i5.TerminologyService }, { type: i6.LanguageDetectionService }, { type: i5.LanguageTranslateService }]; } });
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFNeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7O0FBTXhHLE1BQU0sT0FBTyx1QkFBdUI7SUF1SGY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5SFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBZ0MsSUFBSSxPQUFPLEVBQUUs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QkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDakMsT0FBTztTQUNSO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFlBQW9CLEVBQUUsSUFBWTtRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRSxJQUFJLFFBQVEsRUFBRTtZQUNaLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO2FBQ3JFLENBQUE7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FwaUJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBIdG1sSGVscGVyLCBMYW5ndWFnZVRyYW5zbGF0ZVNlcnZpY2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLCBUZXJtaW5vbG9neVNlcnZpY2UgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1lcmdlTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRleHRUb1NwZWVjaFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvdGV4dC10by1zcGVlY2gvbW9kZWxzL3RleHQtdG8tc3BlZWNoLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscyc7XHJcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2Vycm9ycy9lcnJvci1jb2Rlcy5lbnVtJztcclxuaW1wb3J0IHsgVGxkSGlnaGxpZ2h0U2VydmljZSwgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSwgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IElEaWN0aW9uYXJ5RW50cnksIElTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgSVBhcmFncmFwaEluZm8gfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0Lm1vZGVsJztcclxuaW1wb3J0IHsgSVJldHJhbnNsYXRlUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL3JldHJhbnNsYXRlLXBhcmFtcy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgSVVudHJhbnNsYXRlZFBhcmFncmFwaCB9IGZyb20gJy4uL21vZGVscy91bnRyYW5zbGF0ZWQtcGFyYWdyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdGxkLXRyYW5zbGF0ZS10ZXh0LnV0aWxzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS90bGQtdHJhbnNsYXRlLXRleHQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURldGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL2xhbmd1YWdlLWRldGVjdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVNjcm9sbDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlU2Nyb2xsKCkgeyByZXR1cm4gdGhpcy5fc291cmNlU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCB0cmFuc2xhdGVCdXR0b25DbGljaygpIHsgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2hhc0RpY3Rpb25hcnk6IGJvb2xlYW47XHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLl9oYXNEaWN0aW9uYXJ5OyB9XHJcbiAgc2V0IGhhc0RpY3Rpb25hcnkodmFsKSB7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gdmFsO1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpY3Rpb25hcnlFbnRyeTogSURpY3Rpb25hcnlFbnRyeVtdO1xyXG4gIGdldCBkaWN0aW9uYXJ5RW50cnkoKSB7IHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBzZXQgZGljdGlvbmFyeUVudHJ5KHZhbCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gdmFsO1xyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeUVudHJ5KSB7XHJcbiAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB0cmFuc2xhdGVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5tYXAobGluZSA9PiBsaW5lLm9yaWdpbmFsVGV4dCkuam9pbihcIlxcblwiKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DbGVhciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgdXJsVG9UcmFuc2xhdGU6IHN0cmluZztcclxuICBwYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgc291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gIHRhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgaXNTeXN0ZW1XYWtpbmdVcCE6IGJvb2xlYW47XHJcbiAgdHJnTGFuZ0JlZm9yZURldGVjdCE6IHN0cmluZztcclxuICBpc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgLy8gU2V0IHRoaXMgb2JqZWN0IHdpdGggbmVjZXNzYXJ5IHZhbHVlcyB0byBkaXNwbGF5IFRUUyBjb21wb25lbnRcclxuICB0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcbiAgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3M6IFRleHRUb1NwZWVjaFNldHRpbmdzO1xyXG5cclxuICBwcml2YXRlIF9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ6IGJvb2xlYW47XHJcbiAgZ2V0IGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpY3Rpb25hcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlcjogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PigpO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEhvdyBtYW55IHBhcmFncmFwaHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTkNVUlJFTlRfVVBMT0FEUyA9IDU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJPVU5DRV9USU1FID0gMTAwMDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkgPSAnMjEnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0ID0gMzAwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSA9ICc0MDQyMDEnO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDAgfHwgdGhpcy5pc1N5c3RlbVdha2luZ1VwIH1cclxuXHJcbiAgLy8gZ2V0dGVycyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdXNlRGljdGlvbmFyeSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnVzZURpY3Rpb25hcnk7IH07XHJcbiAgZ2V0IHByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kczsgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldCBhY3RpdmVEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2UuZ2V0QWN0aXZlU3lzdGVtT2JqKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRlVXJsUmVkaXJlY3QoKSB7XHJcbiAgICBpZiAodGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudXJsVG9UcmFuc2xhdGUpfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nfSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke3RoaXMudXJsVG9UcmFuc2xhdGV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBJZiBkaWN0YXR0aW9uIGlzIGFjdGl2ZS4gQmFzZWQgb24gdGhpcywgZXh0ZW5zaW9ucyBhcmUgaGlkZGVuLiAqL1xyXG4gIGlzRGljdGF0aW5nOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtTWFuYWdlbWVudFNlcnZpY2U6IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTY3JvbGxTZXJ2aWNlOiBUbGRTY3JvbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodFNlcnZpY2U6IFRsZEhpZ2hsaWdodFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0c1NlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVybWlub2xvZ3lTZXJ2aWNlOiBUZXJtaW5vbG9neVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlOiBMYW5ndWFnZURldGVjdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlVHJhbnNsYXRlOiBMYW5ndWFnZVRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGRpY3Rpb25hcnlUcmFuc2xhdGlvbih0ZXh0OiBzdHJpbmcsIHNyY0NvZGU6IHN0cmluZywgdHJnQ29kZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkuZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQsIHNyY0NvZGUsIHRyZ0NvZGUpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlKGV2ZW50OiBJU291cmNlQ2hhbmdlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UgJiYgIWV2ZW50LnBocmFzZS50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShudWxsKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgfHwgdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zPy5idXR0b25DbGlja2VkIHx8IHBhcmFtcz8uc3lzdGVtQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkZXRlY3RlZExhbmd1YWdlICYmICh0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2UgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB8fCB0aGlzLmFjdGl2ZURhdGEuZGV0ZWN0ZWRMYW5ndWFnZSkpIHsgXHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UuZGV0ZWN0KHRoaXMuc291cmNlVGV4dC5yZXBsYWNlKCdcXG4nLCAnICcpKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnJldHJhbnNsYXRlKHBhcmFtcywgcmVzLmRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtSWQgPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLmlkO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uID0gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuZW5naW5lc1thY3RpdmVTeXN0ZW1JZF0/LnNlbGVjdGVkO1xyXG4gICAgLy8gaWYgY29sbGVjdGlvbiBpcyBub3QgaW1wb3J0ZWQgd2Ugd2FudCB0byBhdm9pZCBpbnN0YW50IHRyYW5zbGF0aW9uXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2xsZWN0aW9uICYmICFzZWxlY3RlZENvbGxlY3Rpb24/Lm10Q29sbGVjdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSh7YnV0dG9uQ2xpY2tlZDogdHJ1ZX0sIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgIH0sIDMwMDApICAgICAgXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ID0gMjAwO1xyXG4gICAgY29uc3QgbWF4RGljdGlvbmFyeVdvcmRzID0gMTI7XHJcblxyXG4gICAgY29uc3Qgd29yZHNJblNvdXJjZSA9IEh0bWxIZWxwZXIuZ2V0V29yZENvdW50KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gSHRtbEhlbHBlci5pc1RleHRVcmwodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIGlmICh0aGlzLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uICYmIHRoaXMudXJsVG9UcmFuc2xhdGUpIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlIHx8IHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIFRPRE8uIExldG9uaWthIGRpY3Rpb25hcnk/XHJcbiAgICBpZiAodGhpcy51c2VEaWN0aW9uYXJ5ICYmIHRoaXMuc291cmNlVGV4dC5sZW5ndGggPCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ICYmIHdvcmRzSW5Tb3VyY2UgPD0gbWF4RGljdGlvbmFyeVdvcmRzKSB7XHJcbiAgICAgIHRoaXMucHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuICB9XHJcblxyXG4gIC8qKiBTdG9wcyB0ZXh0IHRyYW5zbGF0aW9uIGlmIGl0IGlzIGFjdGl2ZS4gKi9cclxuICBzdG9wVHJhbnNsYXRpb24oKSB7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBwcml2YXRlIHJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5pc0F1dG9MYW5ndWFnZURldGVjdGlvbkVuYWJsZWQgJiYgdGhpcy5hY3RpdmVEYXRhPy5kZXRlY3RlZExhbmd1YWdlKSB7XHJcbiAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjcmVhdGVQYXJhZ3JhcGhUcmFuc2xhdGlvblN1YmplY3QoZGV0ZWN0ZWRMYW5ndWFnZT86IHN0cmluZykge1xyXG4gICAgdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlVGV4dDtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCgodW50cmFuc2xhdGVkUGFyYWdyYXBoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCArPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVBhcmFncmFwaCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgsIGRldGVjdGVkTGFuZ3VhZ2UpLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBoYW5kbGUgcmVzcG9uc2UgaWYgc291cmNlIHRleHQgaGFzIGNoYW5nZWQuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gdGhpcy5zb3VyY2VUZXh0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYWdyYXBocyh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGguaXgsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPT09IDAgJiYgdGhpcy5pc1N5c3RlbVdha2luZ1VwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N5c3RlbVdha2luZ1VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuSU5GTywgJ0VSUk9SUy5FXzIxJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5lcnJvcjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKHsgRXJyb3JDb2RlOiBFcnJvckNvZGUuVFJBTlNMQVRJT05fRkFJTEVEIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5FcnJvckNvZGUgPT09IHRoaXMuc3RhbmRieUVuZ2luZU5vdGlmaWNhdGlvbkVycm9yS2V5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmluZm8oJ0VSUk9SUy5FXzIxJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N5c3RlbVdha2luZ1VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKCk7XHJcbiAgICAgICAgICAgICAgfSwgdGhpcy5zdGFuZGJ5U3lzdGVtUmV0cmFuc2xhdGlvblRpbWVvdXQpXHJcblxyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcj8uZXJyb3I/LmNvZGUgPT0gdGhpcy5lbmdpbmVUZXJtQ29sbGVjdGlvbk5vdEZvdW5kRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuZXJyb3IoJ0VSUk9SUy5FXzQwNDIwMScsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLnVuaGFuZGVsZWRFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBzdWJqZWN0IGlzIGRlc3Ryb3llZCBhbmQgdW5zdWJzY3JpYmVkLCBzbyB0aHJvd24gZXJyb3Igd29udCBoYXZlIGFueSBlZmZlY3QuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFRyYW5zbGF0aW9uKCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICB9LCB0aGlzLkNPTkNVUlJFTlRfVVBMT0FEUyksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVQYXJhZ3JhcGgocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoLCBkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHBhcmFtczogSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMgPSB7XHJcblx0XHRcdHBhcmFncmFwaEl4OiBwYXJhZ3JhcGguaXgsXHJcblx0XHRcdHRleHQ6IHBhcmFncmFwaC5saW5lLFxyXG5cdFx0XHRzeXN0ZW06IHRoaXMuYWN0aXZlRGF0YVxyXG5cdFx0fTtcclxuXHJcbiAgICBpZiAoZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dTYW1lTGFuZ3VhZ2VzKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMpKTtcclxuICAgIH1cclxuXHJcblx0XHRpZiAoIXBhcmFtcy50ZXh0IHx8IHBhcmFtcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIG9mKHRoaXMuZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaCwgcGFyYW1zLCB0cnVlKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRldGVjdGVkTGFuZ3VhZ2UgJiYgKGRldGVjdGVkTGFuZ3VhZ2UgIT09IHBhcmFtcy5zeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSkpIHtcclxuXHRcdFx0cGFyYW1zLnN5c3RlbS5kb21haW4gPSBcIlwiO1xyXG5cdFx0XHRwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBkZXRlY3RlZExhbmd1YWdlO1xyXG5cclxuXHRcdFx0Y29uc3QgZW5naW5lID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gXHJcbiAgICAgICAgc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlICYmIHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT09IHN5c3RlbS50YXJnZXRMYW5ndWFnZVxyXG4gICAgICApO1xyXG5cclxuXHRcdFx0dGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuXHRcdFx0aWYgKGVuZ2luZSkge1xyXG5cdFx0XHRcdHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuICAgICAgICAvLyBkaXNwbGF5aW5nIHRoYXQgZW5naW5lIG5vdCBmb3VuZC5cclxuICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2Uud2FybmluZygnRVJST1JTLkRFVEVDVElPTi5VTkFWQUlMQUJMRScsIHtcclxuICAgICAgICAgIHNyY0xhbmc6IHRoaXMubGFuZ3VhZ2VUcmFuc2xhdGUuZ2V0TGFuZ3VhZ2VDb2RlVHJhbnNsYXRpb24oZGV0ZWN0ZWRMYW5ndWFnZSksXHJcbiAgICAgICAgICB0cmdMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBwcmVzZXRpbmcgc3lzdGVtIHdpdGggc3JjTGFuZyBzYW1lIGFzIGRldGVjdGVkTGFuZ3VhZ2UgKHRhcmdldCBpcyByYW5kb20gaGVyZSlcclxuICAgICAgICBpZiAodGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ID0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTsgICAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgZmFsc2UsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHRcdH1cclxuXHJcbiAgICAvLyB3ZSBzaG91bGQgY2xlYXIgdW5hdmFpbGFibGUgbm90aWZpY2F0aW9uIGFmdGVyIG1hbnVhbCBsYW5ndWFnZSBzZWxlY3Rpb24sIGJ1dCBub3Qgd2hlbiB3ZSBoYXZlIHByZXNldGVkIGVuZ2luZSB3aXRoIHJhbmRvbSB0YXJnZXQgbGFuZ3VhZ2VcclxuICAgIGlmICh0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgJiYgKCF0aGlzLnRyZ0xhbmdCZWZvcmVEZXRlY3QgfHwgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ICYmICFwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UpKSB7XHJcblx0XHRcdHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuICAgICAgdGhpcy5pc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoLCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zLCBsZWF2ZUFsbEVtcHR5PzogYm9vbGVhbiwgbGVhdmVUYXJnZXRFbXB0eT86IGJvb2xlYW4pOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc291cmNlVHJlZTogeyB0ZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH0sXHJcbiAgICAgIHRhcmdldFRyZWU6IHsgdGV4dDogbGVhdmVUYXJnZXRFbXB0eSB8fCBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5jaGFuZ2VTeXN0ZW0ocGFyYWdyYXBoLnN5c3RlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWVkcyB0byBzY3JvbGwgdG8gdG9wIGFmdGVyIGZpcnN0IHBhcmFncmFwaCBpcyB0cmFuc2xhdGVkLlxyXG4gICAgaWYgKCF0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuICAgICAgLy8gaWYgZW1wdHkgcGFyYWdyYXBoIGlzICd0cmFuc2xhdGVkJyBmaXJzdCwgbm8gbmVlZCB0byBkbyBhbnkgc2Nyb2xsaW5nLiBXYWl0IGZvciByZWFsIHRleHQgdG8gYmUgdHJhbnNsYXRlZC5cclxuICAgICAgaWYgKHBhcmFncmFwaC50YXJnZXRUcmVlLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zeW5jU2Nyb2xsYmFycyhudWxsLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYXJhZ3JhcGhzKHBhcmFncmFwaEl4OiBudW1iZXIsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIGxldCBwYXJhZ3JhcGg6IElQYXJhZ3JhcGhJbmZvID0ge1xyXG4gICAgICBpeDogcGFyYWdyYXBoSXgsXHJcbiAgICAgIHRhcmdldDogcmVzcG9uc2UudGFyZ2V0VHJlZSxcclxuICAgICAgc291cmNlOiByZXNwb25zZS5zb3VyY2VUcmVlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHBhcmFncmFwaCk7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS5zb3VyY2VUcmVlKTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnRhcmdldFRyZWUpO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zb3J0KChhLCBiKSA9PiAoYS5peCA+IGIuaXgpID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3VyY2VQYXJhbXMoKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcyhkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW1PYmplY3QgPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSB0aGlzLmRpY3Rpb25hcnlUcmFuc2xhdGlvbih0aGlzLnNvdXJjZVRleHQudHJpbSgpLFxyXG4gICAgICBhY3RpdmVTeXN0ZW1PYmplY3Quc291cmNlTGFuZ3VhZ2UsIGFjdGl2ZVN5c3RlbU9iamVjdC50YXJnZXRMYW5ndWFnZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IElEaWN0aW9uYXJ5RW50cnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbMF0gfHwgIXJlc3BvbnNlWzBdLnRyYW5zbGF0aW9ucyB8fCByZXNwb25zZVswXS50cmFuc2xhdGlvbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQsIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJ5ID0gcmVzcG9uc2U7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICB0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVRleHQodGV4dDogc3RyaW5nLCBkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhzID0gSHRtbEhlbHBlci5zcGxpdEluUGFyYWdyYXBocyh0ZXh0KTtcclxuICAgIGNvbnN0IG5ld1BhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1NvdXJjZVBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1RhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgICAvLyBzb3VyY2UgdGV4dCBjaGFuZ2VkLiBQcmV2aW91c2x5IG1hZGUgb2JzZXJ2YWJsZXMgYXJlbid0IG5lY2Vzc2FyeSBhbnltb3JlO1xyXG4gICAgdGhpcy5yZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdChkZXRlY3RlZExhbmd1YWdlKTtcclxuXHJcbiAgICBwYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCwgaXgpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgcGFyYWdyYXBoIHdpdGggc2FtZSB0ZXh0IGV4aXN0cyAoc28geW91IGRvbid0IGhhdmUgdG8gdHJhbnNsYXRlIGl0IGFnYWluKS5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgeW91IGNhbiBjbG9uZSBpdC5cclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGhJbmZvID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmZpbmRFeGlzdGluZ1BhcmFncmFwaChwYXJhZ3JhcGgsIGl4LCB0aGlzLnBhcmFncmFwaHMpO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaCA9IGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaDtcclxuICAgICAgaWYgKGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaCkge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmhhc1NhbWVJeCkge1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jcmVhdGVFbXB0eVBhcmFncmFwaEluZm8oaXgpO1xyXG5cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBuZXdQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gbmV3VGFyZ2V0UGFyYWdyYXBocztcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IG5ld1NvdXJjZVBhcmFncmFwaHM7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5uZXh0KHsgaXg6IGl4LCBsaW5lOiBwYXJhZ3JhcGggfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1RyYW5zbGF0aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyB0aW1lb3V0IHdoaWNoIGVuYWJsZXMgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFmdGVyIGdpdmVuIG1pbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSBzZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gbnVsbCB8fCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclZpc2libGUpIHtcclxuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgICB9LCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgdmlzaWJsZS4gKi9cclxuICBwcml2YXRlIHNob3dQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIGhpZGRlbi4gKi9cclxuICBoaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVUZXh0VG9TcGVlY2goKSB7XHJcbiAgICAvLyBpZiBub3RoaW5nIHRyYW5zbGF0ZWQsIHR0cyBzaG91bGQgbm90IGJlIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnRhcmdldFBhcmFncmFwaHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW0gPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlLCB0aGlzLnRyYW5zbGF0ZWRUZXh0KTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhsYW5ndWFnZUNvZGU6IHN0cmluZywgdGV4dDogc3RyaW5nKTogVGV4dFRvU3BlZWNoU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLmxhbmd1YWdlc1tsYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGV4dCxcclxuICAgICAgICB1cmw6IHNldHRpbmdzLnVybCxcclxuICAgICAgICB2b2ljZTogc2V0dGluZ3Mudm9pY2UsXHJcbiAgICAgICAgbGFuZ0JwYzQ3OiBzZXR0aW5ncy5sYW5nQnBjNDcsXHJcbiAgICAgICAgbWF4Q2hhcnNJblRleHQ6IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubWF4Q2hhcnNJblRleHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
500
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFNeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7O0FBTXhHLE1BQU0sT0FBTyx1QkFBdUI7SUF1SGY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5SFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBZ0MsSUFBSSxPQUFPLEVBQUUs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Q0FBQztJQUM1QyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsWUFBb0IsRUFBRSxJQUFZO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9FLElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTztnQkFDTCxJQUFJO2dCQUNKLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDakIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7YUFDckUsQ0FBQTtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQXhpQlUsdUJBQXVCOzRHQUF2Qix1QkFBdUIsY0FGdEIsTUFBTTs7NEZBRVAsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIEh0bWxIZWxwZXIsIExhbmd1YWdlVHJhbnNsYXRlU2VydmljZSwgTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsIFRlcm1pbm9sb2d5U2VydmljZSB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LWNvbW1vbic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC90ZXh0LXRvLXNwZWVjaC9tb2RlbHMvdGV4dC10by1zcGVlY2gtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMvZXJyb3JzL2Vycm9yLWNvZGVzLmVudW0nO1xyXG5pbXBvcnQgeyBUbGRIaWdobGlnaHRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLCBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUbGRTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcy9zY3JvbGwvdGxkLXNjcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURpY3Rpb25hcnlFbnRyeSwgSVNvdXJjZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmV0cmFuc2xhdGVQYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvcmV0cmFuc2xhdGUtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJVW50cmFuc2xhdGVkUGFyYWdyYXBoIH0gZnJvbSAnLi4vbW9kZWxzL3VudHJhbnNsYXRlZC1wYXJhZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0VXRpbHMgfSBmcm9tICcuLi91dGlscy90bGQtdHJhbnNsYXRlLXRleHQudXRpbHMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSB9IGZyb20gJy4vYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2F1dG8tbGFuZ3VhZ2UtZGV0ZWN0aW9uLWtleS5jb25zdCc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGV0ZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvbGFuZ3VhZ2UtZGV0ZWN0aW9uLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0OiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVRleHRIeXBvdGhlc2lzOiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHRIeXBvdGhlc2lzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlQ2hhbmdlOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlU2Nyb2xsOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VTY3JvbGwoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VTY3JvbGwuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlQnV0dG9uQ2xpY2s6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkgeyByZXR1cm4gdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2suYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzRGljdGlvbmFyeTogYm9vbGVhbjtcclxuICBnZXQgaGFzRGljdGlvbmFyeSgpIHsgcmV0dXJuIHRoaXMuX2hhc0RpY3Rpb25hcnk7IH1cclxuICBzZXQgaGFzRGljdGlvbmFyeSh2YWwpIHtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSB2YWw7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGlvbmFyeUVudHJ5OiBJRGljdGlvbmFyeUVudHJ5W107XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlFbnRyeTsgfVxyXG4gIHNldCBkaWN0aW9uYXJ5RW50cnkodmFsKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSB2YWw7XHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5RW50cnkpIHtcclxuICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzLm1hcChsaW5lID0+IGxpbmUub3JpZ2luYWxUZXh0KS5qb2luKFwiXFxuXCIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNsZWFyID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICB1cmxUb1RyYW5zbGF0ZTogc3RyaW5nO1xyXG4gIHBhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICBzb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgdGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICBpc1N5c3RlbVdha2luZ1VwITogYm9vbGVhbjtcclxuICB0cmdMYW5nQmVmb3JlRGV0ZWN0ITogc3RyaW5nO1xyXG4gIGlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUhOiBib29sZWFuO1xyXG5cclxuICAvLyBTZXQgdGhpcyBvYmplY3Qgd2l0aCBuZWNlc3NhcnkgdmFsdWVzIHRvIGRpc3BsYXkgVFRTIGNvbXBvbmVudFxyXG4gIHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuICB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcblxyXG4gIHByaXZhdGUgX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDogYm9vbGVhbjtcclxuICBnZXQgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbmFyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgcHJpdmF0ZSBkZWJvdW5jZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvKiogSG93IG1hbnkgcGFyYWdyYXBocyBjYW4gYmUgdHJhbnNsYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OQ1VSUkVOVF9VUExPQURTID0gNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IERFQk9VTkNFX1RJTUUgPSAxMDAwO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSA9ICcyMSc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5U3lzdGVtUmV0cmFuc2xhdGlvblRpbWVvdXQgPSAzMDAwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5naW5lVGVybUNvbGxlY3Rpb25Ob3RGb3VuZEVycm9yS2V5ID0gJzQwNDIwMSc7XHJcblxyXG4gIC8qKiBXaGV0aGVyIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgYmUgc2hvd24uIFRoaXMgdmFsdWUgbXVzdCBiZSBzZXQgdG8gdHJ1ZSBvbmx5IGlmIGNvbmZpZ3VyZWQgdGltZSBoYXMgcGFzc2VkLiAqL1xyXG4gIHByaXZhdGUgX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIGdldCBzaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3I7IH1cclxuICAvL05vZGVKUy5UaW1lb3V0XHJcbiAgcHJpdmF0ZSBwcm9ncmVzc0luZGljYXRvclRpbWVvdXQ6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBfdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gIGdldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCgpIHsgcmV0dXJuIHRoaXMuX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50OyB9XHJcbiAgc2V0IHVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gdmFsdWU7XHJcbiAgICAvLyBXaGVuIHRyYW5zbGF0aW9uIGZpbmlzaGVkLCBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIG5vdCBiZSBzaG93bi5cclxuICAgIGlmICh2YWx1ZSA9PT0gMCkge1xyXG4gICAgICB0aGlzLnRvZ2dsZVRleHRUb1NwZWVjaCgpO1xyXG4gICAgICB0aGlzLmhpZGVQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVHJhbnNsYXRpbmcoKSB7IHJldHVybiB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID4gMCB8fCB0aGlzLmlzU3lzdGVtV2FraW5nVXAgfVxyXG5cclxuICAvLyBnZXR0ZXJzIGZyb20gY29uZmlnIHNlcnZpY2UuXHJcbiAgZ2V0IGFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb247IH07XHJcbiAgZ2V0IGF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGU7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeDsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4OyB9O1xyXG4gIGdldCB1c2VEaWN0aW9uYXJ5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcudXNlRGljdGlvbmFyeTsgfTtcclxuICBnZXQgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzOyB9XHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZ2V0IGFjdGl2ZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5nZXRBY3RpdmVTeXN0ZW1PYmooKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGVVcmxSZWRpcmVjdCgpIHtcclxuICAgIGlmICh0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4ID09PSAnJykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy51cmxUb1RyYW5zbGF0ZSl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy50cmFuc2xhdGUuY3VycmVudExhbmd9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7dGhpcy51cmxUb1RyYW5zbGF0ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIGRpY3RhdHRpb24gaXMgYWN0aXZlLiBCYXNlZCBvbiB0aGlzLCBleHRlbnNpb25zIGFyZSBoaWRkZW4uICovXHJcbiAgaXNEaWN0YXRpbmc6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGk6IFRsZFRyYW5zbGF0ZVRleHRBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzeXN0ZW1NYW5hZ2VtZW50U2VydmljZTogVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZTogVGxkSGlnaGxpZ2h0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRzU2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZXJtaW5vbG9neVNlcnZpY2U6IFRlcm1pbm9sb2d5U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2U6IExhbmd1YWdlRGV0ZWN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2VUcmFuc2xhdGU6IExhbmd1YWdlVHJhbnNsYXRlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQ6IHN0cmluZywgc3JjQ29kZTogc3RyaW5nLCB0cmdDb2RlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaS5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dCwgc3JjQ29kZSwgdHJnQ29kZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2UoZXZlbnQ6IElTb3VyY2VDaGFuZ2VFdmVudCkge1xyXG4gICAgaWYgKCFldmVudC5waHJhc2UudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEYXRhPy5kZXRlY3RlZExhbmd1YWdlKSB7XHJcbiAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuX3NvdXJjZVRleHQgPSBldmVudC5waHJhc2U7XHJcbiAgICB0aGlzLl9zb3VyY2VDaGFuZ2UubmV4dChldmVudCk7XHJcbiAgICB0aGlzLmRlYm91bmNlci5uZXh0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZUh5cG90aGVzaXModGV4dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcyA9IHRleHQ7XHJcbiAgfVxyXG5cclxuICBvblNvdXJjZVNjcm9sbChvZmZzZXRUb3A6IG51bWJlcikge1xyXG4gICAgdGhpcy5fc291cmNlU2Nyb2xsLm5leHQob2Zmc2V0VG9wKTtcclxuICB9XHJcblxyXG4gIG9uVHJhbnNsYXRlQnV0dG9uQ2xpY2soKSB7XHJcbiAgICB0aGlzLl90cmFuc2xhdGVCdXR0b25DbGljay5uZXh0KG51bGwpXHJcbiAgICB0aGlzLnJldHJhbnNsYXRlKHsgYnV0dG9uQ2xpY2tlZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyU291cmNlKCkge1xyXG4gICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBcIlwiIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhcigpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29uQ2xlYXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUcmFuc2xhdGlvbihvcHRpb25zOiBzdHJpbmcsIHN5c3RlbUlEOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgdHJhbnNsYXRpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpLnVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnMsIHN5c3RlbUlELCB0ZXh0LCB0cmFuc2xhdGlvbik7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5PbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gdGhpcy5kZWJvdW5jZXIucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzLnBocmFzZSA9PSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZShldiA9PiBldi5waHJhc2U/Lmxlbmd0aCA+IDAgPyB0aW1lcih0aGlzLkRFQk9VTkNFX1RJTUUpIDogdGltZXIoMCkpXHJcbiAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRTZXJ2aWNlLmNoYW5nZVNlbGVjdGVkVGFyZ2V0U2VudGVuY2UobnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQuZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0b3BMaXN0ZW5pbmdUb0NoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBpZiBtZXRob2QgZ2V0cyBjYWxsZWQgYmVjYXVzZSBvZiBidXR0b24gY2xpY2sgYW5kIHVybCBlbnRlcmVkIC0gZ28gdG8gd2ViIHRyYW5zbGF0aW9uXHJcbiAgcmV0cmFuc2xhdGUocGFyYW1zPzogSVJldHJhbnNsYXRlUGFyYW1zLCBkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuc291cmNlVGV4dD8udHJpbSgpIHx8IHRoaXMuc291cmNlVGV4dD8udHJpbSgpID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCB8fCBwYXJhbXM/LnN5c3RlbUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGV0ZWN0ZWRMYW5ndWFnZSAmJiAodGhpcy5hY3RpdmVEYXRhLnNvdXJjZUxhbmd1YWdlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfHwgdGhpcy5hY3RpdmVEYXRhLmRldGVjdGVkTGFuZ3VhZ2UpKSB7IFxyXG4gICAgICB0aGlzLmxhbmd1YWdlLmRldGVjdCh0aGlzLnNvdXJjZVRleHQucmVwbGFjZSgnXFxuJywgJyAnKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZShwYXJhbXMsIHJlcy5kZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbUlkID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5nZXRBY3RpdmVTeXN0ZW1PYmooKS5pZDtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ29sbGVjdGlvbiA9IHRoaXMudGVybWlub2xvZ3lTZXJ2aWNlLmVuZ2luZXNbYWN0aXZlU3lzdGVtSWRdPy5zZWxlY3RlZDtcclxuICAgIC8vIGlmIGNvbGxlY3Rpb24gaXMgbm90IGltcG9ydGVkIHdlIHdhbnQgdG8gYXZvaWQgaW5zdGFudCB0cmFuc2xhdGlvblxyXG4gICAgaWYgKHNlbGVjdGVkQ29sbGVjdGlvbiAmJiAhc2VsZWN0ZWRDb2xsZWN0aW9uPy5tdENvbGxlY3Rpb24pIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoe2J1dHRvbkNsaWNrZWQ6IHRydWV9LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICB9LCAzMDAwKSAgICAgIFxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWF4U291cmNlQ2hhcmFjdGVyRGljdGlvbmFyeSA9IDIwMDtcclxuICAgIGNvbnN0IG1heERpY3Rpb25hcnlXb3JkcyA9IDEyO1xyXG5cclxuICAgIGNvbnN0IHdvcmRzSW5Tb3VyY2UgPSBIdG1sSGVscGVyLmdldFdvcmRDb3VudCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IEh0bWxIZWxwZXIuaXNUZXh0VXJsKHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICBpZiAodGhpcy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbiAmJiB0aGlzLnVybFRvVHJhbnNsYXRlKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBbXTtcclxuICAgICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSB8fCBwYXJhbXM/LmJ1dHRvbkNsaWNrZWQpIHtcclxuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnRyYW5zbGF0ZVVybFJlZGlyZWN0LCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPLiBMZXRvbmlrYSBkaWN0aW9uYXJ5P1xyXG4gICAgaWYgKHRoaXMudXNlRGljdGlvbmFyeSAmJiB0aGlzLnNvdXJjZVRleHQubGVuZ3RoIDwgbWF4U291cmNlQ2hhcmFjdGVyRGljdGlvbmFyeSAmJiB3b3Jkc0luU291cmNlIDw9IG1heERpY3Rpb25hcnlXb3Jkcykge1xyXG4gICAgICB0aGlzLnByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcyhkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCwgZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICAvKiogU3RvcHMgdGV4dCB0cmFuc2xhdGlvbiBpZiBpdCBpcyBhY3RpdmUuICovXHJcbiAgc3RvcFRyYW5zbGF0aW9uKCkge1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICBpZiAodGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSByZXNldERldGVjdGVkTGFuZ3VhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuaXNBdXRvTGFuZ3VhZ2VEZXRlY3Rpb25FbmFibGVkICYmIHRoaXMuYWN0aXZlRGF0YT8uZGV0ZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKHVudHJhbnNsYXRlZFBhcmFncmFwaCkgPT4ge1xyXG4gICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVQYXJhZ3JhcGgodW50cmFuc2xhdGVkUGFyYWdyYXBoLCBkZXRlY3RlZExhbmd1YWdlKS5waXBlKFxyXG4gICAgICAgICAgdGFwKChyZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGFuZGxlIHJlc3BvbnNlIGlmIHNvdXJjZSB0ZXh0IGhhcyBjaGFuZ2VkLlxyXG4gICAgICAgICAgICBpZiAoc291cmNlICE9IHRoaXMuc291cmNlVGV4dCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYW5zbGF0ZWRQYXJhZ3JhcGgocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhcmFncmFwaHModW50cmFuc2xhdGVkUGFyYWdyYXBoLml4LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID09PSAwICYmIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5kZWxldGVNZXNzYWdlKE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLklORk8sICdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIuZXJyb3I7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLnVuaGFuZGVsZWRFcnJvcih7IEVycm9yQ29kZTogRXJyb3JDb2RlLlRSQU5TTEFUSU9OX0ZBSUxFRCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcj8uRXJyb3JDb2RlID09PSB0aGlzLnN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5pbmZvKCdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSgpO1xyXG4gICAgICAgICAgICAgIH0sIHRoaXMuc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0KVxyXG5cclxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LmVycm9yPy5jb2RlID09IHRoaXMuZW5naW5lVGVybUNvbGxlY3Rpb25Ob3RGb3VuZEVycm9yS2V5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmVycm9yKCdFUlJPUlMuRV80MDQyMDEnLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgc3ViamVjdCBpcyBkZXN0cm95ZWQgYW5kIHVuc3Vic2NyaWJlZCwgc28gdGhyb3duIGVycm9yIHdvbnQgaGF2ZSBhbnkgZWZmZWN0LlxyXG4gICAgICAgICAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgfSwgdGhpcy5DT05DVVJSRU5UX1VQTE9BRFMpLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFncmFwaDogSVVudHJhbnNsYXRlZFBhcmFncmFwaCwgZGV0ZWN0ZWRMYW5ndWFnZT86IHN0cmluZyk6IE9ic2VydmFibGU8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zID0ge1xyXG5cdFx0XHRwYXJhZ3JhcGhJeDogcGFyYWdyYXBoLml4LFxyXG5cdFx0XHR0ZXh0OiBwYXJhZ3JhcGgubGluZSxcclxuXHRcdFx0c3lzdGVtOiB0aGlzLmFjdGl2ZURhdGFcclxuXHRcdH07XHJcblxyXG4gICAgaWYgKGRldGVjdGVkTGFuZ3VhZ2UgPT09IHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zaG93U2FtZUxhbmd1YWdlcyhkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaCwgcGFyYW1zKSk7XHJcbiAgICB9XHJcblxyXG5cdFx0aWYgKCFwYXJhbXMudGV4dCB8fCBwYXJhbXMudGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgdHJ1ZSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChkZXRlY3RlZExhbmd1YWdlICYmIChkZXRlY3RlZExhbmd1YWdlICE9PSBwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UpKSB7XHJcblx0XHRcdHBhcmFtcy5zeXN0ZW0uZG9tYWluID0gXCJcIjtcclxuXHRcdFx0cGFyYW1zLnN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID0gZGV0ZWN0ZWRMYW5ndWFnZTtcclxuXHJcblx0XHRcdGNvbnN0IGVuZ2luZSA9IHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc3lzdGVtcy5maW5kKChzeXN0ZW0pID0+IFxyXG4gICAgICAgIHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gZGV0ZWN0ZWRMYW5ndWFnZSAmJiBwYXJhbXMuc3lzdGVtLnRhcmdldExhbmd1YWdlID09PSBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2VcclxuICAgICAgKTtcclxuXHJcblx0XHRcdHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuXHJcblx0XHRcdGlmIChlbmdpbmUpIHtcclxuXHRcdFx0XHR0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UoZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZGlzcGxheWluZyB0aGF0IGVuZ2luZSBub3QgZm91bmQuXHJcbiAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLndhcm5pbmcoJ0VSUk9SUy5ERVRFQ1RJT04uVU5BVkFJTEFCTEUnLCB7XHJcbiAgICAgICAgICBzcmNMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKGRldGVjdGVkTGFuZ3VhZ2UpLFxyXG4gICAgICAgICAgdHJnTGFuZzogdGhpcy5sYW5ndWFnZVRyYW5zbGF0ZS5nZXRMYW5ndWFnZUNvZGVUcmFuc2xhdGlvbihwYXJhbXMuc3lzdGVtLnRhcmdldExhbmd1YWdlKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gcHJlc2V0aW5nIHN5c3RlbSB3aXRoIHNyY0xhbmcgc2FtZSBhcyBkZXRlY3RlZExhbmd1YWdlICh0YXJnZXQgaXMgcmFuZG9tIGhlcmUpXHJcbiAgICAgICAgaWYgKHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc3lzdGVtcy5maW5kKChzeXN0ZW0pID0+IHN5c3RlbS5zb3VyY2VMYW5ndWFnZSA9PT0gZGV0ZWN0ZWRMYW5ndWFnZSkpIHtcclxuICAgICAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICAgIHRoaXMudHJnTGFuZ0JlZm9yZURldGVjdCA9IHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzZXREZXRlY3RlZExhbmd1YWdlKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMsIGZhbHNlLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblx0XHR9XHJcblxyXG4gICAgLy8gd2Ugc2hvdWxkIGNsZWFyIHVuYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBhZnRlciBtYW51YWwgbGFuZ3VhZ2Ugc2VsZWN0aW9uLCBidXQgbm90IHdoZW4gd2UgaGF2ZSBwcmVzZXRlZCBlbmdpbmUgd2l0aCByYW5kb20gdGFyZ2V0IGxhbmd1YWdlXHJcbiAgICBpZiAodGhpcy5pc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlICYmICghdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0IHx8IHRoaXMudHJnTGFuZ0JlZm9yZURldGVjdCAmJiAhcGFyYW1zLnN5c3RlbS5kZXRlY3RlZExhbmd1YWdlKSkge1xyXG5cdFx0XHR0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuaXNVbnN1cHBvcnRlZExhbmdXYXJuaW5nVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHRcdHJldHVybiB0aGlzLmFwaS50cmFuc2xhdGVQYXJhZ3JhcGgocGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaDogSVVudHJhbnNsYXRlZFBhcmFncmFwaCwgcGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcywgbGVhdmVBbGxFbXB0eT86IGJvb2xlYW4sIGxlYXZlVGFyZ2V0RW1wdHk/OiBib29sZWFuKTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNvdXJjZVRyZWU6IHsgdGV4dDogbGVhdmVBbGxFbXB0eSA/ICcnIDogcGFyYWdyYXBoLmxpbmUsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSB9LFxyXG4gICAgICB0YXJnZXRUcmVlOiB7IHRleHQ6IGxlYXZlVGFyZ2V0RW1wdHkgfHwgbGVhdmVBbGxFbXB0eSA/ICcnIDogcGFyYWdyYXBoLmxpbmUsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVRyYW5zbGF0ZWRQYXJhZ3JhcGgocGFyYWdyYXBoOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIC8vaWYgYXV0byBkb21haW4gZGV0ZWN0aW9uIGlzIG9uLCBzeXN0ZW0gYXBpIHNlcnZpY2Ugc2V0cyBzeXN0ZW0gaWQgdG8gYCR7c3JjTGFuZ30tJHt0YXJnZXRMYW5nfWAgc28gd2UgbmVlZCB0byB2YWxpZGF0ZSBpZiB0aGF0IGlzIHRoZSBjYXNlXHJcbiAgICBpZiAocGFyYWdyYXBoLnN5c3RlbUlkICYmIHRoaXMuYWN0aXZlRGF0YS5pZCAhPT0gcGFyYWdyYXBoLnN5c3RlbUlkXHJcbiAgICAgICYmIHRoaXMuYWN0aXZlRGF0YS5pZCA9PT0gYCR7dGhpcy5hY3RpdmVEYXRhLnNvdXJjZUxhbmd1YWdlfS0ke3RoaXMuYWN0aXZlRGF0YS50YXJnZXRMYW5ndWFnZX1gKSB7XHJcbiAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2UuY2hhbmdlU3lzdGVtKHBhcmFncmFwaC5zeXN0ZW1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTmVlZHMgdG8gc2Nyb2xsIHRvIHRvcCBhZnRlciBmaXJzdCBwYXJhZ3JhcGggaXMgdHJhbnNsYXRlZC5cclxuICAgIGlmICghdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKSB7XHJcbiAgICAgIC8vIGlmIGVtcHR5IHBhcmFncmFwaCBpcyAndHJhbnNsYXRlZCcgZmlyc3QsIG5vIG5lZWQgdG8gZG8gYW55IHNjcm9sbGluZy4gV2FpdCBmb3IgcmVhbCB0ZXh0IHRvIGJlIHRyYW5zbGF0ZWQuXHJcbiAgICAgIGlmIChwYXJhZ3JhcGgudGFyZ2V0VHJlZS50ZXh0LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRsZFNjcm9sbFNlcnZpY2Uuc3luY1Njcm9sbGJhcnMobnVsbCwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFyYWdyYXBocyhwYXJhZ3JhcGhJeDogbnVtYmVyLCByZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSB7XHJcbiAgICBsZXQgcGFyYWdyYXBoOiBJUGFyYWdyYXBoSW5mbyA9IHtcclxuICAgICAgaXg6IHBhcmFncmFwaEl4LFxyXG4gICAgICB0YXJnZXQ6IHJlc3BvbnNlLnRhcmdldFRyZWUsXHJcbiAgICAgIHNvdXJjZTogcmVzcG9uc2Uuc291cmNlVHJlZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCBwYXJhZ3JhcGgpO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcmVzcG9uc2Uuc291cmNlVHJlZSk7XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS50YXJnZXRUcmVlKTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMuc29ydCgoYSwgYikgPT4gKGEuaXggPiBiLml4KSA/IDEgOiAtMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyU291cmNlUGFyYW1zKCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBudWxsO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMuc3RvcFRyYW5zbGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoZGV0ZWN0ZWRMYW5ndWFnZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtT2JqZWN0ID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSxcclxuICAgICAgYWN0aXZlU3lzdGVtT2JqZWN0LnNvdXJjZUxhbmd1YWdlLCBhY3RpdmVTeXN0ZW1PYmplY3QudGFyZ2V0TGFuZ3VhZ2UpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBJRGljdGlvbmFyeUVudHJ5W10pID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlWzBdIHx8ICFyZXNwb25zZVswXS50cmFuc2xhdGlvbnMgfHwgcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyeSA9IHJlc3BvbnNlO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCwgZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcbiAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVUZXh0KHRleHQ6IHN0cmluZywgZGV0ZWN0ZWRMYW5ndWFnZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFyYWdyYXBocyA9IEh0bWxIZWxwZXIuc3BsaXRJblBhcmFncmFwaHModGV4dCk7XHJcbiAgICBjb25zdCBuZXdQYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgICBjb25zdCBuZXdTb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgICBjb25zdCBuZXdUYXJnZXRQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcblxyXG4gICAgLy8gc291cmNlIHRleHQgY2hhbmdlZC4gUHJldmlvdXNseSBtYWRlIG9ic2VydmFibGVzIGFyZW4ndCBuZWNlc3NhcnkgYW55bW9yZTtcclxuICAgIHRoaXMucmVjcmVhdGVQYXJhZ3JhcGhUcmFuc2xhdGlvblN1YmplY3QoZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHBhcmFncmFwaCB3aXRoIHNhbWUgdGV4dCBleGlzdHMgKHNvIHlvdSBkb24ndCBoYXZlIHRvIHRyYW5zbGF0ZSBpdCBhZ2FpbikuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIHlvdSBjYW4gY2xvbmUgaXQuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoSW5mbyA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5maW5kRXhpc3RpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBpeCwgdGhpcy5wYXJhZ3JhcGhzKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGggPSBleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGg7XHJcbiAgICAgIGlmIChleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGgpIHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nUGFyYWdyYXBoSW5mby5oYXNTYW1lSXgpIHtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY3JlYXRlRW1wdHlQYXJhZ3JhcGhJbmZvKGl4KTtcclxuXHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gbmV3UGFyYWdyYXBocztcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IG5ld1RhcmdldFBhcmFncmFwaHM7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBuZXdTb3VyY2VQYXJhZ3JhcGhzO1xyXG5cclxuICAgIHBhcmFncmFwaHMuZm9yRWFjaCgocGFyYWdyYXBoLCBpeCkgPT4ge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QubmV4dCh7IGl4OiBpeCwgbGluZTogcGFyYWdyYXBoIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNUcmFuc2xhdGluZykge1xyXG4gICAgICB0aGlzLnNldFByb2dyZXNzSW5kaWNhdG9yVGltZW91dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIENyZWF0ZXMgdGltZW91dCB3aGljaCBlbmFibGVzIHByb2dyZXNzIGluZGljYXRvciBhZnRlciBnaXZlbiBtaWxpc2Vjb25kcyAqL1xyXG4gIHByaXZhdGUgc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IG51bGwgfHwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgICAgfSwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZpc2libGUuICovXHJcbiAgcHJpdmF0ZSBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciBoaWRkZW4uICovXHJcbiAgaGlkZVByb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xyXG4gICAgLy8gaWYgbm90aGluZyB0cmFuc2xhdGVkLCB0dHMgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGVcclxuICAgIGlmICghdGhpcy50YXJnZXRQYXJhZ3JhcGhzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlLCB0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MobGFuZ3VhZ2VDb2RlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFRleHRUb1NwZWVjaFNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5sYW5ndWFnZXNbbGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmIChzZXR0aW5ncykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRleHQsXHJcbiAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgdm9pY2U6IHNldHRpbmdzLnZvaWNlLFxyXG4gICAgICAgIGxhbmdCcGM0Nzogc2V0dGluZ3MubGFuZ0JwYzQ3LFxyXG4gICAgICAgIG1heENoYXJzSW5UZXh0OiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLm1heENoYXJzSW5UZXh0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -7192,8 +7192,11 @@ class TldTranslateTextService {
|
|
|
7192
7192
|
return this.api.dictionaryTranslation(text, srcCode, trgCode);
|
|
7193
7193
|
}
|
|
7194
7194
|
changeSource(event) {
|
|
7195
|
-
if (
|
|
7196
|
-
this.
|
|
7195
|
+
if (!event.phrase.trim().length) {
|
|
7196
|
+
this._onClear.next(null);
|
|
7197
|
+
if (this.activeData?.detectedLanguage) {
|
|
7198
|
+
this.systemManagementService.setDetectedLanguage(null);
|
|
7199
|
+
}
|
|
7197
7200
|
}
|
|
7198
7201
|
this._sourceText = event.phrase;
|
|
7199
7202
|
this._sourceChange.next(event);
|