@tilde-nlp/ngx-translate 5.0.76 → 5.0.78
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.
|
@@ -315,8 +315,13 @@ export class TldTranslateTextService {
|
|
|
315
315
|
srcLang: this.languageTranslate.getLanguageCodeTranslation(res.detectedLanguage),
|
|
316
316
|
trgLang: this.languageTranslate.getLanguageCodeTranslation(params.system.targetLanguage)
|
|
317
317
|
});
|
|
318
|
-
this.
|
|
319
|
-
|
|
318
|
+
if (this.systemManagementService.systems.find((system) => system.sourceLanguage === res.detectedLanguage)) {
|
|
319
|
+
this.systemManagementService.setDetectedLanguage(res.detectedLanguage);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
this.resetDetectedLanguage();
|
|
323
|
+
return of(this.getEmptyTranslationResponse(paragraph, params, false, true));
|
|
324
|
+
}
|
|
320
325
|
}
|
|
321
326
|
else {
|
|
322
327
|
this._onClear.next(null);
|
|
@@ -480,4 +485,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
480
485
|
providedIn: 'root'
|
|
481
486
|
}]
|
|
482
487
|
}], 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 }]; } });
|
|
483
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBSTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBTXhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7OztBQU14RyxNQUFNLE9BQU8sdUJBQXVCO0lBcUhmO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNUhYLFdBQVcsQ0FBUztJQUM1QixJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVPLHFCQUFxQixDQUFTO0lBQ3RDLElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7SUFFTyxhQUFhLEdBQWdDLElBQUks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QztJQUNkLENBQUM7d0dBdmhCVSx1QkFBdUI7NEdBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHRtbEhlbHBlciwgTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlLCBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSwgVGVybWlub2xvZ3lTZXJ2aWNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2UsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRleHRUb1NwZWVjaFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvdGV4dC10by1zcGVlY2gvbW9kZWxzL3RleHQtdG8tc3BlZWNoLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscyc7XHJcbmltcG9ydCB7IEVycm9yQ29kZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2Vycm9ycy9lcnJvci1jb2Rlcy5lbnVtJztcclxuaW1wb3J0IHsgVGxkSGlnaGxpZ2h0U2VydmljZSwgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSwgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IElEaWN0aW9uYXJ5RW50cnksIElTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgSVBhcmFncmFwaEluZm8gfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0Lm1vZGVsJztcclxuaW1wb3J0IHsgSVJldHJhbnNsYXRlUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL3JldHJhbnNsYXRlLXBhcmFtcy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgSVVudHJhbnNsYXRlZFBhcmFncmFwaCB9IGZyb20gJy4uL21vZGVscy91bnRyYW5zbGF0ZWQtcGFyYWdyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdGxkLXRyYW5zbGF0ZS10ZXh0LnV0aWxzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UgfSBmcm9tICcuL2FwaS90bGQtdHJhbnNsYXRlLXRleHQtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9hdXRvLWxhbmd1YWdlLWRldGVjdGlvbi1rZXkuY29uc3QnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZURldGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL2xhbmd1YWdlLWRldGVjdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVNjcm9sbDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlU2Nyb2xsKCkgeyByZXR1cm4gdGhpcy5fc291cmNlU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCB0cmFuc2xhdGVCdXR0b25DbGljaygpIHsgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2hhc0RpY3Rpb25hcnk6IGJvb2xlYW47XHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLl9oYXNEaWN0aW9uYXJ5OyB9XHJcbiAgc2V0IGhhc0RpY3Rpb25hcnkodmFsKSB7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gdmFsO1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpY3Rpb25hcnlFbnRyeTogSURpY3Rpb25hcnlFbnRyeVtdO1xyXG4gIGdldCBkaWN0aW9uYXJ5RW50cnkoKSB7IHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBzZXQgZGljdGlvbmFyeUVudHJ5KHZhbCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gdmFsO1xyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeUVudHJ5KSB7XHJcbiAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB0cmFuc2xhdGVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5tYXAobGluZSA9PiBsaW5lLm9yaWdpbmFsVGV4dCkuam9pbihcIlxcblwiKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DbGVhciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgdXJsVG9UcmFuc2xhdGU6IHN0cmluZztcclxuICBwYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgc291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gIHRhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgaXNTeXN0ZW1XYWtpbmdVcCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIFNldCB0aGlzIG9iamVjdCB3aXRoIG5lY2Vzc2FyeSB2YWx1ZXMgdG8gZGlzcGxheSBUVFMgY29tcG9uZW50XHJcbiAgdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3M6IFRleHRUb1NwZWVjaFNldHRpbmdzO1xyXG4gIHRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuXHJcbiAgcHJpdmF0ZSBfZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkOiBib29sZWFuO1xyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9uYXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuICBwcml2YXRlIHBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWJvdW5jZXI6IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4oKTtcclxuICBwcml2YXRlIGRlYm91bmNlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIC8qKiBIb3cgbWFueSBwYXJhZ3JhcGhzIGNhbiBiZSB0cmFuc2xhdGVkIGF0IHRoZSBzYW1lIHRpbWUuICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBDT05DVVJSRU5UX1VQTE9BRFMgPSA1O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDEwMDA7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieUVuZ2luZU5vdGlmaWNhdGlvbkVycm9yS2V5ID0gJzIxJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dCA9IDMwMDA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVUZXJtQ29sbGVjdGlvbk5vdEZvdW5kRXJyb3JLZXkgPSAnNDA0MjAxJztcclxuXHJcbiAgLyoqIFdoZXRoZXIgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBiZSBzaG93bi4gVGhpcyB2YWx1ZSBtdXN0IGJlIHNldCB0byB0cnVlIG9ubHkgaWYgY29uZmlndXJlZCB0aW1lIGhhcyBwYXNzZWQuICovXHJcbiAgcHJpdmF0ZSBfc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gZmFsc2U7XHJcbiAgZ2V0IHNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcigpIHsgcmV0dXJuIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIC8vTm9kZUpTLlRpbWVvdXRcclxuICBwcml2YXRlIHByb2dyZXNzSW5kaWNhdG9yVGltZW91dDogYW55O1xyXG5cclxuICBwcml2YXRlIF91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgZ2V0IHVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50KCkgeyByZXR1cm4gdGhpcy5fdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQ7IH1cclxuICBzZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSB2YWx1ZTtcclxuICAgIC8vIFdoZW4gdHJhbnNsYXRpb24gZmluaXNoZWQsIHByb2dyZXNzIGluZGljYXRvciBzaG91bGQgbm90IGJlIHNob3duLlxyXG4gICAgaWYgKHZhbHVlID09PSAwKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlVGV4dFRvU3BlZWNoKCk7XHJcbiAgICAgIHRoaXMuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUcmFuc2xhdGluZygpIHsgcmV0dXJuIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPiAwIHx8IHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCB9XHJcblxyXG4gIC8vIGdldHRlcnMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbjsgfTtcclxuICBnZXQgYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4OyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXg7IH07XHJcbiAgZ2V0IHVzZURpY3Rpb25hcnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy51c2VEaWN0aW9uYXJ5OyB9O1xyXG4gIGdldCBwcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHM7IH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXQgYWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkge1xyXG4gICAgaWYgKHRoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXggPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVybFRvVHJhbnNsYXRlKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZ30ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHt0aGlzLnVybFRvVHJhbnNsYXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSWYgZGljdGF0dGlvbiBpcyBhY3RpdmUuIEJhc2VkIG9uIHRoaXMsIGV4dGVuc2lvbnMgYXJlIGhpZGRlbi4gKi9cclxuICBpc0RpY3RhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHNTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlcm1pbm9sb2d5U2VydmljZTogVGVybWlub2xvZ3lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZTogTGFuZ3VhZ2VEZXRlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZVRyYW5zbGF0ZTogTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBkaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dDogc3RyaW5nLCBzcmNDb2RlOiBzdHJpbmcsIHRyZ0NvZGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpLmRpY3Rpb25hcnlUcmFuc2xhdGlvbih0ZXh0LCBzcmNDb2RlLCB0cmdDb2RlKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZShldmVudDogSVNvdXJjZUNoYW5nZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVEYXRhPy5kZXRlY3RlZExhbmd1YWdlICYmICFldmVudC5waHJhc2UudHJpbSgpLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuX3NvdXJjZVRleHQgPSBldmVudC5waHJhc2U7XHJcbiAgICB0aGlzLl9zb3VyY2VDaGFuZ2UubmV4dChldmVudCk7XHJcbiAgICB0aGlzLmRlYm91bmNlci5uZXh0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZUh5cG90aGVzaXModGV4dDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcyA9IHRleHQ7XHJcbiAgfVxyXG5cclxuICBvblNvdXJjZVNjcm9sbChvZmZzZXRUb3A6IG51bWJlcikge1xyXG4gICAgdGhpcy5fc291cmNlU2Nyb2xsLm5leHQob2Zmc2V0VG9wKTtcclxuICB9XHJcblxyXG4gIG9uVHJhbnNsYXRlQnV0dG9uQ2xpY2soKSB7XHJcbiAgICB0aGlzLl90cmFuc2xhdGVCdXR0b25DbGljay5uZXh0KG51bGwpXHJcbiAgICB0aGlzLnJldHJhbnNsYXRlKHsgYnV0dG9uQ2xpY2tlZDogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyU291cmNlKCkge1xyXG4gICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTtcclxuICAgIHRoaXMuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBcIlwiIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhcigpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29uQ2xlYXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUcmFuc2xhdGlvbihvcHRpb25zOiBzdHJpbmcsIHN5c3RlbUlEOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgdHJhbnNsYXRpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpLnVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnMsIHN5c3RlbUlELCB0ZXh0LCB0cmFuc2xhdGlvbik7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5PbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gdGhpcy5kZWJvdW5jZXIucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzLnBocmFzZSA9PSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICAgIH0pLFxyXG4gICAgICBkZWJvdW5jZShldiA9PiBldi5waHJhc2U/Lmxlbmd0aCA+IDAgPyB0aW1lcih0aGlzLkRFQk9VTkNFX1RJTUUpIDogdGltZXIoMCkpXHJcbiAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWdobGlnaHRTZXJ2aWNlLmNoYW5nZVNlbGVjdGVkVGFyZ2V0U2VudGVuY2UobnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQuZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0b3BMaXN0ZW5pbmdUb0NoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBpZiBtZXRob2QgZ2V0cyBjYWxsZWQgYmVjYXVzZSBvZiBidXR0b24gY2xpY2sgYW5kIHVybCBlbnRlcmVkIC0gZ28gdG8gd2ViIHRyYW5zbGF0aW9uXHJcbiAgcmV0cmFuc2xhdGUocGFyYW1zPzogSVJldHJhbnNsYXRlUGFyYW1zKSB7XHJcbiAgICBpZiAoIXRoaXMuc291cmNlVGV4dCB8fCB0aGlzLnNvdXJjZVRleHQgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zPy5idXR0b25DbGlja2VkIHx8IHBhcmFtcz8uc3lzdGVtQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtSWQgPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLmlkO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uID0gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuZW5naW5lc1thY3RpdmVTeXN0ZW1JZF0/LnNlbGVjdGVkO1xyXG4gICAgLy8gaWYgY29sbGVjdGlvbiBpcyBub3QgaW1wb3J0ZWQgd2Ugd2FudCB0byBhdm9pZCBpbnN0YW50IHRyYW5zbGF0aW9uXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2xsZWN0aW9uICYmICFzZWxlY3RlZENvbGxlY3Rpb24/Lm10Q29sbGVjdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSh7YnV0dG9uQ2xpY2tlZDogdHJ1ZX0pO1xyXG4gICAgICAgIH0sIDMwMDApICAgICAgXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ID0gMjAwO1xyXG4gICAgY29uc3QgbWF4RGljdGlvbmFyeVdvcmRzID0gMTI7XHJcblxyXG4gICAgY29uc3Qgd29yZHNJblNvdXJjZSA9IEh0bWxIZWxwZXIuZ2V0V29yZENvdW50KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gSHRtbEhlbHBlci5pc1RleHRVcmwodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIGlmICh0aGlzLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uICYmIHRoaXMudXJsVG9UcmFuc2xhdGUpIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlIHx8IHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIFRPRE8uIExldG9uaWthIGRpY3Rpb25hcnk/XHJcbiAgICBpZiAodGhpcy51c2VEaWN0aW9uYXJ5ICYmIHRoaXMuc291cmNlVGV4dC5sZW5ndGggPCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ICYmIHdvcmRzSW5Tb3VyY2UgPD0gbWF4RGljdGlvbmFyeVdvcmRzKSB7XHJcbiAgICAgIHRoaXMucHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3BzIHRleHQgdHJhbnNsYXRpb24gaWYgaXQgaXMgYWN0aXZlLiAqL1xyXG4gIHN0b3BUcmFuc2xhdGlvbigpIHtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgcmVzZXREZXRlY3RlZExhbmd1YWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmlzQXV0b0xhbmd1YWdlRGV0ZWN0aW9uRW5hYmxlZCAmJiB0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdCgpIHtcclxuICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKHVudHJhbnNsYXRlZFBhcmFncmFwaCkgPT4ge1xyXG4gICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVQYXJhZ3JhcGgodW50cmFuc2xhdGVkUGFyYWdyYXBoKS5waXBlKFxyXG4gICAgICAgICAgdGFwKChyZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGFuZGxlIHJlc3BvbnNlIGlmIHNvdXJjZSB0ZXh0IGhhcyBjaGFuZ2VkLlxyXG4gICAgICAgICAgICBpZiAoc291cmNlICE9IHRoaXMuc291cmNlVGV4dCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYW5zbGF0ZWRQYXJhZ3JhcGgocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhcmFncmFwaHModW50cmFuc2xhdGVkUGFyYWdyYXBoLml4LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID09PSAwICYmIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5kZWxldGVNZXNzYWdlKE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLklORk8sICdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIuZXJyb3I7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNTAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLnVuaGFuZGVsZWRFcnJvcih7IEVycm9yQ29kZTogRXJyb3JDb2RlLlRSQU5TTEFUSU9OX0ZBSUxFRCB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcj8uRXJyb3JDb2RlID09PSB0aGlzLnN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5pbmZvKCdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSgpO1xyXG4gICAgICAgICAgICAgIH0sIHRoaXMuc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0KVxyXG5cclxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LmVycm9yPy5jb2RlID09IHRoaXMuZW5naW5lVGVybUNvbGxlY3Rpb25Ob3RGb3VuZEVycm9yS2V5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmVycm9yKCdFUlJPUlMuRV80MDQyMDEnLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgc3ViamVjdCBpcyBkZXN0cm95ZWQgYW5kIHVuc3Vic2NyaWJlZCwgc28gdGhyb3duIGVycm9yIHdvbnQgaGF2ZSBhbnkgZWZmZWN0LlxyXG4gICAgICAgICAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgfSwgdGhpcy5DT05DVVJSRU5UX1VQTE9BRFMpLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFncmFwaDogSVVudHJhbnNsYXRlZFBhcmFncmFwaCk6IE9ic2VydmFibGU8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zID0ge1xyXG4gICAgICBwYXJhZ3JhcGhJeDogcGFyYWdyYXBoLml4LFxyXG4gICAgICB0ZXh0OiBwYXJhZ3JhcGgubGluZSxcclxuICAgICAgc3lzdGVtOiB0aGlzLmFjdGl2ZURhdGFcclxuICAgIH07XHJcbiAgICBcclxuICAgIGlmICghcGFyYW1zLnRleHQgfHwgcGFyYW1zLnRleHQudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHRoaXMuYWN0aXZlRGF0YS5zb3VyY2VMYW5ndWFnZSA9PT0gQVVUT19MQU5HVUFHRV9ERVRFQ1RJT05fS0VZIHx8IHRoaXMuYWN0aXZlRGF0YS5kZXRlY3RlZExhbmd1YWdlKSAmJiBwYXJhbXMudGV4dC50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlLmRldGVjdChwYXJhZ3JhcGgubGluZSkucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaXNMYW5ndWFnZXNTYW1lID0gcmVzLmRldGVjdGVkTGFuZ3VhZ2UgPT09IHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2U7XHJcblxyXG4gICAgICAgICAgaWYgKChyZXMuZGV0ZWN0ZWRMYW5ndWFnZSAhPT0gcGFyYW1zLnN5c3RlbS5kZXRlY3RlZExhbmd1YWdlKSAmJiAhaXNMYW5ndWFnZXNTYW1lKSB7XHJcbiAgICAgICAgICAgIHBhcmFtcy5zeXN0ZW0uZG9tYWluID0gXCJcIjtcclxuICAgICAgICAgICAgcGFyYW1zLnN5c3RlbS5kZXRlY3RlZExhbmd1YWdlID0gcmVzLmRldGVjdGVkTGFuZ3VhZ2U7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbmdpbmUgPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnN5c3RlbXMuZmluZChzeXN0ZW0gPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSByZXMuZGV0ZWN0ZWRMYW5ndWFnZSAmJiBwYXJhbXMuc3lzdGVtLnRhcmdldExhbmd1YWdlID09PSBzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVuZ2luZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShyZXMuZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICghZW5naW5lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAvLyBkaXNwbGF5aW5nIHRoYXQgZW5naW5lIG5vdCBmb3VuZC5cclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2Uud2FybmluZygnRVJST1JTLkRFVEVDVElPTi5VTkFWQUlMQUJMRScsIHsgXHJcbiAgICAgICAgICAgICAgICBzcmNMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKHJlcy5kZXRlY3RlZExhbmd1YWdlKSwgXHJcbiAgICAgICAgICAgICAgICB0cmdMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgZmFsc2UsIHRydWUpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoaXNMYW5ndWFnZXNTYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2hvd1NhbWVMYW5ndWFnZXMocmVzLmRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMpKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hcGkudHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFtcyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5hcGkudHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGg6IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGgsIHBhcmFtczogSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMsIGxlYXZlQWxsRW1wdHk/OiBib29sZWFuLCBsZWF2ZVRhcmdldEVtcHR5PzogYm9vbGVhbik6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBzb3VyY2VUcmVlOiB7IHRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lLCBwYXJhZ3JhcGhJeDogcGFyYW1zLnBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogbGVhdmVBbGxFbXB0eSA/ICcnIDogcGFyYWdyYXBoLmxpbmUgfSxcclxuICAgICAgdGFyZ2V0VHJlZTogeyB0ZXh0OiBsZWF2ZVRhcmdldEVtcHR5IHx8IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lLCBwYXJhZ3JhcGhJeDogcGFyYW1zLnBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogbGVhdmVBbGxFbXB0eSA/ICcnIDogcGFyYWdyYXBoLmxpbmUgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHBhcmFncmFwaDogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSB7XHJcbiAgICAvL2lmIGF1dG8gZG9tYWluIGRldGVjdGlvbiBpcyBvbiwgc3lzdGVtIGFwaSBzZXJ2aWNlIHNldHMgc3lzdGVtIGlkIHRvIGAke3NyY0xhbmd9LSR7dGFyZ2V0TGFuZ31gIHNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgaWYgdGhhdCBpcyB0aGUgY2FzZVxyXG4gICAgaWYgKHBhcmFncmFwaC5zeXN0ZW1JZCAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgIT09IHBhcmFncmFwaC5zeXN0ZW1JZFxyXG4gICAgICAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgPT09IGAke3RoaXMuYWN0aXZlRGF0YS5zb3VyY2VMYW5ndWFnZX0tJHt0aGlzLmFjdGl2ZURhdGEudGFyZ2V0TGFuZ3VhZ2V9YCkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmNoYW5nZVN5c3RlbShwYXJhZ3JhcGguc3lzdGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5lZWRzIHRvIHNjcm9sbCB0byB0b3AgYWZ0ZXIgZmlyc3QgcGFyYWdyYXBoIGlzIHRyYW5zbGF0ZWQuXHJcbiAgICBpZiAoIXRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCkge1xyXG4gICAgICAvLyBpZiBlbXB0eSBwYXJhZ3JhcGggaXMgJ3RyYW5zbGF0ZWQnIGZpcnN0LCBubyBuZWVkIHRvIGRvIGFueSBzY3JvbGxpbmcuIFdhaXQgZm9yIHJlYWwgdGV4dCB0byBiZSB0cmFuc2xhdGVkLlxyXG4gICAgICBpZiAocGFyYWdyYXBoLnRhcmdldFRyZWUudGV4dC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnN5bmNTY3JvbGxiYXJzKG51bGwsIDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhcmFncmFwaHMocGFyYWdyYXBoSXg6IG51bWJlciwgcmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgbGV0IHBhcmFncmFwaDogSVBhcmFncmFwaEluZm8gPSB7XHJcbiAgICAgIGl4OiBwYXJhZ3JhcGhJeCxcclxuICAgICAgdGFyZ2V0OiByZXNwb25zZS50YXJnZXRUcmVlLFxyXG4gICAgICBzb3VyY2U6IHJlc3BvbnNlLnNvdXJjZVRyZWVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcGFyYWdyYXBoKTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnNvdXJjZVRyZWUpO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcmVzcG9uc2UudGFyZ2V0VHJlZSk7XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNvcnQoKGEsIGIpID0+IChhLml4ID4gYi5peCkgPyAxIDogLTEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNvdXJjZVBhcmFtcygpIHtcclxuICAgIHRoaXMuX2RpY3Rpb25hcnlFbnRyeSA9IG51bGw7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtT2JqZWN0ID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSxcclxuICAgICAgYWN0aXZlU3lzdGVtT2JqZWN0LnNvdXJjZUxhbmd1YWdlLCBhY3RpdmVTeXN0ZW1PYmplY3QudGFyZ2V0TGFuZ3VhZ2UpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBJRGljdGlvbmFyeUVudHJ5W10pID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlWzBdIHx8ICFyZXNwb25zZVswXS50cmFuc2xhdGlvbnMgfHwgcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyeSA9IHJlc3BvbnNlO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVUZXh0KHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFyYWdyYXBocyA9IEh0bWxIZWxwZXIuc3BsaXRJblBhcmFncmFwaHModGV4dCk7XHJcbiAgICBjb25zdCBuZXdQYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgICBjb25zdCBuZXdTb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgICBjb25zdCBuZXdUYXJnZXRQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcblxyXG4gICAgLy8gc291cmNlIHRleHQgY2hhbmdlZC4gUHJldmlvdXNseSBtYWRlIG9ic2VydmFibGVzIGFyZW4ndCBuZWNlc3NhcnkgYW55bW9yZTtcclxuICAgIHRoaXMucmVjcmVhdGVQYXJhZ3JhcGhUcmFuc2xhdGlvblN1YmplY3QoKTtcclxuXHJcbiAgICBwYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCwgaXgpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgcGFyYWdyYXBoIHdpdGggc2FtZSB0ZXh0IGV4aXN0cyAoc28geW91IGRvbid0IGhhdmUgdG8gdHJhbnNsYXRlIGl0IGFnYWluKS5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgeW91IGNhbiBjbG9uZSBpdC5cclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGhJbmZvID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmZpbmRFeGlzdGluZ1BhcmFncmFwaChwYXJhZ3JhcGgsIGl4LCB0aGlzLnBhcmFncmFwaHMpO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaCA9IGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaDtcclxuICAgICAgaWYgKGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaCkge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmhhc1NhbWVJeCkge1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jcmVhdGVFbXB0eVBhcmFncmFwaEluZm8oaXgpO1xyXG5cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5uZXh0KHsgaXg6IGl4LCBsaW5lOiBwYXJhZ3JhcGggfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVHJhbnNsYXRpbmcpIHtcclxuICAgICAgdGhpcy5zZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBuZXdQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gbmV3VGFyZ2V0UGFyYWdyYXBocztcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IG5ld1NvdXJjZVBhcmFncmFwaHM7XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyB0aW1lb3V0IHdoaWNoIGVuYWJsZXMgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFmdGVyIGdpdmVuIG1pbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSBzZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gbnVsbCB8fCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclZpc2libGUpIHtcclxuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgICB9LCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgdmlzaWJsZS4gKi9cclxuICBwcml2YXRlIHNob3dQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIGhpZGRlbi4gKi9cclxuICBoaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVUZXh0VG9TcGVlY2goKSB7XHJcbiAgICAvLyBpZiBub3RoaW5nIHRyYW5zbGF0ZWQsIHR0cyBzaG91bGQgbm90IGJlIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnRhcmdldFBhcmFncmFwaHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW0gPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlLCB0aGlzLnRyYW5zbGF0ZWRUZXh0KTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhsYW5ndWFnZUNvZGU6IHN0cmluZywgdGV4dDogc3RyaW5nKTogVGV4dFRvU3BlZWNoU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLmxhbmd1YWdlc1tsYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGV4dCxcclxuICAgICAgICB1cmw6IHNldHRpbmdzLnVybCxcclxuICAgICAgICB2b2ljZTogc2V0dGluZ3Mudm9pY2UsXHJcbiAgICAgICAgbGFuZ0JwYzQ3OiBzZXR0aW5ncy5sYW5nQnBjNDcsXHJcbiAgICAgICAgbWF4Q2hhcnNJblRleHQ6IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubWF4Q2hhcnNJblRleHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBSTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBTXhFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7Ozs7OztBQU14RyxNQUFNLE9BQU8sdUJBQXVCO0lBcUhmO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNUhYLFdBQVcsQ0FBUztJQUM1QixJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVPLHFCQUFxQixDQUFTO0lBQ3RDLElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7SUFFTyxhQUFhLEdBQWdDLElBQUks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QVEsRUFBRTtZQUNaLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO2FBQ3JFLENBQUE7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0EzaEJVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBIdG1sSGVscGVyLCBMYW5ndWFnZVRyYW5zbGF0ZVNlcnZpY2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLCBUZXJtaW5vbG9neVNlcnZpY2UgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC90ZXh0LXRvLXNwZWVjaC9tb2RlbHMvdGV4dC10by1zcGVlY2gtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMvZXJyb3JzL2Vycm9yLWNvZGVzLmVudW0nO1xyXG5pbXBvcnQgeyBUbGRIaWdobGlnaHRTZXJ2aWNlLCBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLCBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUbGRTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcy9zY3JvbGwvdGxkLXNjcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSURpY3Rpb25hcnlFbnRyeSwgSVNvdXJjZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmV0cmFuc2xhdGVQYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvcmV0cmFuc2xhdGUtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJVW50cmFuc2xhdGVkUGFyYWdyYXBoIH0gZnJvbSAnLi4vbW9kZWxzL3VudHJhbnNsYXRlZC1wYXJhZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0VXRpbHMgfSBmcm9tICcuLi91dGlscy90bGQtdHJhbnNsYXRlLXRleHQudXRpbHMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSB9IGZyb20gJy4vYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2F1dG8tbGFuZ3VhZ2UtZGV0ZWN0aW9uLWtleS5jb25zdCc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGV0ZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvbGFuZ3VhZ2UtZGV0ZWN0aW9uLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0OiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVRleHRIeXBvdGhlc2lzOiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHRIeXBvdGhlc2lzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlQ2hhbmdlOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlU2Nyb2xsOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VTY3JvbGwoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VTY3JvbGwuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlQnV0dG9uQ2xpY2s6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkgeyByZXR1cm4gdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2suYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzRGljdGlvbmFyeTogYm9vbGVhbjtcclxuICBnZXQgaGFzRGljdGlvbmFyeSgpIHsgcmV0dXJuIHRoaXMuX2hhc0RpY3Rpb25hcnk7IH1cclxuICBzZXQgaGFzRGljdGlvbmFyeSh2YWwpIHtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSB2YWw7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGlvbmFyeUVudHJ5OiBJRGljdGlvbmFyeUVudHJ5W107XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlFbnRyeTsgfVxyXG4gIHNldCBkaWN0aW9uYXJ5RW50cnkodmFsKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSB2YWw7XHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5RW50cnkpIHtcclxuICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzLm1hcChsaW5lID0+IGxpbmUub3JpZ2luYWxUZXh0KS5qb2luKFwiXFxuXCIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNsZWFyID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICB1cmxUb1RyYW5zbGF0ZTogc3RyaW5nO1xyXG4gIHBhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICBzb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgdGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICBpc1N5c3RlbVdha2luZ1VwITogYm9vbGVhbjtcclxuXHJcbiAgLy8gU2V0IHRoaXMgb2JqZWN0IHdpdGggbmVjZXNzYXJ5IHZhbHVlcyB0byBkaXNwbGF5IFRUUyBjb21wb25lbnRcclxuICB0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcbiAgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3M6IFRleHRUb1NwZWVjaFNldHRpbmdzO1xyXG5cclxuICBwcml2YXRlIF9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ6IGJvb2xlYW47XHJcbiAgZ2V0IGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpY3Rpb25hcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlcjogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PigpO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEhvdyBtYW55IHBhcmFncmFwaHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTkNVUlJFTlRfVVBMT0FEUyA9IDU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJPVU5DRV9USU1FID0gMTAwMDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkgPSAnMjEnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0ID0gMzAwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSA9ICc0MDQyMDEnO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDAgfHwgdGhpcy5pc1N5c3RlbVdha2luZ1VwIH1cclxuXHJcbiAgLy8gZ2V0dGVycyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdXNlRGljdGlvbmFyeSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnVzZURpY3Rpb25hcnk7IH07XHJcbiAgZ2V0IHByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kczsgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldCBhY3RpdmVEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2UuZ2V0QWN0aXZlU3lzdGVtT2JqKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRlVXJsUmVkaXJlY3QoKSB7XHJcbiAgICBpZiAodGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudXJsVG9UcmFuc2xhdGUpfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nfSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke3RoaXMudXJsVG9UcmFuc2xhdGV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBJZiBkaWN0YXR0aW9uIGlzIGFjdGl2ZS4gQmFzZWQgb24gdGhpcywgZXh0ZW5zaW9ucyBhcmUgaGlkZGVuLiAqL1xyXG4gIGlzRGljdGF0aW5nOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtTWFuYWdlbWVudFNlcnZpY2U6IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTY3JvbGxTZXJ2aWNlOiBUbGRTY3JvbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhpZ2hsaWdodFNlcnZpY2U6IFRsZEhpZ2hsaWdodFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0c1NlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVybWlub2xvZ3lTZXJ2aWNlOiBUZXJtaW5vbG9neVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlOiBMYW5ndWFnZURldGVjdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlVHJhbnNsYXRlOiBMYW5ndWFnZVRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGRpY3Rpb25hcnlUcmFuc2xhdGlvbih0ZXh0OiBzdHJpbmcsIHNyY0NvZGU6IHN0cmluZywgdHJnQ29kZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkuZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQsIHNyY0NvZGUsIHRyZ0NvZGUpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlKGV2ZW50OiBJU291cmNlQ2hhbmdlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UgJiYgIWV2ZW50LnBocmFzZS50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShudWxsKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0IHx8IHRoaXMuc291cmNlVGV4dCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXM/LmJ1dHRvbkNsaWNrZWQgfHwgcGFyYW1zPy5zeXN0ZW1DaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW1JZCA9IHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2UuZ2V0QWN0aXZlU3lzdGVtT2JqKCkuaWQ7XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbGxlY3Rpb24gPSB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5lbmdpbmVzW2FjdGl2ZVN5c3RlbUlkXT8uc2VsZWN0ZWQ7XHJcbiAgICAvLyBpZiBjb2xsZWN0aW9uIGlzIG5vdCBpbXBvcnRlZCB3ZSB3YW50IHRvIGF2b2lkIGluc3RhbnQgdHJhbnNsYXRpb25cclxuICAgIGlmIChzZWxlY3RlZENvbGxlY3Rpb24gJiYgIXNlbGVjdGVkQ29sbGVjdGlvbj8ubXRDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKHtidXR0b25DbGlja2VkOiB0cnVlfSk7XHJcbiAgICAgICAgfSwgMzAwMCkgICAgICBcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgPSAyMDA7XHJcbiAgICBjb25zdCBtYXhEaWN0aW9uYXJ5V29yZHMgPSAxMjtcclxuXHJcbiAgICBjb25zdCB3b3Jkc0luU291cmNlID0gSHRtbEhlbHBlci5nZXRXb3JkQ291bnQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBIdG1sSGVscGVyLmlzVGV4dFVybCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgaWYgKHRoaXMuYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24gJiYgdGhpcy51cmxUb1RyYW5zbGF0ZSkge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaHMgPSBbXTtcclxuICAgICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUgfHwgcGFyYW1zPy5idXR0b25DbGlja2VkKSB7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy50cmFuc2xhdGVVcmxSZWRpcmVjdCwgXCJfYmxhbmtcIik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETy4gTGV0b25pa2EgZGljdGlvbmFyeT9cclxuICAgIGlmICh0aGlzLnVzZURpY3Rpb25hcnkgJiYgdGhpcy5zb3VyY2VUZXh0Lmxlbmd0aCA8IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgJiYgd29yZHNJblNvdXJjZSA8PSBtYXhEaWN0aW9uYXJ5V29yZHMpIHtcclxuICAgICAgdGhpcy5wcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICAvKiogU3RvcHMgdGV4dCB0cmFuc2xhdGlvbiBpZiBpdCBpcyBhY3RpdmUuICovXHJcbiAgc3RvcFRyYW5zbGF0aW9uKCkge1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICBpZiAodGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSByZXNldERldGVjdGVkTGFuZ3VhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcuaXNBdXRvTGFuZ3VhZ2VEZXRlY3Rpb25FbmFibGVkICYmIHRoaXMuYWN0aXZlRGF0YT8uZGV0ZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KCkge1xyXG4gICAgdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlVGV4dDtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCgodW50cmFuc2xhdGVkUGFyYWdyYXBoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCArPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVBhcmFncmFwaCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgpLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBoYW5kbGUgcmVzcG9uc2UgaWYgc291cmNlIHRleHQgaGFzIGNoYW5nZWQuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gdGhpcy5zb3VyY2VUZXh0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYWdyYXBocyh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGguaXgsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPT09IDAgJiYgdGhpcy5pc1N5c3RlbVdha2luZ1VwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N5c3RlbVdha2luZ1VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmRlbGV0ZU1lc3NhZ2UoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuSU5GTywgJ0VSUk9SUy5FXzIxJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5lcnJvcjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKHsgRXJyb3JDb2RlOiBFcnJvckNvZGUuVFJBTlNMQVRJT05fRkFJTEVEIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5FcnJvckNvZGUgPT09IHRoaXMuc3RhbmRieUVuZ2luZU5vdGlmaWNhdGlvbkVycm9yS2V5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLmluZm8oJ0VSUk9SUy5FXzIxJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1N5c3RlbVdha2luZ1VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJhbnNsYXRlKCk7XHJcbiAgICAgICAgICAgICAgfSwgdGhpcy5zdGFuZGJ5U3lzdGVtUmV0cmFuc2xhdGlvblRpbWVvdXQpXHJcblxyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcj8uZXJyb3I/LmNvZGUgPT0gdGhpcy5lbmdpbmVUZXJtQ29sbGVjdGlvbk5vdEZvdW5kRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuZXJyb3IoJ0VSUk9SUy5FXzQwNDIwMScsIGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydHNTZXJ2aWNlLnVuaGFuZGVsZWRFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kLCBzdWJqZWN0IGlzIGRlc3Ryb3llZCBhbmQgdW5zdWJzY3JpYmVkLCBzbyB0aHJvd24gZXJyb3Igd29udCBoYXZlIGFueSBlZmZlY3QuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcFRyYW5zbGF0aW9uKCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICB9LCB0aGlzLkNPTkNVUlJFTlRfVVBMT0FEUyksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVQYXJhZ3JhcGgocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoKTogT2JzZXJ2YWJsZTxJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHBhcmFtczogSVRyYW5zbGF0ZVBhcmFncmFwaFJlcXVlc3RQYXJhbXMgPSB7XHJcbiAgICAgIHBhcmFncmFwaEl4OiBwYXJhZ3JhcGguaXgsXHJcbiAgICAgIHRleHQ6IHBhcmFncmFwaC5saW5lLFxyXG4gICAgICBzeXN0ZW06IHRoaXMuYWN0aXZlRGF0YVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgaWYgKCFwYXJhbXMudGV4dCB8fCBwYXJhbXMudGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgodGhpcy5hY3RpdmVEYXRhLnNvdXJjZUxhbmd1YWdlID09PSBBVVRPX0xBTkdVQUdFX0RFVEVDVElPTl9LRVkgfHwgdGhpcy5hY3RpdmVEYXRhLmRldGVjdGVkTGFuZ3VhZ2UpICYmIHBhcmFtcy50ZXh0LnRyaW0oKS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2UuZGV0ZWN0KHBhcmFncmFwaC5saW5lKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpc0xhbmd1YWdlc1NhbWUgPSByZXMuZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZTtcclxuXHJcbiAgICAgICAgICBpZiAoKHJlcy5kZXRlY3RlZExhbmd1YWdlICE9PSBwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UpICYmICFpc0xhbmd1YWdlc1NhbWUpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnN5c3RlbS5kb21haW4gPSBcIlwiO1xyXG4gICAgICAgICAgICBwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSByZXMuZGV0ZWN0ZWRMYW5ndWFnZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZSA9IHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc3lzdGVtcy5maW5kKHN5c3RlbSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHJlcy5kZXRlY3RlZExhbmd1YWdlICYmIHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT09IHN5c3RlbS50YXJnZXRMYW5ndWFnZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZW5naW5lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKHJlcy5kZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCFlbmdpbmUpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIGRpc3BsYXlpbmcgdGhhdCBlbmdpbmUgbm90IGZvdW5kLlxyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS53YXJuaW5nKCdFUlJPUlMuREVURUNUSU9OLlVOQVZBSUxBQkxFJywgeyBcclxuICAgICAgICAgICAgICAgIHNyY0xhbmc6IHRoaXMubGFuZ3VhZ2VUcmFuc2xhdGUuZ2V0TGFuZ3VhZ2VDb2RlVHJhbnNsYXRpb24ocmVzLmRldGVjdGVkTGFuZ3VhZ2UpLCBcclxuICAgICAgICAgICAgICAgIHRyZ0xhbmc6IHRoaXMubGFuZ3VhZ2VUcmFuc2xhdGUuZ2V0TGFuZ3VhZ2VDb2RlVHJhbnNsYXRpb24ocGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZSkgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnN5c3RlbXMuZmluZCgoc3lzdGVtKSA9PiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2UgPT09IHJlcy5kZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKHJlcy5kZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgZmFsc2UsIHRydWUpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGlzTGFuZ3VhZ2VzU2FtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dTYW1lTGFuZ3VhZ2VzKHJlcy5kZXRlY3RlZExhbmd1YWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaCwgcGFyYW1zKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoLCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zLCBsZWF2ZUFsbEVtcHR5PzogYm9vbGVhbiwgbGVhdmVUYXJnZXRFbXB0eT86IGJvb2xlYW4pOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc291cmNlVHJlZTogeyB0ZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH0sXHJcbiAgICAgIHRhcmdldFRyZWU6IHsgdGV4dDogbGVhdmVUYXJnZXRFbXB0eSB8fCBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5jaGFuZ2VTeXN0ZW0ocGFyYWdyYXBoLnN5c3RlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWVkcyB0byBzY3JvbGwgdG8gdG9wIGFmdGVyIGZpcnN0IHBhcmFncmFwaCBpcyB0cmFuc2xhdGVkLlxyXG4gICAgaWYgKCF0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuICAgICAgLy8gaWYgZW1wdHkgcGFyYWdyYXBoIGlzICd0cmFuc2xhdGVkJyBmaXJzdCwgbm8gbmVlZCB0byBkbyBhbnkgc2Nyb2xsaW5nLiBXYWl0IGZvciByZWFsIHRleHQgdG8gYmUgdHJhbnNsYXRlZC5cclxuICAgICAgaWYgKHBhcmFncmFwaC50YXJnZXRUcmVlLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zeW5jU2Nyb2xsYmFycyhudWxsLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYXJhZ3JhcGhzKHBhcmFncmFwaEl4OiBudW1iZXIsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIGxldCBwYXJhZ3JhcGg6IElQYXJhZ3JhcGhJbmZvID0ge1xyXG4gICAgICBpeDogcGFyYWdyYXBoSXgsXHJcbiAgICAgIHRhcmdldDogcmVzcG9uc2UudGFyZ2V0VHJlZSxcclxuICAgICAgc291cmNlOiByZXNwb25zZS5zb3VyY2VUcmVlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHBhcmFncmFwaCk7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS5zb3VyY2VUcmVlKTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnRhcmdldFRyZWUpO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zb3J0KChhLCBiKSA9PiAoYS5peCA+IGIuaXgpID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3VyY2VQYXJhbXMoKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcygpIHtcclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbU9iamVjdCA9IHRoaXMuYWN0aXZlRGF0YTtcclxuICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IHRoaXMuZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRoaXMuc291cmNlVGV4dC50cmltKCksXHJcbiAgICAgIGFjdGl2ZVN5c3RlbU9iamVjdC5zb3VyY2VMYW5ndWFnZSwgYWN0aXZlU3lzdGVtT2JqZWN0LnRhcmdldExhbmd1YWdlKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogSURpY3Rpb25hcnlFbnRyeVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZVswXSB8fCAhcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zIHx8IHJlc3BvbnNlWzBdLnRyYW5zbGF0aW9ucy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICAgICAgICB0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cnkgPSByZXNwb25zZTtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlVGV4dCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcmFncmFwaHMgPSBIdG1sSGVscGVyLnNwbGl0SW5QYXJhZ3JhcGhzKHRleHQpO1xyXG4gICAgY29uc3QgbmV3UGFyYWdyYXBoczogSVBhcmFncmFwaEluZm9bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3VGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICAgIC8vIHNvdXJjZSB0ZXh0IGNoYW5nZWQuIFByZXZpb3VzbHkgbWFkZSBvYnNlcnZhYmxlcyBhcmVuJ3QgbmVjZXNzYXJ5IGFueW1vcmU7XHJcbiAgICB0aGlzLnJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KCk7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHBhcmFncmFwaCB3aXRoIHNhbWUgdGV4dCBleGlzdHMgKHNvIHlvdSBkb24ndCBoYXZlIHRvIHRyYW5zbGF0ZSBpdCBhZ2FpbikuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIHlvdSBjYW4gY2xvbmUgaXQuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoSW5mbyA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5maW5kRXhpc3RpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBpeCwgdGhpcy5wYXJhZ3JhcGhzKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGggPSBleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGg7XHJcbiAgICAgIGlmIChleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGgpIHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nUGFyYWdyYXBoSW5mby5oYXNTYW1lSXgpIHtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY3JlYXRlRW1wdHlQYXJhZ3JhcGhJbmZvKGl4KTtcclxuXHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QubmV4dCh7IGl4OiBpeCwgbGluZTogcGFyYWdyYXBoIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1RyYW5zbGF0aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gbmV3UGFyYWdyYXBocztcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IG5ld1RhcmdldFBhcmFncmFwaHM7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBuZXdTb3VyY2VQYXJhZ3JhcGhzO1xyXG4gIH1cclxuXHJcbiAgLyoqIENyZWF0ZXMgdGltZW91dCB3aGljaCBlbmFibGVzIHByb2dyZXNzIGluZGljYXRvciBhZnRlciBnaXZlbiBtaWxpc2Vjb25kcyAqL1xyXG4gIHByaXZhdGUgc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IG51bGwgfHwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgICAgfSwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZpc2libGUuICovXHJcbiAgcHJpdmF0ZSBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciBoaWRkZW4uICovXHJcbiAgaGlkZVByb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xyXG4gICAgLy8gaWYgbm90aGluZyB0cmFuc2xhdGVkLCB0dHMgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGVcclxuICAgIGlmICghdGhpcy50YXJnZXRQYXJhZ3JhcGhzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlLCB0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MobGFuZ3VhZ2VDb2RlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFRleHRUb1NwZWVjaFNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5sYW5ndWFnZXNbbGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmIChzZXR0aW5ncykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRleHQsXHJcbiAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgdm9pY2U6IHNldHRpbmdzLnZvaWNlLFxyXG4gICAgICAgIGxhbmdCcGM0Nzogc2V0dGluZ3MubGFuZ0JwYzQ3LFxyXG4gICAgICAgIG1heENoYXJzSW5UZXh0OiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLm1heENoYXJzSW5UZXh0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -7368,8 +7368,13 @@ class TldTranslateTextService {
|
|
|
7368
7368
|
srcLang: this.languageTranslate.getLanguageCodeTranslation(res.detectedLanguage),
|
|
7369
7369
|
trgLang: this.languageTranslate.getLanguageCodeTranslation(params.system.targetLanguage)
|
|
7370
7370
|
});
|
|
7371
|
-
this.
|
|
7372
|
-
|
|
7371
|
+
if (this.systemManagementService.systems.find((system) => system.sourceLanguage === res.detectedLanguage)) {
|
|
7372
|
+
this.systemManagementService.setDetectedLanguage(res.detectedLanguage);
|
|
7373
|
+
}
|
|
7374
|
+
else {
|
|
7375
|
+
this.resetDetectedLanguage();
|
|
7376
|
+
return of(this.getEmptyTranslationResponse(paragraph, params, false, true));
|
|
7377
|
+
}
|
|
7373
7378
|
}
|
|
7374
7379
|
else {
|
|
7375
7380
|
this._onClear.next(null);
|