@firestitch/list 9.12.3 → 9.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/classes/pagination-controller.d.ts +10 -6
- package/bundles/firestitch-list.umd.js +73 -59
- package/bundles/firestitch-list.umd.js.map +1 -1
- package/bundles/firestitch-list.umd.min.js +1 -1
- package/bundles/firestitch-list.umd.min.js.map +1 -1
- package/esm2015/app/classes/list-controller.js +14 -4
- package/esm2015/app/classes/pagination-controller.js +40 -40
- package/esm5/app/classes/list-controller.js +14 -4
- package/esm5/app/classes/pagination-controller.js +62 -60
- package/fesm2015/firestitch-list.js +52 -40
- package/fesm2015/firestitch-list.js.map +1 -1
- package/fesm5/firestitch-list.js +74 -60
- package/fesm5/firestitch-list.js.map +1 -1
- package/firestitch-list.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -393,9 +393,18 @@ var List = /** @class */ (function (_super) {
|
|
|
393
393
|
var _a;
|
|
394
394
|
(_a = _this.selection) === null || _a === void 0 ? void 0 : _a.closeSelectionDialog();
|
|
395
395
|
}), map(function (params) {
|
|
396
|
-
var query =
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
var query = Object.assign({}, _this.filtersQuery);
|
|
397
|
+
if (_this.paging.hasOffsetStrategy && params && params.loadOffset) {
|
|
398
|
+
query = Object.assign(query, _this.paging.loadDeletedOffsetQuery);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
if (_this.initialFetch && _this.paging.loadMoreEnabled) {
|
|
402
|
+
query = Object.assign(query, _this.paging.loadMoreQuery);
|
|
403
|
+
}
|
|
404
|
+
else {
|
|
405
|
+
query = Object.assign(query, _this.paging.query);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
399
408
|
if (_this.sorting.sortingColumn) {
|
|
400
409
|
Object.assign(query, {
|
|
401
410
|
order: _this.sorting.sortingColumn.name + "," + _this.sorting.sortingColumn.direction
|
|
@@ -422,6 +431,7 @@ var List = /** @class */ (function (_super) {
|
|
|
422
431
|
return source$;
|
|
423
432
|
}), takeUntil(this.onDestroy$))
|
|
424
433
|
.subscribe(function (response) {
|
|
434
|
+
_this.initialFetch = false;
|
|
425
435
|
_this.completeFetch(response);
|
|
426
436
|
});
|
|
427
437
|
};
|
|
@@ -768,4 +778,4 @@ var List = /** @class */ (function (_super) {
|
|
|
768
778
|
return List;
|
|
769
779
|
}(Model));
|
|
770
780
|
export { List };
|
|
771
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL2xpc3QtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFxRCxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUlqRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV4QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixJQUFJLEVBQ0osVUFBVSxFQUNWLEVBQUUsRUFDRixPQUFPLEVBRVIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixHQUFHLEVBQ0gsS0FBSyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFrQjFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlC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QUFBLEFBLzFCRCxDQUEwQixLQUFLLEdBKzFCOUI7U0EvMUJZLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDaGFuZ2VGbiwgRmlsdGVyQ29uZmlnLCBJRmlsdGVyU2F2ZWRGaWx0ZXJzQ29uZmlnLCBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc1Njcm9sbEluc3RhbmNlLCBGc1Njcm9sbFNlcnZpY2UgfSBmcm9tICdAZmlyZXN0aXRjaC9zY3JvbGwnO1xuaW1wb3J0IHsgU2VsZWN0aW9uRGlhbG9nIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2VsZWN0aW9uJztcblxuaW1wb3J0IHsgQWxpYXMsIE1vZGVsIH0gZnJvbSAndHNtb2RlbHMnO1xuXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb25cbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBkZWJvdW5jZVRpbWUsXG4gIG1hcCxcbiAgbWFwVG8sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1uLm1vZGVsJztcblxuLy8gSW50ZXJmYWNlc1xuaW1wb3J0IHtcbiAgRnNMaXN0QWZ0ZXJGZXRjaEZuLFxuICBGc0xpc3RDb25maWcsXG4gIEZzTGlzdEVtcHR5U3RhdGVDb25maWcsIEZzTGlzdEZldGNoRm4sIEZzTGlzdEZldGNoT3B0aW9ucyxcbiAgRnNMaXN0RmV0Y2hTdWJzY3JpcHRpb24sXG4gIEZzTGlzdEdyb3VwQ29uZmlnLFxuICBGc0xpc3RMb2FkTW9yZUNvbmZpZyxcbiAgRnNMaXN0Tm9SZXN1bHRzQ29uZmlnLFxuICBGc0xpc3RSZXN0b3JlQ29uZmlnLFxuICBGc0xpc3RTY3JvbGxhYmxlQ29uZmlnLFxuICBGc0xpc3RTZWxlY3Rpb25Db25maWcsXG4gIEZzTGlzdFRyYWNrQnlGbixcbiAgRnNQYWdpbmcsXG4gIFBhZ2VDaGFuZ2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdHlsZUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9zdHlsZUNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9tb2RlbHMvcm93LWFjdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDb2x1bW5zQ29udHJvbGxlciB9IGZyb20gJy4vY29sdW1ucy1jb250cm9sbGVyJztcbmltcG9ydCB7IFBhZ2VDaGFuZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFnZS1jaGFuZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBEYXRhQ29udHJvbGxlciB9IGZyb20gJy4vZGF0YS1jb250cm9sbGVyJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi9wYWdpbmF0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vc2VsZWN0aW9uLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgU29ydGluZ0NvbnRyb2xsZXIgfSBmcm9tICcuL3NvcnRpbmctY29udHJvbGxlcic7XG5cbmltcG9ydCB7IEZzTGlzdFN0YXRlIH0gZnJvbSAnLi4vZW51bXMvc3RhdGUuZW51bSc7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZUNvbnRyb2xsZXIgfSBmcm9tICcuL3BlcnNpc3RhbmNlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyIH0gZnJvbSAnLi9leHRlcm5hbC1wYXJhbXMtY29udHJvbGxlcic7XG5cbmNvbnN0IFNIT1dfREVMRVRFRF9GSUxURVJTX0tFWSA9ICckJF9zaG93X2RlbGV0ZWRfJCQnO1xuXG5cbmV4cG9ydCBjbGFzcyBMaXN0IGV4dGVuZHMgTW9kZWwge1xuICBAQWxpYXMoKSBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBAQWxpYXMoKSBwdWJsaWMgdHJhY2tCeTogc3RyaW5nO1xuICBAQWxpYXMoKSBwdWJsaWMgc3ViaGVhZGluZzogc3RyaW5nO1xuICBAQWxpYXMoKSBwdWJsaWMgaW5saW5lRmlsdGVyczogYW55O1xuICAvLyBAQWxpYXMoJ2FjdGlvbnMnLCBBY3Rpb24pIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXTtcbiAgQEFsaWFzKCdyb3dBY3Rpb25zJykgcHVibGljIHJvd0FjdGlvbnNSYXc6IGFueVtdO1xuICBwdWJsaWMgZ3JvdXBBY3Rpb25zUmF3OiBhbnlbXTtcbiAgQEFsaWFzKCdyb3dDbGFzcycpIHB1YmxpYyByb3dDbGFzcztcbiAgQEFsaWFzKCkgcHVibGljIHJvd0V2ZW50czogYW55O1xuICBAQWxpYXMoKSBwdWJsaWMgcmVzdG9yZTogRnNMaXN0UmVzdG9yZUNvbmZpZztcbiAgQEFsaWFzKCkgcHVibGljIGNvbHVtblRlbXBsYXRlczogYW55O1xuICBAQWxpYXMoKSBwdWJsaWMgcGVyc2lzdDogYm9vbGVhbjtcbiAgQEFsaWFzKCkgcHVibGljIGZpbHRlcnMgPSBbXTtcbiAgQEFsaWFzKCdmaWx0ZXJJbml0JykgcHVibGljIGZpbHRlckluaXRDYjogQ2hhbmdlRm47XG4gIEBBbGlhcygnZmlsdGVyQ2hhbmdlJykgcHVibGljIGZpbHRlckNoYW5nZUNiOiBDaGFuZ2VGbjtcbiAgQEFsaWFzKCkgcHVibGljIHNhdmVkRmlsdGVyczogSUZpbHRlclNhdmVkRmlsdGVyc0NvbmZpZztcbiAgQEFsaWFzKCkgcHVibGljIHNjcm9sbGFibGU6IEZzTGlzdFNjcm9sbGFibGVDb25maWcgfCBmYWxzZSA9IGZhbHNlO1xuICBAQWxpYXMoKSBwdWJsaWMgbm9SZXN1bHRzOiBGc0xpc3ROb1Jlc3VsdHNDb25maWc7XG4gIEBBbGlhcygpIHB1YmxpYyBlbXB0eVN0YXRlOiBGc0xpc3RFbXB0eVN0YXRlQ29uZmlnO1xuICAvLyBAQWxpYXMoKSBwdWJsaWMgaW5pdGlhbEZldGNoID0gdHJ1ZTsgLy9UT0RPIGZpeG1lXG4gIEBBbGlhcygnZmV0Y2gnKSBwdWJsaWMgZmV0Y2hGbjogRnNMaXN0RmV0Y2hGbjtcbiAgQEFsaWFzKCdhZnRlckZldGNoJykgcHVibGljIGFmdGVyRmV0Y2hGbjogRnNMaXN0QWZ0ZXJGZXRjaEZuO1xuICAvLyBAQWxpYXMoJ3Jvd3MnKSBwcml2YXRlIF9yb3dzOiBhbnk7XG5cbiAgcHVibGljIGluaXRpYWxpemVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgbG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAvLyBwdWJsaWMgb3BlcmF0aW9uOiBPcGVyYXRpb247XG5cbiAgcHVibGljIGhhc1Jvd0FjdGlvbnM7XG4gIHB1YmxpYyBwYWdpbmcgPSBuZXcgUGFnaW5hdGlvbkNvbnRyb2xsZXIoKTtcblxuICBwdWJsaWMgY29sdW1ucyA9IG5ldyBDb2x1bW5zQ29udHJvbGxlcigpO1xuICBwdWJsaWMgYWN0aW9ucyA9IG5ldyBBY3Rpb25zQ29udHJvbGxlcigpO1xuICBwdWJsaWMgZGF0YUNvbnRyb2xsZXIgPSBuZXcgRGF0YUNvbnRyb2xsZXIoKTtcbiAgcHVibGljIHNvcnRpbmcgPSBuZXcgU29ydGluZ0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGV4dGVybmFsUGFyYW1zOiBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXI7XG4gIHB1YmxpYyBzZWxlY3Rpb246IFNlbGVjdGlvbkNvbnRyb2xsZXI7XG5cbiAgcHVibGljIGZpbHRlckNvbmZpZzogRmlsdGVyQ29uZmlnID0gbnVsbDtcblxuICBwdWJsaWMgZmV0Y2gkID0gbmV3IFN1YmplY3Q8RnNMaXN0RmV0Y2hTdWJzY3JpcHRpb24gfCB2b2lkPigpO1xuICBwdWJsaWMgZmV0Y2hDb21wbGV0ZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgZmlsdGVyc1JlYWR5JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIHN0YXR1cyA9IHRydWU7XG4gIHB1YmxpYyBjaGlwcyA9IGZhbHNlO1xuICBwdWJsaWMgZmlsdGVySW5wdXQgPSB0cnVlO1xuICBwdWJsaWMgcXVlcnlQYXJhbSA9IGZhbHNlO1xuICBwdWJsaWMgcmVzdG9yZU1vZGUgPSBmYWxzZTtcblxuICBwdWJsaWMgaW5pdGlhbEZldGNoID0gdHJ1ZTtcblxuICAvLyBFbXB0eSBzdGF0ZVxuICBwdWJsaWMgZW1wdHlTdGF0ZUVuYWJsZWQgPSBmYWxzZTtcbiAgcHVibGljIGVtcHR5U3RhdGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwdWJsaWMgZnNTY3JvbGxJbnN0YW5jZTogRnNTY3JvbGxJbnN0YW5jZTtcblxuICBwdWJsaWMgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVyc1F1ZXJ5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWNvcmQ8c3RyaW5nLCBhbnk+PihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGVhZGVyQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZ3JvdXBDZWxsQ29uZmlnOiBTdHlsZUNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfY2VsbENvbmZpZzogU3R5bGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zvb3RlckNvbmZpZzogU3R5bGVDb25maWc7XG5cbiAgcHJpdmF0ZSBfZnNTY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY29uZmlnOiBGc0xpc3RDb25maWcgPSB7fSxcbiAgICBwcml2YXRlIGZzU2Nyb2xsOiBGc1Njcm9sbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25EaWFsb2c6IFNlbGVjdGlvbkRpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcGVyc2lzdGFuY2U6IFBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBwcml2YXRlIGluRGlhbG9nOiBib29sZWFuLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2Zyb21KU09OKGNvbmZpZyk7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoY29uZmlnKTtcblxuICAgIHRoaXMuX2hlYWRlckNvbmZpZyA9IG5ldyBTdHlsZUNvbmZpZyhjb25maWcuaGVhZGVyKTtcbiAgICB0aGlzLl9ncm91cENlbGxDb25maWcgPSBuZXcgU3R5bGVDb25maWcoY29uZmlnLmNlbGwpO1xuICAgIHRoaXMuX2NlbGxDb25maWcgPSBuZXcgU3R5bGVDb25maWcoY29uZmlnLmNlbGwpO1xuICAgIHRoaXMuX2Zvb3RlckNvbmZpZyA9IG5ldyBTdHlsZUNvbmZpZyhjb25maWcuZm9vdGVyKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZWQkLm5leHQodHJ1ZSk7XG5cbiAgICB0aGlzLnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMuaW5pdGlhbEZldGNoKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Mb2FkKTtcbiAgICAgIHRoaXMuZmV0Y2gkLm5leHQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzU2F2ZWRGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmlsdGVyQ29uZmlnLnNhdmVkRmlsdGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzUXVlcnkuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc1F1ZXJ5JCgpOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyc1F1ZXJ5LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGZldGNoUmVtb3RlKHF1ZXJ5KSB7XG4gICAgY29uc3Qgb3B0aW9uczogRnNMaXN0RmV0Y2hPcHRpb25zID0ge1xuICAgICAgc3RhdGU6IHRoaXMuZGF0YUNvbnRyb2xsZXIub3BlcmF0aW9uLFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQ6IGFueSA9IHRoaXMuZmV0Y2hGbihxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSA/IGZyb20ocmVzdWx0KSA6IHJlc3VsdDtcbiAgfVxuXG4gIC8vIHB1YmxpYyBsb2FkTG9jYWwoKSB7XG4gIC8vICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5nTWFudWFsKHRoaXMuX3Jvd3MpO1xuICAvLyAgIGNvbnN0IGZyb20gPSAodGhpcy5wYWdpbmcucGFnZSAtIDEpICogdGhpcy5wYWdpbmcubGltaXQ7XG4gIC8vICAgY29uc3QgdG8gPSAodGhpcy5wYWdpbmcucGFnZSA9PT0gMSkgPyB0aGlzLnBhZ2luZy5saW1pdCA6IHRoaXMucGFnaW5nLmxpbWl0ICogdGhpcy5wYWdpbmcucGFnZTtcbiAgLy8gICBjb25zdCBzbGljZU9mUm93cyA9IHRoaXMuX3Jvd3Muc2xpY2UoZnJvbSwgdG8pO1xuICAvLyAgIHRoaXMuZGF0YSQubmV4dChzbGljZU9mUm93cyk7XG4gIC8vIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIHRlbXBsYXRlcyBmb3IgdXNpbmdcbiAgICogQHBhcmFtIHRlbXBsYXRlc1xuICAgKi9cbiAgcHVibGljIHRyYW5mb3JtVGVtcGxhdGVzVG9Db2x1bW5zKHRlbXBsYXRlcykge1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWdzID0ge1xuICAgICAgaGVhZGVyOiB0aGlzLl9oZWFkZXJDb25maWcsXG4gICAgICBncm91cENlbGw6IHRoaXMuX2dyb3VwQ2VsbENvbmZpZyxcbiAgICAgIGNlbGw6IHRoaXMuX2NlbGxDb25maWcsXG4gICAgICBmb290ZXI6IHRoaXMuX2Zvb3RlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5jb2x1bW5zLnNldERlZmF1bHRzKGRlZmF1bHRDb25maWdzKTtcbiAgICB0aGlzLmNvbHVtbnMuaW5pdGlhbGl6ZUNvbHVtbnModGVtcGxhdGVzKTtcblxuICAgIC8vIFNldCBzb3J0QnkgZGVmYXVsdCBjb2x1bW5cbiAgICB0aGlzLnNvcnRpbmcuY2xlYXJTb3J0YWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLmNvbHVtbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uc29ydGFibGUgJiYgY29sdW1uLnNob3cpXG4gICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIHRoaXMuc29ydGluZy5hZGRTb3J0YWJsZUNvbHVtbihjb2x1bW4pO1xuICAgICAgfSk7XG5cbiAgICAvLyBEZWZhdWx0IHNvcnQgYnlcbiAgICBjb25zdCBleHRlcm5hbFNvcnRpbmcgPSB0aGlzLmV4dGVybmFsUGFyYW1zLmV4dGVybmFsU29ydGluZztcbiAgICBjb25zdCBpbml0aWFsU29ydENvbmZpZyA9IGV4dGVybmFsU29ydGluZyB8fCB0aGlzLmNvbmZpZy5zb3J0O1xuICAgIHRoaXMuc29ydGluZy5pbml0aWFsU29ydEJ5KGluaXRpYWxTb3J0Q29uZmlnKTtcblxuICAgIGlmIChleHRlcm5hbFNvcnRpbmcgJiYgIXRoaXMuc29ydGluZy5pc0RlZmluZWQpIHtcbiAgICAgIHRoaXMuZXh0ZXJuYWxQYXJhbXMuY2xlYXJTb3J0aW5nUGFyYW1zKCk7XG5cbiAgICAgIGNvbnNvbGUud2FybignTm90IGFibGUgdG8gcmVzdG9yZSBwZXJzaXN0ZWQgc29ydGluZyBwYXJhbXMuJywgZXh0ZXJuYWxTb3J0aW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLmluaXRGaWx0ZXJzKCk7XG4gICAgdGhpcy5pbml0SW5maW5pdHlTY3JvbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuUmVsb2FkKTtcblxuICAgIGlmICh0aGlzLmZzU2Nyb2xsSW5zdGFuY2UpIHtcbiAgICAgIHRoaXMucGFnaW5nLnJlc2V0UGFnaW5nKCk7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmNsZWFyUm93cygpO1xuICAgICAgdGhpcy5mc1Njcm9sbEluc3RhbmNlLnJlbG9hZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZldGNoJC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIHBhZ2UgY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZSgpIHtcbiAgICB0aGlzLnBhZ2luZy5wYWdlQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQYWdlQ2hhbmdlKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlBhZ2VDaGFuZ2UpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgcm93cyBpZiBsaW1pdHMgd2FzIGNoYW5nZWRcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFBhZ2VDaGFuZ2VUeXBlLkxpbWl0Q2hhbmdlZCAmJiB0aGlzLnBhZ2luZy5oYXNQYWdlU3RyYXRlZ3kpIHtcbiAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmNsZWFyUm93cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGFnaW5nLmhhc09mZnNldFN0cmF0ZWd5KSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmcudXBkYXRlUGFnaW5hdGlvbigpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLmdldFZpc2libGVSZWNvcmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcucmVjb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wYWdlQ2hhbmdlZCh0aGlzLnNjcm9sbGFibGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zY3JvbGxhYmxlICYmICF0aGlzLnBhZ2luZy5sb2FkTW9yZUVuYWJsZWQpIHtcblxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5zID0gW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY2RrLW92ZXJsYXktY29udGFpbmVyJykpLnNvbWUob3ZlcmxheSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKG92ZXJsYXkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgbGV0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgaWYgKCFjb250YWlucykge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGlmICgocmVjdC50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQpIDwgd2luZG93LmlubmVySGVpZ2h0KSB7XG4gICAgICAgICAgICAgIGVsID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmZldGNoQ29tcGxldGUkLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JClcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmV0Y2gkLm5leHQoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zb3J0aW5nLnNvcnRpbmdDaGFuZ2VkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlNvcnQpO1xuICAgICAgICB0aGlzLnBhZ2luZy5wYWdlID0gMTtcblxuICAgICAgICBpZiAodGhpcy5mc1Njcm9sbEluc3RhbmNlKSB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5jbGVhclJvd3MoKTtcbiAgICAgICAgICB0aGlzLmZzU2Nyb2xsSW5zdGFuY2UucmVsb2FkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mZXRjaCQubmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMubGlzdGVuUm93c1JlbW92ZSgpO1xuICAgIHRoaXMubGlzdGVuRmV0Y2goKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhKHRyYWNrQnk/OiBGc0xpc3RUcmFja0J5Rm4pIHtcbiAgICBsZXQgcm93c0RhdGEgPSB0aGlzLmRhdGFDb250cm9sbGVyXG4gICAgICAudmlzaWJsZVJvd3NEYXRhO1xuXG4gICAgaWYgKHRyYWNrQnkpIHtcbiAgICAgIHJvd3NEYXRhID0gcm93c0RhdGFcbiAgICAgICAgLmZpbHRlcih0cmFja0J5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c0RhdGFcbiAgICAgIC5tYXAoKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcChkYXRhKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhc0RhdGEodHJhY2tCeTogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhLnNvbWUodHJhY2tCeSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGdyb3VwIG1vZGUgc3RhdHVzXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdyb3VwRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLmdyb3VwRW5hYmxlZCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuZ3JvdXBFbmFibGVkID0gdmFsdWU7XG5cbiAgICAgIC8vIENvbW1lbnRlZCBvdXQgYmVjYXVzZSBSYXkgd2FudHMgdG8gY2hhbmdlIGdyb3VwIHN0YXR1cyBpbiBmZXRjaCBtYXAgcGlwZVxuICAgICAgLy8gYW5kIGl0IHRyaWdnZXJzIGV4dHJhIHJlcXVlc3RzXG4gICAgICAvLyB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl9mc1Njcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fZnNTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmcpIHtcbiAgICAgIHRoaXMucGFnaW5nLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0aW5nKSB7XG4gICAgICB0aGlzLnNvcnRpbmcuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckNvbmZpZykge1xuICAgICAgdGhpcy5maWx0ZXJDb25maWcgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV4dGVybmFsUGFyYW1zKSB7XG4gICAgICB0aGlzLmV4dGVybmFsUGFyYW1zLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuY29sdW1ucy5kZXN0cm95KCk7XG5cbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogRG8gaW5pdGlhbGl6YXRpb24gb2YgdGFibGVcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplKGNvbmZpZzogRnNMaXN0Q29uZmlnKSB7XG4gICAgdGhpcy5jb2x1bW5zLmluaXRDb25maWcoY29uZmlnLmNvbHVtbik7XG4gICAgdGhpcy5pbml0RGVmYXVsdE9wdGlvbnMoY29uZmlnKTtcbiAgICB0aGlzLmluaXRSZXN0b3JlKCk7XG4gICAgdGhpcy5pbml0QWN0aW9ucyhjb25maWcuYWN0aW9ucyk7XG4gICAgdGhpcy5pbml0UGFnaW5nKGNvbmZpZy5wYWdpbmcsIGNvbmZpZy5sb2FkTW9yZSk7XG4gICAgdGhpcy5pbml0U2VsZWN0aW9uKGNvbmZpZy5zZWxlY3Rpb24sIHRoaXMuc2VsZWN0aW9uRGlhbG9nKTtcbiAgICB0aGlzLmluaXRHcm91cHMoY29uZmlnLmdyb3VwKTtcbiAgICB0aGlzLmluaXRFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKdXN0IGluaXQgb3B0aW9ucyBieSBkZWZhdWx0IGl0IGl0IHdhc24ndCBzcGVjaWZpZWRcbiAgICogQHBhcmFtIGNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0RGVmYXVsdE9wdGlvbnMoY29uZmlnKSB7XG4gICAgLy8gV2Ugc2hvdWxkIHByZXZlbnQgaW5pdGlhbCBmZXRjaCBpbiBjYXNlcyB3aGVuIGl0IHdpbGwgYmUgZmV0Y2hlZCBpbiBhbnkgY2FzZVxuICAgIC8vIEFzIGV4LiBzY3JvbGxhYmxlIG9yIGZpbHRlciB3aWxsIGRvIGZldGNoIGluIGFueSBjYXNlc1xuICAgIGlmIChjb25maWcuaW5pdGlhbEZldGNoID09PSBmYWxzZSB8fCBjb25maWcuc2Nyb2xsYWJsZSkgeyAvLyBUT0RPIGZpeG1lIGFmdGVyIHRzbW9kZWwgdmVyc2lvbiB1cGRhdGVcbiAgICAgIHRoaXMuaW5pdGlhbEZldGNoID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdHVzID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdGF0dXMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaGlwcykge1xuICAgICAgdGhpcy5jaGlwcyA9IGNvbmZpZy5jaGlwcztcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5maWx0ZXJJbnB1dCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZmlsdGVySW5wdXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbkRpYWxvZykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbSA9IChjb25maWcucXVlcnlQYXJhbSA9PT0gdm9pZCAwKVxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBjb25maWcucXVlcnlQYXJhbTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnNvcnRzKSB7XG4gICAgICB0aGlzLnNvcnRpbmcuaW5pdEZha2VDb2x1bW5zKGNvbmZpZy5zb3J0cyk7XG4gICAgfVxuICAgIGlmICghY29uZmlnLnRyYWNrQnkpIHtcbiAgICAgIHRoaXMudHJhY2tCeSA9ICdpZCc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgcmVzdG9yZSByb3cgYWN0aW9uIGFuZCBhcHBlbmQgU2hvdyBEZWxldGVkIG9wdGlvbiBpbnRvIGZpbHRlcnNcbiAgICovXG4gIHByaXZhdGUgaW5pdFJlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMucmVzdG9yZSkge1xuICAgICAgY29uc3QgcmVzdG9yZUFjdGlvbiA9IG5ldyBSb3dBY3Rpb24oe1xuICAgICAgICBsYWJlbDogdGhpcy5yZXN0b3JlLm1lbnVMYWJlbCB8fCAnUmVzdG9yZScsXG4gICAgICAgIG1lbnU6IHRydWUsXG4gICAgICAgIGNsaWNrOiAocm93KSA9PiB7IHRoaXMucmVzdG9yZUNsaWNrKHRoaXMucmVzdG9yZS5jbGljaywgcm93KSB9LCAvLyBUT0RPIGZpeCBtZSwgbW92ZSB0byBzcGVjaWFsIGZpbGVcbiAgICAgICAgcmVzdG9yZTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5yb3dBY3Rpb25zUmF3KSB7XG4gICAgICAgIHRoaXMucm93QWN0aW9uc1JhdyA9IFtdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd0FjdGlvbnNSYXcucHVzaChyZXN0b3JlQWN0aW9uKTtcblxuICAgICAgaWYgKCF0aGlzLmZpbHRlcnMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnJlc3RvcmUuZmlsdGVyICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgbmFtZTogU0hPV19ERUxFVEVEX0ZJTFRFUlNfS0VZLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkNoZWNrYm94LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLnJlc3RvcmUuZmlsdGVyTGFiZWwgfHwgJ1Nob3cgRGVsZXRlZCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogSW5pdCBwYWdpbmdcbiAgICogQHBhcmFtIHBhZ2luZ0NvbmZpZ1xuICAgKiBAcGFyYW0gbG9hZE1vcmVcbiAgICovXG4gIHByaXZhdGUgaW5pdFBhZ2luZyhwYWdpbmdDb25maWc6IEZzUGFnaW5nIHwgZmFsc2UsIGxvYWRNb3JlOiBGc0xpc3RMb2FkTW9yZUNvbmZpZyB8IGJvb2xlYW4pIHtcbiAgICB0aGlzLnBhZ2luZy5pbml0V2l0aENvbmZpZyhwYWdpbmdDb25maWcsIGxvYWRNb3JlLCAhIXRoaXMuc2Nyb2xsYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXQgYWN0aW9ucyBieSBjYXRlZ29yaWVzXG4gICAqL1xuICBwcml2YXRlIGluaXRBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgdGhpcy5hY3Rpb25zLnNldEFjdGlvbnMoYWN0aW9ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5oYXNSb3dBY3Rpb25zID1cbiAgICAgICh0aGlzLnJvd0FjdGlvbnNSYXcgJiYgdGhpcy5yb3dBY3Rpb25zUmF3Lmxlbmd0aCA+IDApXG4gICAgICB8fCAodGhpcy5ncm91cEFjdGlvbnNSYXcgJiYgdGhpcy5ncm91cEFjdGlvbnNSYXcubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRTZWxlY3Rpb24oXG4gICAgc2VsZWN0aW9uQ29uZmlnOiBGc0xpc3RTZWxlY3Rpb25Db25maWcsXG4gICAgc2VsZWN0aW9uRGlhbG9nOiBTZWxlY3Rpb25EaWFsb2csXG4gICkge1xuICAgIGlmIChzZWxlY3Rpb25Db25maWcpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbkNvbnRyb2xsZXIoc2VsZWN0aW9uQ29uZmlnLCB0aGlzLnRyYWNrQnksIHNlbGVjdGlvbkRpYWxvZyk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSb3dzQ2FsbGJhY2soKCkgPT4gdGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0YSgpIHtcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldEFkZGl0aW9uYWxDb25maWdzKHtcbiAgICAgIHNjcm9sbGFibGU6ICEhdGhpcy5zY3JvbGxhYmxlLFxuICAgICAgbG9hZE1vcmVFbmFibGVkOiB0aGlzLnBhZ2luZy5sb2FkTW9yZUVuYWJsZWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEdyb3Vwcyhncm91cENvbmZpZzogRnNMaXN0R3JvdXBDb25maWcpIHtcbiAgICBpZiAoZ3JvdXBDb25maWcpIHtcbiAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0R3JvdXBDb25maWcoZ3JvdXBDb25maWcpO1xuICAgICAgdGhpcy5ncm91cEFjdGlvbnNSYXcgPSBncm91cENvbmZpZy5hY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcigpIHtcbiAgICB0aGlzLmV4dGVybmFsUGFyYW1zID0gbmV3IEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcihcbiAgICAgIHRoaXMucm91dGVyLFxuICAgICAgdGhpcy5yb3V0ZSxcbiAgICAgIHRoaXMucGVyc2lzdGFuY2UsXG4gICAgICB0aGlzLnBhZ2luZyxcbiAgICAgIHRoaXMuc29ydGluZyxcbiAgICAgIHRoaXMucXVlcnlQYXJhbVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGZldGNoJCBldmVudCB3aXRoIGRlYm91bmNlXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkZldGNoKCkge1xuICAgIGxldCBmZXRjaCQgPSB0aGlzLmZldGNoJC5hc09ic2VydmFibGUoKTtcblxuICAgIC8vIFNob3VsZCB3YWl0IHVudGlsIHNhdmVkIGZpbHRlcnMgbm90IGxvYWRlZFxuICAgIGlmICghIXRoaXMuZmlsdGVycykge1xuICAgICAgZmV0Y2gkID0gY29tYmluZUxhdGVzdChbZmV0Y2gkLCB0aGlzLmZpbHRlcnNSZWFkeSRdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKFtwYXJhbXNdKSA9PiBwYXJhbXMpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZldGNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY2xvc2VTZWxlY3Rpb25EaWFsb2coKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgocGFyYW1zOiBGc0xpc3RGZXRjaFN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5wYWdpbmcuaGFzT2Zmc2V0U3RyYXRlZ3kgJiYgcGFyYW1zICYmIHBhcmFtcy5sb2FkT2Zmc2V0XG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZmlsdGVyc1F1ZXJ5LCB0aGlzLnBhZ2luZy5sb2FkRGVsZXRlZE9mZnNldFF1ZXJ5KVxuICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZpbHRlcnNRdWVyeSwgdGhpcy5wYWdpbmcucXVlcnkpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yZGVyOiBgJHt0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5uYW1lfSwke3RoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLmRpcmVjdGlvbn1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHF1ZXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5sb2FkRm5Db25maWd1cmVkICYmICF0aGlzLmNvbHVtbnMuY29sdW1uc0ZldGNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubG9hZFJlbW90ZUNvbHVtbkNvbmZpZ3MoKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXBUbyhxdWVyeSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHF1ZXJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKHF1ZXJ5KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5jb25maWd1cmVkKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucy52aXNpYmxlQ29sdW1uc05hbWVzLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKHF1ZXJ5KSwgdGhpcy5mZXRjaFJlbW90ZShxdWVyeSldKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yLCBzb3VyY2UkKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gc291cmNlJDtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5jb21wbGV0ZUZldGNoKHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Sb3dzUmVtb3ZlKCkge1xuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIucm93c1JlbW92ZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyb3dzOiBhbnlbXSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wYWdpbmcuZW5hYmxlZCkge1xuXG4gICAgICAgICAgY29uc3QgcmVtb3ZlZENvdW50ID0gcm93cy5sZW5ndGg7XG5cbiAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuaGFzUGFnZVN0cmF0ZWd5KSB7XG4gICAgICAgICAgICB0aGlzLm5vRGF0YVBhZ2luYXRpb25VcGRhdGUocmVtb3ZlZENvdW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmV0Y2ggbW9yZSBpZiBoYXMgc29tZXRoaW5nIGZvciBmZXRjaFxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUNvbnRyb2xsZXIuaGFzRGF0YSB8fCB0aGlzLnBhZ2luZy5oYXNOZXh0UGFnZSkge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Mb2FkTW9yZSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcucmVtb3ZlUm93cyhyZW1vdmVkQ291bnQpO1xuICAgICAgICAgICAgICB0aGlzLmZldGNoJC5uZXh0KHsgbG9hZE9mZnNldDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMubm9EYXRhUGFnaW5hdGlvblVwZGF0ZShyZW1vdmVkQ291bnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBmcm9tIHNlbGVjdGlvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmVtb3ZlUm93KHJvdy5kYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRJbmZpbml0eVNjcm9sbCgpIHtcbiAgICBpZiAodGhpcy5mc1Njcm9sbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgLy8gU2Nyb2xsYWJsZSBzdGF0dXMgYnkgZGVmYXVsdFxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZS5zdGF0dXMgPT09IHZvaWQgMCkge1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUuc3RhdHVzID0gdHJ1ZTtcbiAgICAgIH1cblxuXG4gICAgICB0aGlzLmZzU2Nyb2xsXG4gICAgICAgIC5jb21wb25lbnQodGhpcy5zY3JvbGxhYmxlLm5hbWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZnNTY3JvbGxJbnN0YW5jZTogRnNTY3JvbGxJbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZnNTY3JvbGxJbnN0YW5jZSA9IGZzU2Nyb2xsSW5zdGFuY2U7XG4gICAgICAgICAgdGhpcy5fZnNTY3JvbGxTdWJzY3JpcHRpb24gPSBmc1Njcm9sbEluc3RhbmNlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHN0YXJ0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLmRhdGFDb250cm9sbGVyLm9wZXJhdGlvbjtcblxuICAgICAgICAgICAgICAvLyBJbml0aWFsIGxvYWRpbmcgaWYgaW5pdGlhbEZldGNoIGVxdWFscyBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbEZldGNoXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMucGFnaW5nLmluaXRpYWxpemVkXG4gICAgICAgICAgICAgICAgJiYgb3BlcmF0aW9uICE9PSBGc0xpc3RTdGF0ZS5SZWxvYWRcbiAgICAgICAgICAgICAgKSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Mb2FkKTtcbiAgICAgICAgICAgICAgICBzdGFydExvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5SZWxvYWQgfHxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLkZpbHRlciB8fFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9PT0gRnNMaXN0U3RhdGUuU29ydFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzdGFydExvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5nLmluaXRpYWxpemVkICYmIHRoaXMucGFnaW5nLmhhc05leHRQYWdlKSB7XG4gICAgICAgICAgICAgICAgLy8gTG9hZGluZyBpZiBjb250ZW50IGhhcyBiZWVuIHNjcm9sbGVkXG4gICAgICAgICAgICAgICAgc3RhcnRMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Mb2FkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5nb05leHQoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFydExvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgZnNTY3JvbGxJbnN0YW5jZS5sb2FkaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIucmVtb3RlUm93c0NoYW5nZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBmc1Njcm9sbEluc3RhbmNlLmxvYWRlZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFuZCB3YXRjaCBmaWx0ZXIgY2hhbmdlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0RmlsdGVycygpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNZXJnZSBzb3J0aW5nIGFuZCBmYWtlIHNvcnRpbmcgY29sc1xuICAgIC8vIEZha2Ugc29ydGluZyBjb2xzIGl0J3MgY29scyB3aGljaCBkb24ndCByZXByZXNlbnRlZCBpbiB0YWJsZSBjb2xzLCBsaWtlIGFic3RyYWN0IGNvbHNcbiAgICBjb25zdCBzb3J0VmFsdWVzID1cbiAgICAgIFtcbiAgICAgICAgLi4udGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW5zLFxuICAgICAgICAuLi50aGlzLnNvcnRpbmcuZmFrZVNvcnRpbmdDb2x1bW5zXG4gICAgICBdLnJlZHVjZSgoYWNjLCBjb2x1bW4pID0+IHtcblxuICAgICAgICBjb25zdCBzb3J0aW5nSXRlbSA9IHtcbiAgICAgICAgICBuYW1lOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgdmFsdWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uICYmIHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgYWNjLnB1c2goc29ydGluZ0l0ZW0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pO1xuXG4gICAgY29uc3Qgc29ydENvbmZpZyA9IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uXG4gICAgICA/IHsgdmFsdWU6IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLm5hbWUsIGRpcmVjdGlvbjogdGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4uZGlyZWN0aW9ufVxuICAgICAgOiBudWxsO1xuXG4gICAgLy8gQ29uZmlnXG4gICAgdGhpcy5maWx0ZXJDb25maWcgPSB7XG4gICAgICBwZXJzaXN0OiB0aGlzLnBlcnNpc3QsXG4gICAgICBpdGVtczogdGhpcy5maWx0ZXJzIHx8IFtdLFxuICAgICAgc2F2ZWRGaWx0ZXJzOiB0aGlzLnNhdmVkRmlsdGVycyxcbiAgICAgIGlubGluZTogdGhpcy5pbmxpbmVGaWx0ZXJzLFxuICAgICAgYWN0aW9uczogdGhpcy5hY3Rpb25zLmFjdGlvbnMsXG4gICAgICBxdWVyeVBhcmFtOiB0aGlzLnF1ZXJ5UGFyYW0sXG4gICAgICBzb3J0czogc29ydFZhbHVlcyxcbiAgICAgIHNvcnQ6IHNvcnRDb25maWcsXG4gICAgICBjaGlwczogdGhpcy5jaGlwcyxcbiAgICAgIGluaXQ6IHRoaXMuZmlsdGVySW5pdC5iaW5kKHRoaXMpLFxuICAgICAgY2hhbmdlOiB0aGlzLmZpbHRlckNoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgcmVsb2FkOiB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpLFxuICAgICAgc29ydENoYW5nZTogdGhpcy5maWx0ZXJTb3J0LmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIEZpbHRlciBoYXMgYmVlbiBpbml0aWFsaXplZFxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJJbml0KGZpbHRlcnMpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJJbml0Q2IpIHtcbiAgICAgIHRoaXMuZmlsdGVySW5pdENiKGZpbHRlcnMpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlcnNRdWVyeS5uZXh0KGZpbHRlcnMpO1xuXG4gICAgdGhpcy5jaGVja1Jlc3RvcmVGaWx0ZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIEZpbHRlciBoYXMgYmVlbiBjaGFuZ2VkXG4gICAqIEBwYXJhbSBmaWx0ZXJRdWVyeVxuICAgKiBAcGFyYW0gZmlsdGVyU29ydFxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJDaGFuZ2UoZmlsdGVyUXVlcnksIGZpbHRlclNvcnQpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJDaGFuZ2VDYikge1xuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VDYihmaWx0ZXJRdWVyeSwgZmlsdGVyU29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsdGVyc1F1ZXJ5Lm5leHQoZmlsdGVyUXVlcnkpO1xuXG4gICAgdGhpcy5yZXN0b3JlTW9kZSA9IGZhbHNlO1xuXG4gICAgLy8gUmVzdG9yZSBvcHRpb25cbiAgICB0aGlzLmNoZWNrUmVzdG9yZUZpbHRlcigpO1xuXG4gICAgaWYgKHRoaXMucmVzdG9yZSAmJiB0aGlzLnJlc3RvcmUucmVsb2FkKSB7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLkZpbHRlcik7XG5cbiAgICAvLyBSZXNldCBwYWdpbmcgZm9yIHJlcXVlc3Qgd2l0aCBjb3JyZWN0IG9mZnNldFxuICAgIHRoaXMucGFnaW5nLnJlc2V0UGFnaW5nKCk7XG5cbiAgICBpZiAodGhpcy5mc1Njcm9sbEluc3RhbmNlKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmNsZWFyUm93cygpO1xuICAgICAgdGhpcy5mc1Njcm9sbEluc3RhbmNlLnJlbG9hZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZldGNoJC5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1Jlc3RvcmVGaWx0ZXIoKSB7XG4gICAgLy8gUmVzdG9yZSBvcHRpb25cbiAgICBpZiAodGhpcy5yZXN0b3JlICYmIHRoaXMuZmlsdGVyc1F1ZXJ5W1NIT1dfREVMRVRFRF9GSUxURVJTX0tFWV0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNRdWVyeVtTSE9XX0RFTEVURURfRklMVEVSU19LRVldO1xuXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZmlsdGVyc1F1ZXJ5LCB0aGlzLnJlc3RvcmUucXVlcnkpO1xuXG4gICAgICB0aGlzLnJlc3RvcmVNb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayB3aGVuIEZpbHRlciBzb3J0IGhhcyBiZWVuIGNoYW5nZWRcbiAgcHJpdmF0ZSBmaWx0ZXJTb3J0KGZpbHRlclF1ZXJ5LCBmaWx0ZXJTb3J0KSB7XG4gICAgaWYgKGZpbHRlclNvcnQpIHtcbiAgICAgIHRoaXMuc29ydGluZy5zb3J0QnlDb2x1bW5XaXRoTmFtZShmaWx0ZXJTb3J0LnZhbHVlKTtcblxuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbiA9IGZpbHRlclNvcnQuZGlyZWN0aW9uID09PSAnYXNjJyA/IFNvcnRpbmdEaXJlY3Rpb24uYXNjIDogU29ydGluZ0RpcmVjdGlvbi5kZXNjO1xuICAgICAgdGhpcy5zb3J0aW5nLnNvcnREaXJlY3Rpb24oc29ydERpcmVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZJWE1FIG5lZWQgdG8gYmUgcmVmYWN0b3JlZC4uLlxuICAgICAgdGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4gPSB2b2lkIDA7XG4gICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGxldGVGZXRjaChbcXVlcnksIHJlc3BvbnNlXSkge1xuXG4gICAgaWYgKCF0aGlzLnBhZ2luZy5wYWdlKSB7XG4gICAgICB0aGlzLnBhZ2luZy5wYWdlID0gMTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UucGFnaW5nKSB7XG4gICAgICBjb25zdCBkaXNwbGF5ZWQgPSAoQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCkgfHwgMDtcbiAgICAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luZyhcbiAgICAgICAgcmVzcG9uc2UucGFnaW5nLFxuICAgICAgICBkaXNwbGF5ZWQsXG4gICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIub3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5Mb2FkTW9yZVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5nLmVuYWJsZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnJWMgRnNMaXN0IFdhcm5pbmcgJyxcbiAgICAgICAgJ2NvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2MwYicsXG4gICAgICAgICdQYWdpbmF0aW9uIGRvZXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuICcgK1xuICAgICAgICAnUGFnaW5hdGlvbiBpcyBlbmFibGVkLCBidXQgaHR0cCByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIFwicGFnaW5nXCIgZmllbGQuICcgK1xuICAgICAgICAnWW91IGhhdmUgdG8gc2V0IFwicGFnaW5nOiBmYWxzZVwiIGluIGNvbmZpZyBvciBhZGQgXCJwYWdpbmdcIiBmaWVsZCB0byByZXNwb25zZS4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vLyBtdXN0IGJlIGJlZm9yZSBzZWxlY3Rpb24sIGJlY2F1c2Ugc2VsZXRpb24gdXNlIHJlY29yZHNcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldFJvd3NGcm9tUmVzcG9uc2UocmVzcG9uc2UuZGF0YSk7XG4gICAgLy8vXG5cbiAgICAvLyBVcGRhdGUgc2VsZWN0aW9uIHBhcmFtc1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZW5hYmxlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wYWdlQ2hhbmdlZCh0aGlzLnNjcm9sbGFibGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLmdldFZpc2libGVSZWNvcmRzKCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVUb3RhbFJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5yZWNvcmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzcG9uc2UucGFnaW5nICYmIHJlc3BvbnNlLnBhZ2luZy5yZWNvcmRzXG4gICAgICAgICAgfHwgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aDtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KGNvdW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQoY291bnQpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJvd3NJbnRlcnNlY3Rpb24odGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVtcHR5U3RhdGU/LnZhbGlkYXRlICYmIHRoaXMuZW1wdHlTdGF0ZVRlbXBsYXRlKSB7XG4gICAgICB0aGlzLmVtcHR5U3RhdGVFbmFibGVkID0gdGhpcy5lbXB0eVN0YXRlLnZhbGlkYXRlKHF1ZXJ5LCBjbG9uZURlZXAodGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hZnRlckZldGNoRm4pIHtcbiAgICAgIHRoaXMuYWZ0ZXJGZXRjaEZuKHF1ZXJ5LCB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzRGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5mZXRjaENvbXBsZXRlJC5uZXh0KCk7XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaWxsIGRvIHNvbWUgYWN0aW9ucyBpZiB5b3UgcmVtb3ZlZCBpdGVtIGFuZCBpdGVtIHdhcyBsYXN0IG9uIGhpcyBvd24gcGFnZVxuICAgKlxuICAgKiBFeDogaWYgbGlzdCBoYXMgMyBwYWdlcyBhbmQgb24gdGhpcmQgcGFnZSB5b3UgaGF2ZSBvbmx5IG9uZSBpdGVtLiBBbmQgeW91IGp1c3QgZGVsZXRlZCB0aGlzIGl0ZW0uXG4gICAqIFlvdSBtdXN0IGdvIHRvIHNlY29uZCBwYWdlLCBidXQgaWYgaXQgd2FzIGxhc3QgcGFnZSBhbmQgeW91IGNhbid0IGdvIGJhY2sgLT4ganVzdCByZWxvYWRcbiAgICpcbiAgICogQHBhcmFtIGRlbGV0ZWRDb3VudFxuICAgKi9cbiAgcHJpdmF0ZSBub0RhdGFQYWdpbmF0aW9uVXBkYXRlKGRlbGV0ZWRDb3VudCkge1xuICAgIGlmICghdGhpcy5kYXRhQ29udHJvbGxlci5oYXNEYXRhKSB7XG4gICAgICBpZiAodGhpcy5wYWdpbmcucGFnZSA+IDEpIHtcbiAgICAgICAgdGhpcy5wYWdpbmcuZ29Ub1BhZ2UodGhpcy5wYWdpbmcucGFnZSAtIDEgfHwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGFnaW5nLnJlY29yZHMgLT0gZGVsZXRlZENvdW50O1xuICAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLmhhc0RhdGEgJiYgdGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVZpc2libGVSZWNvcmRzQ291bnQodGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0NvdW50KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVRvdGFsUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLnJlY29yZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3Jhcnkgc29sdXRpb24sIHdpbGwgZG8gYXV0byBzdWJzY3JpYmUgaWYgd2FzIHJldHVybmVkIE9ic2VydmFibGUuXG4gICAqXG4gICAqIFRPRE86IE1PVkUgVEhJUyBQRUFDRSBPRiBDT0RFIFRPIFNQRUNJQUwgUExBQ0VcbiAgICpcbiAgICogQHBhcmFtIHJlc3RvcmVDbGlja0NhbGxiYWNrXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHByaXZhdGUgcmVzdG9yZUNsaWNrKHJlc3RvcmVDbGlja0NhbGxiYWNrLCByb3cpIHtcbiAgICBjb25zdCByZXN0b3JlQ2xpY2tSZXN1bHQgPSByZXN0b3JlQ2xpY2tDYWxsYmFjayhyb3cpO1xuXG4gICAgaWYgKHJlc3RvcmVDbGlja1Jlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJlc3RvcmVDbGlja1Jlc3VsdFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMucmVsb2FkKCksXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHt9LFxuICAgICAgICB9KVxuICAgIH1cbiAgfVxufVxuIl19
|
|
781
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpcmVzdGl0Y2gvbGlzdC8iLCJzb3VyY2VzIjpbImFwcC9jbGFzc2VzL2xpc3QtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFxRCxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUlqRyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV4QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixJQUFJLEVBQ0osVUFBVSxFQUNWLEVBQUUsRUFDRixPQUFPLEVBRVIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFlBQVksRUFDWixHQUFHLEVBQ0gsS0FBSyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFrQjFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlC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O0lBQzVCO1FBQXRCLEtBQUssQ0FBQyxjQUFjLENBQUM7O2dEQUFpQztJQUM5QztRQUFSLEtBQUssRUFBRTs7OENBQWdEO0lBQy9DO1FBQVIsS0FBSyxFQUFFOzs0Q0FBMkQ7SUFDMUQ7UUFBUixLQUFLLEVBQUU7OzJDQUF5QztJQUN4QztRQUFSLEtBQUssRUFBRTs7NENBQTJDO0lBRW5DO1FBQWYsS0FBSyxDQUFDLE9BQU8sQ0FBQzs7eUNBQStCO0lBQ3pCO1FBQXBCLEtBQUssQ0FBQyxZQUFZLENBQUM7OzhDQUF5QztJQW0xQi9ELFdBQUM7Q0FBQSxBQXoyQkQsQ0FBMEIsS0FBSyxHQXkyQjlCO1NBejJCWSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2hhbmdlRm4sIEZpbHRlckNvbmZpZywgSUZpbHRlclNhdmVkRmlsdGVyc0NvbmZpZywgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNTY3JvbGxJbnN0YW5jZSwgRnNTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2Nyb2xsJztcbmltcG9ydCB7IFNlbGVjdGlvbkRpYWxvZyB9IGZyb20gJ0BmaXJlc3RpdGNoL3NlbGVjdGlvbic7XG5cbmltcG9ydCB7IEFsaWFzLCBNb2RlbCB9IGZyb20gJ3RzbW9kZWxzJztcblxuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmcm9tLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVib3VuY2VUaW1lLFxuICBtYXAsXG4gIG1hcFRvLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi5tb2RlbCc7XG5cbi8vIEludGVyZmFjZXNcbmltcG9ydCB7XG4gIEZzTGlzdEFmdGVyRmV0Y2hGbixcbiAgRnNMaXN0Q29uZmlnLFxuICBGc0xpc3RFbXB0eVN0YXRlQ29uZmlnLCBGc0xpc3RGZXRjaEZuLCBGc0xpc3RGZXRjaE9wdGlvbnMsXG4gIEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uLFxuICBGc0xpc3RHcm91cENvbmZpZyxcbiAgRnNMaXN0TG9hZE1vcmVDb25maWcsXG4gIEZzTGlzdE5vUmVzdWx0c0NvbmZpZyxcbiAgRnNMaXN0UmVzdG9yZUNvbmZpZyxcbiAgRnNMaXN0U2Nyb2xsYWJsZUNvbmZpZyxcbiAgRnNMaXN0U2VsZWN0aW9uQ29uZmlnLFxuICBGc0xpc3RUcmFja0J5Rm4sXG4gIEZzUGFnaW5nLFxuICBQYWdlQ2hhbmdlXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3R5bGVDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvc3R5bGVDb25maWcubW9kZWwnO1xuaW1wb3J0IHsgUm93QWN0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL3Jvdy1hY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29sdW1uc0NvbnRyb2xsZXIgfSBmcm9tICcuL2NvbHVtbnMtY29udHJvbGxlcic7XG5pbXBvcnQgeyBQYWdlQ2hhbmdlVHlwZSB9IGZyb20gJy4uL2VudW1zL3BhZ2UtY2hhbmdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBY3Rpb25zQ29udHJvbGxlciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgRGF0YUNvbnRyb2xsZXIgfSBmcm9tICcuL2RhdGEtY29udHJvbGxlcic7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vcGFnaW5hdGlvbi1jb250cm9sbGVyJztcbmltcG9ydCB7IFNlbGVjdGlvbkNvbnRyb2xsZXIgfSBmcm9tICcuL3NlbGVjdGlvbi1jb250cm9sbGVyJztcbmltcG9ydCB7IFNvcnRpbmdDb250cm9sbGVyIH0gZnJvbSAnLi9zb3J0aW5nLWNvbnRyb2xsZXInO1xuXG5pbXBvcnQgeyBGc0xpc3RTdGF0ZSB9IGZyb20gJy4uL2VudW1zL3N0YXRlLmVudW0nO1xuaW1wb3J0IHsgUGVyc2lzdGFuY2VDb250cm9sbGVyIH0gZnJvbSAnLi9wZXJzaXN0YW5jZS1jb250cm9sbGVyJztcbmltcG9ydCB7IEV4dGVybmFsUGFyYW1zQ29udHJvbGxlciB9IGZyb20gJy4vZXh0ZXJuYWwtcGFyYW1zLWNvbnRyb2xsZXInO1xuXG5jb25zdCBTSE9XX0RFTEVURURfRklMVEVSU19LRVkgPSAnJCRfc2hvd19kZWxldGVkXyQkJztcblxuXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIE1vZGVsIHtcbiAgQEFsaWFzKCkgcHVibGljIGhlYWRpbmc6IHN0cmluZztcbiAgQEFsaWFzKCkgcHVibGljIHRyYWNrQnk6IHN0cmluZztcbiAgQEFsaWFzKCkgcHVibGljIHN1YmhlYWRpbmc6IHN0cmluZztcbiAgQEFsaWFzKCkgcHVibGljIGlubGluZUZpbHRlcnM6IGFueTtcbiAgLy8gQEFsaWFzKCdhY3Rpb25zJywgQWN0aW9uKSBwdWJsaWMgYWN0aW9uczogQWN0aW9uW107XG4gIEBBbGlhcygncm93QWN0aW9ucycpIHB1YmxpYyByb3dBY3Rpb25zUmF3OiBhbnlbXTtcbiAgcHVibGljIGdyb3VwQWN0aW9uc1JhdzogYW55W107XG4gIEBBbGlhcygncm93Q2xhc3MnKSBwdWJsaWMgcm93Q2xhc3M7XG4gIEBBbGlhcygpIHB1YmxpYyByb3dFdmVudHM6IGFueTtcbiAgQEFsaWFzKCkgcHVibGljIHJlc3RvcmU6IEZzTGlzdFJlc3RvcmVDb25maWc7XG4gIEBBbGlhcygpIHB1YmxpYyBjb2x1bW5UZW1wbGF0ZXM6IGFueTtcbiAgQEFsaWFzKCkgcHVibGljIHBlcnNpc3Q6IGJvb2xlYW47XG4gIEBBbGlhcygpIHB1YmxpYyBmaWx0ZXJzID0gW107XG4gIEBBbGlhcygnZmlsdGVySW5pdCcpIHB1YmxpYyBmaWx0ZXJJbml0Q2I6IENoYW5nZUZuO1xuICBAQWxpYXMoJ2ZpbHRlckNoYW5nZScpIHB1YmxpYyBmaWx0ZXJDaGFuZ2VDYjogQ2hhbmdlRm47XG4gIEBBbGlhcygpIHB1YmxpYyBzYXZlZEZpbHRlcnM6IElGaWx0ZXJTYXZlZEZpbHRlcnNDb25maWc7XG4gIEBBbGlhcygpIHB1YmxpYyBzY3JvbGxhYmxlOiBGc0xpc3RTY3JvbGxhYmxlQ29uZmlnIHwgZmFsc2UgPSBmYWxzZTtcbiAgQEFsaWFzKCkgcHVibGljIG5vUmVzdWx0czogRnNMaXN0Tm9SZXN1bHRzQ29uZmlnO1xuICBAQWxpYXMoKSBwdWJsaWMgZW1wdHlTdGF0ZTogRnNMaXN0RW1wdHlTdGF0ZUNvbmZpZztcbiAgLy8gQEFsaWFzKCkgcHVibGljIGluaXRpYWxGZXRjaCA9IHRydWU7IC8vVE9ETyBmaXhtZVxuICBAQWxpYXMoJ2ZldGNoJykgcHVibGljIGZldGNoRm46IEZzTGlzdEZldGNoRm47XG4gIEBBbGlhcygnYWZ0ZXJGZXRjaCcpIHB1YmxpYyBhZnRlckZldGNoRm46IEZzTGlzdEFmdGVyRmV0Y2hGbjtcbiAgLy8gQEFsaWFzKCdyb3dzJykgcHJpdmF0ZSBfcm93czogYW55O1xuXG4gIHB1YmxpYyBpbml0aWFsaXplZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLy8gcHVibGljIG9wZXJhdGlvbjogT3BlcmF0aW9uO1xuXG4gIHB1YmxpYyBoYXNSb3dBY3Rpb25zO1xuICBwdWJsaWMgcGFnaW5nID0gbmV3IFBhZ2luYXRpb25Db250cm9sbGVyKCk7XG5cbiAgcHVibGljIGNvbHVtbnMgPSBuZXcgQ29sdW1uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGFjdGlvbnMgPSBuZXcgQWN0aW9uc0NvbnRyb2xsZXIoKTtcbiAgcHVibGljIGRhdGFDb250cm9sbGVyID0gbmV3IERhdGFDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBzb3J0aW5nID0gbmV3IFNvcnRpbmdDb250cm9sbGVyKCk7XG4gIHB1YmxpYyBleHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyO1xuICBwdWJsaWMgc2VsZWN0aW9uOiBTZWxlY3Rpb25Db250cm9sbGVyO1xuXG4gIHB1YmxpYyBmaWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZyA9IG51bGw7XG5cbiAgcHVibGljIGZldGNoJCA9IG5ldyBTdWJqZWN0PEZzTGlzdEZldGNoU3Vic2NyaXB0aW9uIHwgdm9pZD4oKTtcbiAgcHVibGljIGZldGNoQ29tcGxldGUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHVibGljIGZpbHRlcnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHB1YmxpYyBzdGF0dXMgPSB0cnVlO1xuICBwdWJsaWMgY2hpcHMgPSBmYWxzZTtcbiAgcHVibGljIGZpbHRlcklucHV0ID0gdHJ1ZTtcbiAgcHVibGljIHF1ZXJ5UGFyYW0gPSBmYWxzZTtcbiAgcHVibGljIHJlc3RvcmVNb2RlID0gZmFsc2U7XG5cbiAgcHVibGljIGluaXRpYWxGZXRjaCA9IHRydWU7XG5cbiAgLy8gRW1wdHkgc3RhdGVcbiAgcHVibGljIGVtcHR5U3RhdGVFbmFibGVkID0gZmFsc2U7XG4gIHB1YmxpYyBlbXB0eVN0YXRlVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgcHVibGljIGZzU2Nyb2xsSW5zdGFuY2U6IEZzU2Nyb2xsSW5zdGFuY2U7XG5cbiAgcHVibGljIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNRdWVyeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVjb3JkPHN0cmluZywgYW55Pj4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlYWRlckNvbmZpZzogU3R5bGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2dyb3VwQ2VsbENvbmZpZzogU3R5bGVDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NlbGxDb25maWc6IFN0eWxlQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IF9mb290ZXJDb25maWc6IFN0eWxlQ29uZmlnO1xuXG4gIHByaXZhdGUgX2ZzU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNvbmZpZzogRnNMaXN0Q29uZmlnID0ge30sXG4gICAgcHJpdmF0ZSBmc1Njcm9sbDogRnNTY3JvbGxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VsZWN0aW9uRGlhbG9nOiBTZWxlY3Rpb25EaWFsb2csXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBlcnNpc3RhbmNlOiBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBpbkRpYWxvZzogYm9vbGVhbixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9mcm9tSlNPTihjb25maWcpO1xuXG4gICAgdGhpcy5pbml0aWFsaXplKGNvbmZpZyk7XG5cbiAgICB0aGlzLl9oZWFkZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoY29uZmlnLmhlYWRlcik7XG4gICAgdGhpcy5fZ3JvdXBDZWxsQ29uZmlnID0gbmV3IFN0eWxlQ29uZmlnKGNvbmZpZy5jZWxsKTtcbiAgICB0aGlzLl9jZWxsQ29uZmlnID0gbmV3IFN0eWxlQ29uZmlnKGNvbmZpZy5jZWxsKTtcbiAgICB0aGlzLl9mb290ZXJDb25maWcgPSBuZXcgU3R5bGVDb25maWcoY29uZmlnLmZvb3Rlcik7XG5cbiAgICB0aGlzLmluaXRpYWxpemVkJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLmluaXRpYWxGZXRjaCkge1xuICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuTG9hZCk7XG4gICAgICB0aGlzLmZldGNoJC5uZXh0KCk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1NhdmVkRmlsdGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpbHRlckNvbmZpZy5zYXZlZEZpbHRlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNRdWVyeSgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyc1F1ZXJ5LmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNRdWVyeSQoKTogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnNRdWVyeS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFJlbW90ZShxdWVyeSkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEZzTGlzdEZldGNoT3B0aW9ucyA9IHtcbiAgICAgIHN0YXRlOiB0aGlzLmRhdGFDb250cm9sbGVyLm9wZXJhdGlvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB0aGlzLmZldGNoRm4ocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBmcm9tKHJlc3VsdCkgOiByZXN1bHQ7XG4gIH1cblxuICAvLyBwdWJsaWMgbG9hZExvY2FsKCkge1xuICAvLyAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luZ01hbnVhbCh0aGlzLl9yb3dzKTtcbiAgLy8gICBjb25zdCBmcm9tID0gKHRoaXMucGFnaW5nLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5nLmxpbWl0O1xuICAvLyAgIGNvbnN0IHRvID0gKHRoaXMucGFnaW5nLnBhZ2UgPT09IDEpID8gdGhpcy5wYWdpbmcubGltaXQgOiB0aGlzLnBhZ2luZy5saW1pdCAqIHRoaXMucGFnaW5nLnBhZ2U7XG4gIC8vICAgY29uc3Qgc2xpY2VPZlJvd3MgPSB0aGlzLl9yb3dzLnNsaWNlKGZyb20sIHRvKTtcbiAgLy8gICB0aGlzLmRhdGEkLm5leHQoc2xpY2VPZlJvd3MpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0ZW1wbGF0ZXMgZm9yIHVzaW5nXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZXNcbiAgICovXG4gIHB1YmxpYyB0cmFuZm9ybVRlbXBsYXRlc1RvQ29sdW1ucyh0ZW1wbGF0ZXMpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlncyA9IHtcbiAgICAgIGhlYWRlcjogdGhpcy5faGVhZGVyQ29uZmlnLFxuICAgICAgZ3JvdXBDZWxsOiB0aGlzLl9ncm91cENlbGxDb25maWcsXG4gICAgICBjZWxsOiB0aGlzLl9jZWxsQ29uZmlnLFxuICAgICAgZm9vdGVyOiB0aGlzLl9mb290ZXJDb25maWcsXG4gICAgfTtcblxuICAgIHRoaXMuY29sdW1ucy5zZXREZWZhdWx0cyhkZWZhdWx0Q29uZmlncyk7XG4gICAgdGhpcy5jb2x1bW5zLmluaXRpYWxpemVDb2x1bW5zKHRlbXBsYXRlcyk7XG5cbiAgICAvLyBTZXQgc29ydEJ5IGRlZmF1bHQgY29sdW1uXG4gICAgdGhpcy5zb3J0aW5nLmNsZWFyU29ydGFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy5jb2x1bW5zLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnNvcnRhYmxlICYmIGNvbHVtbi5zaG93KVxuICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICB0aGlzLnNvcnRpbmcuYWRkU29ydGFibGVDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gRGVmYXVsdCBzb3J0IGJ5XG4gICAgY29uc3QgZXh0ZXJuYWxTb3J0aW5nID0gdGhpcy5leHRlcm5hbFBhcmFtcy5leHRlcm5hbFNvcnRpbmc7XG4gICAgY29uc3QgaW5pdGlhbFNvcnRDb25maWcgPSBleHRlcm5hbFNvcnRpbmcgfHwgdGhpcy5jb25maWcuc29ydDtcbiAgICB0aGlzLnNvcnRpbmcuaW5pdGlhbFNvcnRCeShpbml0aWFsU29ydENvbmZpZyk7XG5cbiAgICBpZiAoZXh0ZXJuYWxTb3J0aW5nICYmICF0aGlzLnNvcnRpbmcuaXNEZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4dGVybmFsUGFyYW1zLmNsZWFyU29ydGluZ1BhcmFtcygpO1xuXG4gICAgICBjb25zb2xlLndhcm4oJ05vdCBhYmxlIHRvIHJlc3RvcmUgcGVyc2lzdGVkIHNvcnRpbmcgcGFyYW1zLicsIGV4dGVybmFsU29ydGluZyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0RmlsdGVycygpO1xuICAgIHRoaXMuaW5pdEluZmluaXR5U2Nyb2xsKCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKCkge1xuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcblxuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuc2V0T3BlcmF0aW9uKEZzTGlzdFN0YXRlLlJlbG9hZCk7XG5cbiAgICBpZiAodGhpcy5mc1Njcm9sbEluc3RhbmNlKSB7XG4gICAgICB0aGlzLnBhZ2luZy5yZXNldFBhZ2luZygpO1xuICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5jbGVhclJvd3MoKTtcbiAgICAgIHRoaXMuZnNTY3JvbGxJbnN0YW5jZS5yZWxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mZXRjaCQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBwYWdlIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBzdWJzY3JpYmUoKSB7XG4gICAgdGhpcy5wYWdpbmcucGFnZUNoYW5nZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogUGFnZUNoYW5nZSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5QYWdlQ2hhbmdlKTtcblxuICAgICAgICAvLyBSZW1vdmUgYWxsIHJvd3MgaWYgbGltaXRzIHdhcyBjaGFuZ2VkXG4gICAgICAgIGlmIChldmVudC50eXBlID09PSBQYWdlQ2hhbmdlVHlwZS5MaW1pdENoYW5nZWQgJiYgdGhpcy5wYWdpbmcuaGFzUGFnZVN0cmF0ZWd5KSB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5jbGVhclJvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luZy5oYXNPZmZzZXRTdHJhdGVneSkge1xuICAgICAgICAgIHRoaXMucGFnaW5nLnVwZGF0ZVBhZ2luYXRpb24oKTtcblxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5nZXRWaXNpYmxlUmVjb3JkcygpKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVRvdGFsUmVjb3Jkc0NvdW50KHRoaXMucGFnaW5nLnJlY29yZHMpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGFnZUNoYW5nZWQodGhpcy5zY3JvbGxhYmxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSAmJiAhdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkKSB7XG5cbiAgICAgICAgICBjb25zdCBjb250YWlucyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNkay1vdmVybGF5LWNvbnRhaW5lcicpKS5zb21lKG92ZXJsYXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyhvdmVybGF5KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGxldCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgIGlmICghY29udGFpbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBpZiAoKHJlY3QudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0KSA8IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgICAgICAgICAgICBlbCA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mZXRjaENvbXBsZXRlJC5hc09ic2VydmFibGUoKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZldGNoJC5uZXh0KCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc29ydGluZy5zb3J0aW5nQ2hhbmdlZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5Tb3J0KTtcbiAgICAgICAgdGhpcy5wYWdpbmcucGFnZSA9IDE7XG5cbiAgICAgICAgaWYgKHRoaXMuZnNTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuY2xlYXJSb3dzKCk7XG4gICAgICAgICAgdGhpcy5mc1Njcm9sbEluc3RhbmNlLnJlbG9hZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmV0Y2gkLm5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmxpc3RlblJvd3NSZW1vdmUoKTtcbiAgICB0aGlzLmxpc3RlbkZldGNoKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YSh0cmFja0J5PzogRnNMaXN0VHJhY2tCeUZuKSB7XG4gICAgbGV0IHJvd3NEYXRhID0gdGhpcy5kYXRhQ29udHJvbGxlclxuICAgICAgLnZpc2libGVSb3dzRGF0YTtcblxuICAgIGlmICh0cmFja0J5KSB7XG4gICAgICByb3dzRGF0YSA9IHJvd3NEYXRhXG4gICAgICAgIC5maWx0ZXIodHJhY2tCeSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3NEYXRhXG4gICAgICAubWFwKChkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBjbG9uZURlZXAoZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNEYXRhKHRyYWNrQnk6IEZzTGlzdFRyYWNrQnlGbikge1xuICAgIHJldHVybiB0aGlzLmRhdGFDb250cm9sbGVyLnZpc2libGVSb3dzRGF0YS5zb21lKHRyYWNrQnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBncm91cCBtb2RlIHN0YXR1c1xuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBncm91cEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kYXRhQ29udHJvbGxlci5ncm91cEVuYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLmdyb3VwRW5hYmxlZCA9IHZhbHVlO1xuXG4gICAgICAvLyBDb21tZW50ZWQgb3V0IGJlY2F1c2UgUmF5IHdhbnRzIHRvIGNoYW5nZSBncm91cCBzdGF0dXMgaW4gZmV0Y2ggbWFwIHBpcGVcbiAgICAgIC8vIGFuZCBpdCB0cmlnZ2VycyBleHRyYSByZXF1ZXN0c1xuICAgICAgLy8gdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5fZnNTY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2ZzU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFnaW5nKSB7XG4gICAgICB0aGlzLnBhZ2luZy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydGluZykge1xuICAgICAgdGhpcy5zb3J0aW5nLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJDb25maWcpIHtcbiAgICAgIHRoaXMuZmlsdGVyQ29uZmlnID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5leHRlcm5hbFBhcmFtcykge1xuICAgICAgdGhpcy5leHRlcm5hbFBhcmFtcy5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtbnMuZGVzdHJveSgpO1xuXG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcblxuICAgIHRoaXMuZGF0YUNvbnRyb2xsZXIuZGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvIGluaXRpYWxpemF0aW9uIG9mIHRhYmxlXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZShjb25maWc6IEZzTGlzdENvbmZpZykge1xuICAgIHRoaXMuY29sdW1ucy5pbml0Q29uZmlnKGNvbmZpZy5jb2x1bW4pO1xuICAgIHRoaXMuaW5pdERlZmF1bHRPcHRpb25zKGNvbmZpZyk7XG4gICAgdGhpcy5pbml0UmVzdG9yZSgpO1xuICAgIHRoaXMuaW5pdEFjdGlvbnMoY29uZmlnLmFjdGlvbnMpO1xuICAgIHRoaXMuaW5pdFBhZ2luZyhjb25maWcucGFnaW5nLCBjb25maWcubG9hZE1vcmUpO1xuICAgIHRoaXMuaW5pdFNlbGVjdGlvbihjb25maWcuc2VsZWN0aW9uLCB0aGlzLnNlbGVjdGlvbkRpYWxvZyk7XG4gICAgdGhpcy5pbml0R3JvdXBzKGNvbmZpZy5ncm91cCk7XG4gICAgdGhpcy5pbml0RXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyKCk7XG5cbiAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogSnVzdCBpbml0IG9wdGlvbnMgYnkgZGVmYXVsdCBpdCBpdCB3YXNuJ3Qgc3BlY2lmaWVkXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICovXG4gIHByaXZhdGUgaW5pdERlZmF1bHRPcHRpb25zKGNvbmZpZykge1xuICAgIC8vIFdlIHNob3VsZCBwcmV2ZW50IGluaXRpYWwgZmV0Y2ggaW4gY2FzZXMgd2hlbiBpdCB3aWxsIGJlIGZldGNoZWQgaW4gYW55IGNhc2VcbiAgICAvLyBBcyBleC4gc2Nyb2xsYWJsZSBvciBmaWx0ZXIgd2lsbCBkbyBmZXRjaCBpbiBhbnkgY2FzZXNcbiAgICBpZiAoY29uZmlnLmluaXRpYWxGZXRjaCA9PT0gZmFsc2UgfHwgY29uZmlnLnNjcm9sbGFibGUpIHsgLy8gVE9ETyBmaXhtZSBhZnRlciB0c21vZGVsIHZlcnNpb24gdXBkYXRlXG4gICAgICB0aGlzLmluaXRpYWxGZXRjaCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnN0YXR1cyA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjb25maWcuY2hpcHMpIHtcbiAgICAgIHRoaXMuY2hpcHMgPSBjb25maWcuY2hpcHM7XG4gICAgfVxuICAgIGlmIChjb25maWcuZmlsdGVySW5wdXQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmZpbHRlcklucHV0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5EaWFsb2cpIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW0gPSAoY29uZmlnLnF1ZXJ5UGFyYW0gPT09IHZvaWQgMClcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogY29uZmlnLnF1ZXJ5UGFyYW07XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5zb3J0cykge1xuICAgICAgdGhpcy5zb3J0aW5nLmluaXRGYWtlQ29sdW1ucyhjb25maWcuc29ydHMpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpZy50cmFja0J5KSB7XG4gICAgICB0aGlzLnRyYWNrQnkgPSAnaWQnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0IHJlc3RvcmUgcm93IGFjdGlvbiBhbmQgYXBwZW5kIFNob3cgRGVsZXRlZCBvcHRpb24gaW50byBmaWx0ZXJzXG4gICAqL1xuICBwcml2YXRlIGluaXRSZXN0b3JlKCkge1xuICAgIGlmICh0aGlzLnJlc3RvcmUpIHtcbiAgICAgIGNvbnN0IHJlc3RvcmVBY3Rpb24gPSBuZXcgUm93QWN0aW9uKHtcbiAgICAgICAgbGFiZWw6IHRoaXMucmVzdG9yZS5tZW51TGFiZWwgfHwgJ1Jlc3RvcmUnLFxuICAgICAgICBtZW51OiB0cnVlLFxuICAgICAgICBjbGljazogKHJvdykgPT4geyB0aGlzLnJlc3RvcmVDbGljayh0aGlzLnJlc3RvcmUuY2xpY2ssIHJvdykgfSwgLy8gVE9ETyBmaXggbWUsIG1vdmUgdG8gc3BlY2lhbCBmaWxlXG4gICAgICAgIHJlc3RvcmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXRoaXMucm93QWN0aW9uc1Jhdykge1xuICAgICAgICB0aGlzLnJvd0FjdGlvbnNSYXcgPSBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yb3dBY3Rpb25zUmF3LnB1c2gocmVzdG9yZUFjdGlvbik7XG5cbiAgICAgIGlmICghdGhpcy5maWx0ZXJzKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5yZXN0b3JlLmZpbHRlciAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFNIT1dfREVMRVRFRF9GSUxURVJTX0tFWSxcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5DaGVja2JveCxcbiAgICAgICAgICBsYWJlbDogdGhpcy5yZXN0b3JlLmZpbHRlckxhYmVsIHx8ICdTaG93IERlbGV0ZWQnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIEluaXQgcGFnaW5nXG4gICAqIEBwYXJhbSBwYWdpbmdDb25maWdcbiAgICogQHBhcmFtIGxvYWRNb3JlXG4gICAqL1xuICBwcml2YXRlIGluaXRQYWdpbmcocGFnaW5nQ29uZmlnOiBGc1BhZ2luZyB8IGZhbHNlLCBsb2FkTW9yZTogRnNMaXN0TG9hZE1vcmVDb25maWcgfCBib29sZWFuKSB7XG4gICAgdGhpcy5wYWdpbmcuaW5pdFdpdGhDb25maWcocGFnaW5nQ29uZmlnLCBsb2FkTW9yZSwgISF0aGlzLnNjcm9sbGFibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0IGFjdGlvbnMgYnkgY2F0ZWdvcmllc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0QWN0aW9ucyhhY3Rpb25zKSB7XG4gICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9ucy5zZXRBY3Rpb25zKGFjdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuaGFzUm93QWN0aW9ucyA9XG4gICAgICAodGhpcy5yb3dBY3Rpb25zUmF3ICYmIHRoaXMucm93QWN0aW9uc1Jhdy5sZW5ndGggPiAwKVxuICAgICAgfHwgKHRoaXMuZ3JvdXBBY3Rpb25zUmF3ICYmIHRoaXMuZ3JvdXBBY3Rpb25zUmF3Lmxlbmd0aCA+IDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U2VsZWN0aW9uKFxuICAgIHNlbGVjdGlvbkNvbmZpZzogRnNMaXN0U2VsZWN0aW9uQ29uZmlnLFxuICAgIHNlbGVjdGlvbkRpYWxvZzogU2VsZWN0aW9uRGlhbG9nLFxuICApIHtcbiAgICBpZiAoc2VsZWN0aW9uQ29uZmlnKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Db250cm9sbGVyKHNlbGVjdGlvbkNvbmZpZywgdGhpcy50cmFja0J5LCBzZWxlY3Rpb25EaWFsb2cpO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0Um93c0NhbGxiYWNrKCgpID0+IHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURhdGEoKSB7XG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRBZGRpdGlvbmFsQ29uZmlncyh7XG4gICAgICBzY3JvbGxhYmxlOiAhIXRoaXMuc2Nyb2xsYWJsZSxcbiAgICAgIGxvYWRNb3JlRW5hYmxlZDogdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRHcm91cHMoZ3JvdXBDb25maWc6IEZzTGlzdEdyb3VwQ29uZmlnKSB7XG4gICAgaWYgKGdyb3VwQ29uZmlnKSB7XG4gICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldEdyb3VwQ29uZmlnKGdyb3VwQ29uZmlnKTtcbiAgICAgIHRoaXMuZ3JvdXBBY3Rpb25zUmF3ID0gZ3JvdXBDb25maWcuYWN0aW9ucztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIoKSB7XG4gICAgdGhpcy5leHRlcm5hbFBhcmFtcyA9IG5ldyBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIoXG4gICAgICB0aGlzLnJvdXRlcixcbiAgICAgIHRoaXMucm91dGUsXG4gICAgICB0aGlzLnBlcnNpc3RhbmNlLFxuICAgICAgdGhpcy5wYWdpbmcsXG4gICAgICB0aGlzLnNvcnRpbmcsXG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBmZXRjaCQgZXZlbnQgd2l0aCBkZWJvdW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5GZXRjaCgpIHtcbiAgICBsZXQgZmV0Y2gkID0gdGhpcy5mZXRjaCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAvLyBTaG91bGQgd2FpdCB1bnRpbCBzYXZlZCBmaWx0ZXJzIG5vdCBsb2FkZWRcbiAgICBpZiAoISF0aGlzLmZpbHRlcnMpIHtcbiAgICAgIGZldGNoJCA9IGNvbWJpbmVMYXRlc3QoW2ZldGNoJCwgdGhpcy5maWx0ZXJzUmVhZHkkXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChbcGFyYW1zXSkgPT4gcGFyYW1zKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmZXRjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmNsb3NlU2VsZWN0aW9uRGlhbG9nKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHBhcmFtczogRnNMaXN0RmV0Y2hTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgICAgICBsZXQgcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmZpbHRlcnNRdWVyeSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuaGFzT2Zmc2V0U3RyYXRlZ3kgJiYgcGFyYW1zICYmIHBhcmFtcy5sb2FkT2Zmc2V0KSB7XG4gICAgICAgICAgICBxdWVyeSA9IE9iamVjdC5hc3NpZ24ocXVlcnksIHRoaXMucGFnaW5nLmxvYWREZWxldGVkT2Zmc2V0UXVlcnkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsRmV0Y2ggJiYgdGhpcy5wYWdpbmcubG9hZE1vcmVFbmFibGVkKSB7XG4gICAgICAgICAgICAgIHF1ZXJ5ID0gT2JqZWN0LmFzc2lnbihxdWVyeSwgdGhpcy5wYWdpbmcubG9hZE1vcmVRdWVyeSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBxdWVyeSA9IE9iamVjdC5hc3NpZ24ocXVlcnksIHRoaXMucGFnaW5nLnF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JkZXI6IGAke3RoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLm5hbWV9LCR7dGhpcy5zb3J0aW5nLnNvcnRpbmdDb2x1bW4uZGlyZWN0aW9ufWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocXVlcnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zLmxvYWRGbkNvbmZpZ3VyZWQgJiYgIXRoaXMuY29sdW1ucy5jb2x1bW5zRmV0Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5sb2FkUmVtb3RlQ29sdW1uQ29uZmlncygpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcFRvKHF1ZXJ5KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YocXVlcnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgocXVlcnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zLmNvbmZpZ3VyZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLnZpc2libGVDb2x1bW5zTmFtZXMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbb2YocXVlcnkpLCB0aGlzLmZldGNoUmVtb3RlKHF1ZXJ5KV0pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IsIHNvdXJjZSQpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgIHJldHVybiBzb3VyY2UkO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmluaXRpYWxGZXRjaCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY29tcGxldGVGZXRjaChyZXNwb25zZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuUm93c1JlbW92ZSgpIHtcbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnJvd3NSZW1vdmVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocm93czogYW55W10pID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFnaW5nLmVuYWJsZWQpIHtcblxuICAgICAgICAgIGNvbnN0IHJlbW92ZWRDb3VudCA9IHJvd3MubGVuZ3RoO1xuXG4gICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmhhc1BhZ2VTdHJhdGVneSkge1xuICAgICAgICAgICAgdGhpcy5ub0RhdGFQYWdpbmF0aW9uVXBkYXRlKHJlbW92ZWRDb3VudCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZldGNoIG1vcmUgaWYgaGFzIHNvbWV0aGluZyBmb3IgZmV0Y2hcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFDb250cm9sbGVyLmhhc0RhdGEgfHwgdGhpcy5wYWdpbmcuaGFzTmV4dFBhZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuTG9hZE1vcmUpO1xuXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnJlbW92ZVJvd3MocmVtb3ZlZENvdW50KTtcbiAgICAgICAgICAgICAgdGhpcy5mZXRjaCQubmV4dCh7IGxvYWRPZmZzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm5vRGF0YVBhZ2luYXRpb25VcGRhdGUocmVtb3ZlZENvdW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgZnJvbSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJlbW92ZVJvdyhyb3cuZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SW5maW5pdHlTY3JvbGwoKSB7XG4gICAgaWYgKHRoaXMuZnNTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIC8vIFNjcm9sbGFibGUgc3RhdHVzIGJ5IGRlZmF1bHRcbiAgICAgIGlmICh0aGlzLnNjcm9sbGFibGUuc3RhdHVzID09PSB2b2lkIDApIHtcbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlLnN0YXR1cyA9IHRydWU7XG4gICAgICB9XG5cblxuICAgICAgdGhpcy5mc1Njcm9sbFxuICAgICAgICAuY29tcG9uZW50KHRoaXMuc2Nyb2xsYWJsZS5uYW1lKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGZzU2Nyb2xsSW5zdGFuY2U6IEZzU2Nyb2xsSW5zdGFuY2UpID0+IHtcbiAgICAgICAgICB0aGlzLmZzU2Nyb2xsSW5zdGFuY2UgPSBmc1Njcm9sbEluc3RhbmNlO1xuICAgICAgICAgIHRoaXMuX2ZzU2Nyb2xsU3Vic2NyaXB0aW9uID0gZnNTY3JvbGxJbnN0YW5jZVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBzdGFydExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5kYXRhQ29udHJvbGxlci5vcGVyYXRpb247XG5cbiAgICAgICAgICAgICAgLy8gSW5pdGlhbCBsb2FkaW5nIGlmIGluaXRpYWxGZXRjaCBlcXVhbHMgZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxGZXRjaFxuICAgICAgICAgICAgICAgICYmICF0aGlzLnBhZ2luZy5pbml0aWFsaXplZFxuICAgICAgICAgICAgICAgICYmIG9wZXJhdGlvbiAhPT0gRnNMaXN0U3RhdGUuUmVsb2FkXG4gICAgICAgICAgICAgICkge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuTG9hZCk7XG4gICAgICAgICAgICAgICAgc3RhcnRMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9PT0gRnNMaXN0U3RhdGUuUmVsb2FkIHx8XG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uID09PSBGc0xpc3RTdGF0ZS5GaWx0ZXIgfHxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24gPT09IEZzTGlzdFN0YXRlLlNvcnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luZy5pbml0aWFsaXplZCAmJiB0aGlzLnBhZ2luZy5oYXNOZXh0UGFnZSkge1xuICAgICAgICAgICAgICAgIC8vIExvYWRpbmcgaWYgY29udGVudCBoYXMgYmVlbiBzY3JvbGxlZFxuICAgICAgICAgICAgICAgIHN0YXJ0TG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRPcGVyYXRpb24oRnNMaXN0U3RhdGUuTG9hZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuZ29OZXh0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc3RhcnRMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaCQubmV4dCgpO1xuICAgICAgICAgICAgICAgIGZzU2Nyb2xsSW5zdGFuY2UubG9hZGluZygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLnJlbW90ZVJvd3NDaGFuZ2UkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgZnNTY3JvbGxJbnN0YW5jZS5sb2FkZWQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbmQgd2F0Y2ggZmlsdGVyIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgaW5pdEZpbHRlcnMoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugc29ydGluZyBhbmQgZmFrZSBzb3J0aW5nIGNvbHNcbiAgICAvLyBGYWtlIHNvcnRpbmcgY29scyBpdCdzIGNvbHMgd2hpY2ggZG9uJ3QgcmVwcmVzZW50ZWQgaW4gdGFibGUgY29scywgbGlrZSBhYnN0cmFjdCBjb2xzXG4gICAgY29uc3Qgc29ydFZhbHVlcyA9XG4gICAgICBbXG4gICAgICAgIC4uLnRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1ucyxcbiAgICAgICAgLi4udGhpcy5zb3J0aW5nLmZha2VTb3J0aW5nQ29sdW1uc1xuICAgICAgXS5yZWR1Y2UoKGFjYywgY29sdW1uKSA9PiB7XG5cbiAgICAgICAgY29uc3Qgc29ydGluZ0l0ZW0gPSB7XG4gICAgICAgICAgbmFtZTogY29sdW1uLnRpdGxlLFxuICAgICAgICAgIHZhbHVlOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0OiB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbiAmJiB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICB9O1xuXG4gICAgICAgIGFjYy5wdXNoKHNvcnRpbmdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IHNvcnRDb25maWcgPSB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtblxuICAgICAgPyB7IHZhbHVlOiB0aGlzLnNvcnRpbmcuc29ydGluZ0NvbHVtbi5uYW1lLCBkaXJlY3Rpb246IHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uLmRpcmVjdGlvbn1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIENvbmZpZ1xuICAgIHRoaXMuZmlsdGVyQ29uZmlnID0ge1xuICAgICAgcGVyc2lzdDogdGhpcy5wZXJzaXN0LFxuICAgICAgaXRlbXM6IHRoaXMuZmlsdGVycyB8fCBbXSxcbiAgICAgIHNhdmVkRmlsdGVyczogdGhpcy5zYXZlZEZpbHRlcnMsXG4gICAgICBpbmxpbmU6IHRoaXMuaW5saW5lRmlsdGVycyxcbiAgICAgIGFjdGlvbnM6IHRoaXMuYWN0aW9ucy5hY3Rpb25zLFxuICAgICAgcXVlcnlQYXJhbTogdGhpcy5xdWVyeVBhcmFtLFxuICAgICAgc29ydHM6IHNvcnRWYWx1ZXMsXG4gICAgICBzb3J0OiBzb3J0Q29uZmlnLFxuICAgICAgY2hpcHM6IHRoaXMuY2hpcHMsXG4gICAgICBpbml0OiB0aGlzLmZpbHRlckluaXQuYmluZCh0aGlzKSxcbiAgICAgIGNoYW5nZTogdGhpcy5maWx0ZXJDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgIHJlbG9hZDogdGhpcy5yZWxvYWQuYmluZCh0aGlzKSxcbiAgICAgIHNvcnRDaGFuZ2U6IHRoaXMuZmlsdGVyU29ydC5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBGaWx0ZXIgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICovXG4gIHByaXZhdGUgZmlsdGVySW5pdChmaWx0ZXJzKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVySW5pdENiKSB7XG4gICAgICB0aGlzLmZpbHRlckluaXRDYihmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJzUXVlcnkubmV4dChmaWx0ZXJzKTtcblxuICAgIHRoaXMuY2hlY2tSZXN0b3JlRmlsdGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgd2hlbiBGaWx0ZXIgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBAcGFyYW0gZmlsdGVyUXVlcnlcbiAgICogQHBhcmFtIGZpbHRlclNvcnRcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyQ2hhbmdlKGZpbHRlclF1ZXJ5LCBmaWx0ZXJTb3J0KSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyQ2hhbmdlQ2IpIHtcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlQ2IoZmlsdGVyUXVlcnksIGZpbHRlclNvcnQpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlcnNRdWVyeS5uZXh0KGZpbHRlclF1ZXJ5KTtcblxuICAgIHRoaXMucmVzdG9yZU1vZGUgPSBmYWxzZTtcblxuICAgIC8vIFJlc3RvcmUgb3B0aW9uXG4gICAgdGhpcy5jaGVja1Jlc3RvcmVGaWx0ZXIoKTtcblxuICAgIGlmICh0aGlzLnJlc3RvcmUgJiYgdGhpcy5yZXN0b3JlLnJlbG9hZCkge1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFDb250cm9sbGVyLnNldE9wZXJhdGlvbihGc0xpc3RTdGF0ZS5GaWx0ZXIpO1xuXG4gICAgLy8gUmVzZXQgcGFnaW5nIGZvciByZXF1ZXN0IHdpdGggY29ycmVjdCBvZmZzZXRcbiAgICB0aGlzLnBhZ2luZy5yZXNldFBhZ2luZygpO1xuXG4gICAgaWYgKHRoaXMuZnNTY3JvbGxJbnN0YW5jZSkge1xuICAgICAgdGhpcy5kYXRhQ29udHJvbGxlci5jbGVhclJvd3MoKTtcbiAgICAgIHRoaXMuZnNTY3JvbGxJbnN0YW5jZS5yZWxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mZXRjaCQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tSZXN0b3JlRmlsdGVyKCkge1xuICAgIC8vIFJlc3RvcmUgb3B0aW9uXG4gICAgaWYgKHRoaXMucmVzdG9yZSAmJiB0aGlzLmZpbHRlcnNRdWVyeVtTSE9XX0RFTEVURURfRklMVEVSU19LRVldKSB7XG4gICAgICBkZWxldGUgdGhpcy5maWx0ZXJzUXVlcnlbU0hPV19ERUxFVEVEX0ZJTFRFUlNfS0VZXTtcblxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmZpbHRlcnNRdWVyeSwgdGhpcy5yZXN0b3JlLnF1ZXJ5KTtcblxuICAgICAgdGhpcy5yZXN0b3JlTW9kZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsbGJhY2sgd2hlbiBGaWx0ZXIgc29ydCBoYXMgYmVlbiBjaGFuZ2VkXG4gIHByaXZhdGUgZmlsdGVyU29ydChmaWx0ZXJRdWVyeSwgZmlsdGVyU29ydCkge1xuICAgIGlmIChmaWx0ZXJTb3J0KSB7XG4gICAgICB0aGlzLnNvcnRpbmcuc29ydEJ5Q29sdW1uV2l0aE5hbWUoZmlsdGVyU29ydC52YWx1ZSk7XG5cbiAgICAgIGNvbnN0IHNvcnREaXJlY3Rpb24gPSBmaWx0ZXJTb3J0LmRpcmVjdGlvbiA9PT0gJ2FzYycgPyBTb3J0aW5nRGlyZWN0aW9uLmFzYyA6IFNvcnRpbmdEaXJlY3Rpb24uZGVzYztcbiAgICAgIHRoaXMuc29ydGluZy5zb3J0RGlyZWN0aW9uKHNvcnREaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGSVhNRSBuZWVkIHRvIGJlIHJlZmFjdG9yZWQuLi5cbiAgICAgIHRoaXMuc29ydGluZy5zb3J0aW5nQ29sdW1uID0gdm9pZCAwO1xuICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXBsZXRlRmV0Y2goW3F1ZXJ5LCByZXNwb25zZV0pIHtcblxuICAgIGlmICghdGhpcy5wYWdpbmcucGFnZSkge1xuICAgICAgdGhpcy5wYWdpbmcucGFnZSA9IDE7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLnBhZ2luZykge1xuICAgICAgY29uc3QgZGlzcGxheWVkID0gKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YSkgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGgpIHx8IDA7XG4gICAgICB0aGlzLnBhZ2luZy51cGRhdGVQYWdpbmcoXG4gICAgICAgIHJlc3BvbnNlLnBhZ2luZyxcbiAgICAgICAgZGlzcGxheWVkLFxuICAgICAgICB0aGlzLmRhdGFDb250cm9sbGVyLm9wZXJhdGlvbiA9PT0gRnNMaXN0U3RhdGUuTG9hZE1vcmVcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luZy5lbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJyVjIEZzTGlzdCBXYXJuaW5nICcsXG4gICAgICAgICdjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtY29sb3I6ICNmZmNjMGInLFxuICAgICAgICAnUGFnaW5hdGlvbiBkb2VzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LiAnICtcbiAgICAgICAgJ1BhZ2luYXRpb24gaXMgZW5hYmxlZCwgYnV0IGh0dHAgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBcInBhZ2luZ1wiIGZpZWxkLiAnICtcbiAgICAgICAgJ1lvdSBoYXZlIHRvIHNldCBcInBhZ2luZzogZmFsc2VcIiBpbiBjb25maWcgb3IgYWRkIFwicGFnaW5nXCIgZmllbGQgdG8gcmVzcG9uc2UuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLy8gbXVzdCBiZSBiZWZvcmUgc2VsZWN0aW9uLCBiZWNhdXNlIHNlbGV0aW9uIHVzZSByZWNvcmRzXG4gICAgdGhpcy5kYXRhQ29udHJvbGxlci5zZXRSb3dzRnJvbVJlc3BvbnNlKHJlc3BvbnNlLmRhdGEpO1xuICAgIC8vL1xuXG4gICAgLy8gVXBkYXRlIHNlbGVjdGlvbiBwYXJhbXNcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcblxuICAgICAgaWYgKHRoaXMucGFnaW5nLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGFnZUNoYW5nZWQodGhpcy5zY3JvbGxhYmxlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5nZXRWaXNpYmxlUmVjb3JkcygpKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVG90YWxSZWNvcmRzQ291bnQodGhpcy5wYWdpbmcucmVjb3Jkcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb3VudCA9IHJlc3BvbnNlLnBhZ2luZyAmJiByZXNwb25zZS5wYWdpbmcucmVjb3Jkc1xuICAgICAgICAgIHx8IEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YSkgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24udXBkYXRlVmlzaWJsZVJlY29yZHNDb3VudChjb3VudCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnVwZGF0ZVRvdGFsUmVjb3Jkc0NvdW50KGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRSb3dzSW50ZXJzZWN0aW9uKHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbXB0eVN0YXRlPy52YWxpZGF0ZSAmJiB0aGlzLmVtcHR5U3RhdGVUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5lbXB0eVN0YXRlRW5hYmxlZCA9IHRoaXMuZW1wdHlTdGF0ZS52YWxpZGF0ZShxdWVyeSwgY2xvbmVEZWVwKHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NEYXRhKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWZ0ZXJGZXRjaEZuKSB7XG4gICAgICB0aGlzLmFmdGVyRmV0Y2hGbihxdWVyeSwgdGhpcy5kYXRhQ29udHJvbGxlci52aXNpYmxlUm93c0RhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuZmV0Y2hDb21wbGV0ZSQubmV4dCgpO1xuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCBkbyBzb21lIGFjdGlvbnMgaWYgeW91IHJlbW92ZWQgaXRlbSBhbmQgaXRlbSB3YXMgbGFzdCBvbiBoaXMgb3duIHBhZ2VcbiAgICpcbiAgICogRXg6IGlmIGxpc3QgaGFzIDMgcGFnZXMgYW5kIG9uIHRoaXJkIHBhZ2UgeW91IGhhdmUgb25seSBvbmUgaXRlbS4gQW5kIHlvdSBqdXN0IGRlbGV0ZWQgdGhpcyBpdGVtLlxuICAgKiBZb3UgbXVzdCBnbyB0byBzZWNvbmQgcGFnZSwgYnV0IGlmIGl0IHdhcyBsYXN0IHBhZ2UgYW5kIHlvdSBjYW4ndCBnbyBiYWNrIC0+IGp1c3QgcmVsb2FkXG4gICAqXG4gICAqIEBwYXJhbSBkZWxldGVkQ291bnRcbiAgICovXG4gIHByaXZhdGUgbm9EYXRhUGFnaW5hdGlvblVwZGF0ZShkZWxldGVkQ291bnQpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUNvbnRyb2xsZXIuaGFzRGF0YSkge1xuICAgICAgaWYgKHRoaXMucGFnaW5nLnBhZ2UgPiAxKSB7XG4gICAgICAgIHRoaXMucGFnaW5nLmdvVG9QYWdlKHRoaXMucGFnaW5nLnBhZ2UgLSAxIHx8IDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhZ2luZy5yZWNvcmRzIC09IGRlbGV0ZWRDb3VudDtcbiAgICB0aGlzLnBhZ2luZy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhQ29udHJvbGxlci5oYXNEYXRhICYmIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVWaXNpYmxlUmVjb3Jkc0NvdW50KHRoaXMuZGF0YUNvbnRyb2xsZXIudmlzaWJsZVJvd3NDb3VudCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbi51cGRhdGVUb3RhbFJlY29yZHNDb3VudCh0aGlzLnBhZ2luZy5yZWNvcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGVtcG9yYXJ5IHNvbHV0aW9uLCB3aWxsIGRvIGF1dG8gc3Vic2NyaWJlIGlmIHdhcyByZXR1cm5lZCBPYnNlcnZhYmxlLlxuICAgKlxuICAgKiBUT0RPOiBNT1ZFIFRISVMgUEVBQ0UgT0YgQ09ERSBUTyBTUEVDSUFMIFBMQUNFXG4gICAqXG4gICAqIEBwYXJhbSByZXN0b3JlQ2xpY2tDYWxsYmFja1xuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBwcml2YXRlIHJlc3RvcmVDbGljayhyZXN0b3JlQ2xpY2tDYWxsYmFjaywgcm93KSB7XG4gICAgY29uc3QgcmVzdG9yZUNsaWNrUmVzdWx0ID0gcmVzdG9yZUNsaWNrQ2FsbGJhY2socm93KTtcblxuICAgIGlmIChyZXN0b3JlQ2xpY2tSZXN1bHQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICByZXN0b3JlQ2xpY2tSZXN1bHRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoKSA9PiB0aGlzLnJlbG9hZCgpLFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7fSxcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|