verben-workflow-ui 0.5.61 → 0.5.63
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/esm2022/src/lib/components/task-history/task-history.component.mjs +3 -3
- package/esm2022/src/lib/components/workflow-designer/action-dialog/action-dialog.component.mjs +38 -9
- package/esm2022/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +140 -3
- package/esm2022/src/lib/components/workflow-designer/workflow-data.service.mjs +5 -1
- package/esm2022/src/lib/components/workflow-designer/workflow-designer.state.mjs +51 -1
- package/esm2022/src/lib/components/workflows/workflows.component.mjs +2 -2
- package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs +2 -2
- package/fesm2022/verben-workflow-ui-src-lib-components-task-history.mjs.map +1 -1
- package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs +236 -17
- package/fesm2022/verben-workflow-ui-src-lib-components-workflow-designer.mjs.map +1 -1
- package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs +1 -1
- package/fesm2022/verben-workflow-ui-src-lib-components-workflows.mjs.map +1 -1
- package/package.json +45 -45
- package/src/lib/components/workflow-designer/action-dialog/action-dialog.component.d.ts +6 -2
- package/src/lib/components/workflow-designer/designer-canvas/designer-canvas.component.d.ts +32 -0
- package/src/lib/components/workflow-designer/workflow-data.service.d.ts +1 -0
- package/src/lib/components/workflow-designer/workflow-designer.state.d.ts +10 -0
|
@@ -35,6 +35,10 @@ export class WorkflowDataService {
|
|
|
35
35
|
// console.log('Saving workflows', requests);
|
|
36
36
|
return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
|
|
37
37
|
}
|
|
38
|
+
deleteWorkflowActions(requests) {
|
|
39
|
+
const url = `DeleteWorkflowAction`;
|
|
40
|
+
return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
|
|
41
|
+
}
|
|
38
42
|
saveEscalations(requests) {
|
|
39
43
|
const url = `SaveEscalations`;
|
|
40
44
|
// console.log('Saving workflows', requests);
|
|
@@ -157,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
157
161
|
providedIn: 'root',
|
|
158
162
|
}]
|
|
159
163
|
}], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.EnvironmentService }] });
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBTyxrQkFBa0IsRUFBMkIsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBTTdPLE1BQU0sT0FBTyxtQkFBbUI7SUFHcEI7SUFDQTtJQUZWLFlBQ1UsV0FBa0MsRUFDbEMsTUFBMEI7UUFEMUIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQW9CO0lBQ2hDLENBQUM7SUFFTCxvQkFBb0IsQ0FDbEIsS0FBYSxFQUNiLE9BQWUsQ0FBQyxFQUNoQixRQUFnQixDQUFDLEVBQ2pCLFlBQW9CLFdBQVcsRUFDL0IsWUFBb0IsS0FBSztRQUV6QixNQUFNLEdBQUcsR0FBRyx5QkFBeUIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUE2QixDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZSxDQUFDLEVBQUUsUUFBZ0IsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ3pCLEdBQUcsRUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ1IsQ0FBQztJQUNoQyxDQUFD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QkFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVM7b0JBQ2hDLFFBQVEsRUFBRSxjQUFjO29CQUN4QixJQUFJLEVBQUUsZUFBZTtvQkFDckIsV0FBVyxFQUFFLGdCQUFnQjtvQkFDN0IsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLEVBQUU7b0JBQ2QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxJQUFJO29CQUM5QixZQUFZLEVBQUUsQ0FBQztvQkFDZixVQUFVLEVBQUUsS0FBSztvQkFDakIsWUFBWSxFQUFFLElBQUk7b0JBQ2xCLFdBQVcsRUFBRSxLQUFLO29CQUNsQixJQUFJLEVBQUUsRUFBRTtvQkFDUixJQUFJLEVBQUUsRUFBRTtvQkFDUixvQkFBb0IsRUFBRSxLQUFLO29CQUMzQixjQUFjLEVBQUUsa0JBQWtCLENBQUMsU0FBUztvQkFDNUMsV0FBVyxFQUFFLEVBQUU7b0JBQ2YsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtvQkFDOUIsWUFBWSxFQUFFLEtBQUs7aUJBQ3BCO2FBQ0Y7U0FDRixDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzt3R0E3TlUsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdG9yVGFnLCBFcnJvclJlc3BvbnNlLCBFc2NhbGF0aW9uLCBGbG93YWJsZVN0YXR1cywgRm9ybSwgT2JqZWN0U3RhdGUsIE9wZXJhdGlvbkFjdGlvbiwgUGFnZWQsIFJlcG9ydFNjaGVkdWxlLCBTdGFnZUFjdG9yUnVsZSwgU3RhdHVzLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHsgfVxuXG4gIGdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzV2l0aFBhcmFtLyR7cGFyYW19LyR7c2tpcH0vJHtsaW1pdH0vJHtzb3J0UGFyYW19LyR7c29ydE9yZGVyfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+O1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj47XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8Rm9ybT4+O1xuICB9XG5cbiAgZ2V0VGFncyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8VGFnPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRUYWdzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj47XG4gIH1cblxuICBzYXZlV29ya2Zsb3dzKHJlcXVlc3RzOiBQYXJ0aWFsPFdvcmtmbG93PltdKTogUHJvbWlzZTxhbnkgfCBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVXb3JrZmxvd3NgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVFc2NhbGF0aW9ucyhyZXF1ZXN0czogUGFydGlhbDxFc2NhbGF0aW9uPltdKTogUHJvbWlzZTxFc2NhbGF0aW9uW10+IHtcbiAgICBjb25zdCB1cmwgPSBgU2F2ZUVzY2FsYXRpb25zYDtcbiAgICAvLyBjb25zb2xlLmxvZygnU2F2aW5nIHdvcmtmbG93cycsIHJlcXVlc3RzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gIH1cblxuICBkZWxldGVFc2NhbGF0aW9ucyhyZXF1ZXN0czogRXNjYWxhdGlvblsnQ29kZSddW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVFc2NhbGF0aW9uYDtcbiAgICAvLyBjb25zb2xlLmxvZygnU2F2aW5nIHdvcmtmbG93cycsIHJlcXVlc3RzKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gIH1cblxuICBzZWFyY2hFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtczogUGljazxFc2NhbGF0aW9uLCAnV29ya2Zsb3cnIHwgJ1N0YWdlJyB8ICdUeXBlJz4sXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0T3JkZXI6IHN0cmluZyA9ICdBc2MnXG4gICk6IFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+IHtcbiAgICBjb25zdCB1cmwgPSBgU2VhcmNoRXNjYWxhdGlvbnMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgY29uc3QgcGF5bG9hZCA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICBJc0F1dG9Gcm9tRGF0ZTogdHJ1ZSxcbiAgICAgIElzQXV0b0VuZERhdGU6IHRydWUsXG4gICAgICBQcm9wZXJ0eU5hbWU6IGtleSxcbiAgICAgIEVudGl0eVZhbHVlOiB2YWx1ZSxcbiAgICAgIFR5cGU6ICdTdHJpbmcnLFxuICAgICAgT3BlcmF0b3I6ICdBbmQnLFxuICAgICAgU2lnbjogJ0VRJyxcbiAgICAgIFNvcnQ6IHNvcnRPcmRlcixcbiAgICAgIC8vIEZpZWxkczogWydzdHJpbmcnXSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdCh1cmwsIHBheWxvYWQpIGFzIFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+O1xuICB9XG5cbiAgZ2V0RXNjYWxhdGlvbldpdGhQYXJhbShcbiAgICBwYXJhbTogc3RyaW5nLFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDEsXG4gICAgc29ydFBhcmFtOiBzdHJpbmcgPSAnQ3JlYXRlZEF0JyxcbiAgICBzb3J0T3JkZXI6IHN0cmluZyA9ICdBc2MnXG4gICk6IFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0RXNjYWxhdGlvbnNXaXRoUGFyYW0vJHtwYXJhbX0vJHtza2lwfS8ke2xpbWl0fS8ke3NvcnRQYXJhbX0vJHtzb3J0T3JkZXJ9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEVzY2FsYXRpb24+PjtcbiAgfVxuXG4gIGdldFJlcG9ydFNjaGVkdWxlcyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8UmVwb3J0U2NoZWR1bGU+PiB7XG4gICAgY29uc3QgdXJsID0gYEdldFJlcG9ydFNjaGVkdWxlcy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQoXG4gICAgICB1cmwsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5SZXBvcnRpbmdBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8UmVwb3J0U2NoZWR1bGU+PjtcbiAgfVxuXG4gIGdldE9wZXJhdGlvbkFjdGlvbnMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0T3BlcmF0aW9uQWN0aW9uYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQoXG4gICAgICB1cmwsXG4gICAgICAvLyB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5HTEFQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxPcGVyYXRpb25BY3Rpb24+PjtcbiAgfVxuXG4gIHNhdmVBY3RvclRhZ3MocmVxdWVzdHM6IEFjdG9yVGFnW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlQWN0b3JUYWdzYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdHMsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5Xb3JrRmxvd0FQSVxuICAgICk7XG4gIH1cblxuICBnZXRGbG93YWJsZVN0YXR1c2VzKFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDBcbiAgKTogUHJvbWlzZTxQYWdlZDxGbG93YWJsZVN0YXR1cz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rmxvd2FibGVTdGF0dXMvJHtza2lwfS8ke2xpbWl0fS9DcmVhdGVkQXQvRGVzY2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxGbG93YWJsZVN0YXR1cz4+O1xuICB9XG5cbiAgLy8gSGVscGVyIHRvIGNyZWF0ZSBhIG1vY2sgd29ya2Zsb3cgKGp1c3QgZm9yIGRlbW8pXG4gIHByaXZhdGUgY3JlYXRlTW9ja1dvcmtmbG93KGNvZGU6IHN0cmluZyk6IFdvcmtmbG93IHtcbiAgICAvLyBSZXR1cm4gYSBzaW1wbGUgd29ya2Zsb3cgd2l0aCBvbmUgbGFuZSBhbmQgb25lIHN0YWdlXG4gICAgY29uc3Qgd29ya2Zsb3c6IFdvcmtmbG93ID0ge1xuICAgICAgSWQ6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgQ29kZTogY29kZSxcbiAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgaWQ6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgTmFtZTogJ1NhbXBsZSBXb3JrZmxvdycsXG4gICAgICBEZXNjcmlwdGlvbjogJ0Egc2FtcGxlIHdvcmtmbG93IGxvYWRlZCBmcm9tIEFQSScsXG4gICAgICBTdGFnZUVudHJ5UnVsZTogJycsXG4gICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgIEFjdGlvbnM6IFtdLFxuICAgICAgTGFuZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIElkOiAnbGFuZS0wJyxcbiAgICAgICAgICBDb2RlOiAnbGFuZS0wJyxcbiAgICAgICAgICBUZW5hbnRJZDogJ3RlbmFudC0xJyxcbiAgICAgICAgICBpZDogJ2xhbmUtMCcsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgICAgIFdvcmtmbG93OiAnd29ya2Zsb3ctMTIzJyxcbiAgICAgICAgICBUYWdzOiBbXSxcbiAgICAgICAgICBQb3NpdGlvbjogMCxcbiAgICAgICAgICBDb29yZGluYXRlczogeyBYOiAwLCBZOiAwIH0sXG4gICAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBTdGFnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIElkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBDb2RlOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBUZW5hbnRJZDogJ3RlbmFudC0xJyxcbiAgICAgICAgICBpZDogJ3N0YWdlLTEyMycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICd3b3JrZmxvdy1zZXJ2aWNlJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgICAgIFdvcmtmbG93OiAnd29ya2Zsb3ctMTIzJyxcbiAgICAgICAgICBOYW1lOiAnSW5pdGlhbCBTdGFnZScsXG4gICAgICAgICAgRGVzY3JpcHRpb246ICdTdGFydGluZyBwb2ludCcsXG4gICAgICAgICAgRHVyYXRpb246IDI0LFxuICAgICAgICAgIFBhc3NPblJ1bGU6ICcnLFxuICAgICAgICAgIEFjdG9yUnVsZTogU3RhZ2VBY3RvclJ1bGUuTm9uZSxcbiAgICAgICAgICBNaW5Ob09mQWN0b3I6IDEsXG4gICAgICAgICAgSXNQYXJhbGxlbDogZmFsc2UsXG4gICAgICAgICAgSXNFbnRyeVBvaW50OiB0cnVlLFxuICAgICAgICAgIElzRXhpdFBvaW50OiBmYWxzZSxcbiAgICAgICAgICBUYWdzOiBbXSxcbiAgICAgICAgICBGb3JtOiAnJyxcbiAgICAgICAgICBBbGxvd011bHRpU3ViUHJvY2VzczogZmFsc2UsXG4gICAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgU3ViV29ya0Zsb3c6ICcnLFxuICAgICAgICAgIFN3aW1MYW5lOiAnbGFuZS0wJyxcbiAgICAgICAgICBDb29yZGluYXRlczogeyBYOiAxMDAsIFk6IDUwIH0sXG4gICAgICAgICAgSXNTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcblxuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxufVxuIl19
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBTyxrQkFBa0IsRUFBMkIsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBTTdPLE1BQU0sT0FBTyxtQkFBbUI7SUFHcEI7SUFDQTtJQUZWLFlBQ1UsV0FBa0MsRUFDbEMsTUFBMEI7UUFEMUIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQW9CO0lBQ2hDLENBQUM7SUFFTCxvQkFBb0IsQ0FDbEIsS0FBYSxFQUNiLE9BQWUsQ0FBQyxFQUNoQixRQUFnQixDQUFDLEVBQ2pCLFlBQW9CLFdBQVcsRUFDL0IsWUFBb0IsS0FBSztRQUV6QixNQUFNLEdBQUcsR0FBRyx5QkFBeUIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUE2QixDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZSxDQUFDLEVBQUUsUUFBZ0IsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ3pCLEdBQUcsRUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ1IsQ0FBQztJQUNoQyxDQUFD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ci9jb3JlJztcbmltcG9ydCB7IEFjdG9yVGFnLCBFcnJvclJlc3BvbnNlLCBFc2NhbGF0aW9uLCBGbG93YWJsZVN0YXR1cywgRm9ybSwgT2JqZWN0U3RhdGUsIE9wZXJhdGlvbkFjdGlvbiwgUGFnZWQsIFJlcG9ydFNjaGVkdWxlLCBTdGFnZUFjdG9yUnVsZSwgU3RhdHVzLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHsgfVxuXG4gIGdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzV2l0aFBhcmFtLyR7cGFyYW19LyR7c2tpcH0vJHtsaW1pdH0vJHtzb3J0UGFyYW19LyR7c29ydE9yZGVyfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+O1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj47XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8Rm9ybT4+O1xuICB9XG5cbiAgZ2V0VGFncyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8VGFnPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRUYWdzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj47XG4gIH1cblxuICBzYXZlV29ya2Zsb3dzKHJlcXVlc3RzOiBQYXJ0aWFsPFdvcmtmbG93PltdKTogUHJvbWlzZTxhbnkgfCBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVXb3JrZmxvd3NgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93QWN0aW9ucyhyZXF1ZXN0czogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVXb3JrZmxvd0FjdGlvbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgc2F2ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBQYXJ0aWFsPEVzY2FsYXRpb24+W10pOiBQcm9taXNlPEVzY2FsYXRpb25bXT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlRXNjYWxhdGlvbnNgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBFc2NhbGF0aW9uWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZUVzY2FsYXRpb25gO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaEVzY2FsYXRpb25XaXRoUGFyYW0oXG4gICAgcGFyYW1zOiBQaWNrPEVzY2FsYXRpb24sICdXb3JrZmxvdycgfCAnU3RhZ2UnIHwgJ1R5cGUnPixcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBTZWFyY2hFc2NhbGF0aW9ucy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIElzQXV0b0Zyb21EYXRlOiB0cnVlLFxuICAgICAgSXNBdXRvRW5kRGF0ZTogdHJ1ZSxcbiAgICAgIFByb3BlcnR5TmFtZToga2V5LFxuICAgICAgRW50aXR5VmFsdWU6IHZhbHVlLFxuICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICBTaWduOiAnRVEnLFxuICAgICAgU29ydDogc29ydE9yZGVyLFxuICAgICAgLy8gRmllbGRzOiBbJ3N0cmluZyddLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KHVybCwgcGF5bG9hZCkgYXMgUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj47XG4gIH1cblxuICBnZXRFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRFc2NhbGF0aW9uc1dpdGhQYXJhbS8ke3BhcmFtfS8ke3NraXB9LyR7bGltaXR9LyR7c29ydFBhcmFtfS8ke3NvcnRPcmRlcn1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldCh1cmwpIGFzIFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+O1xuICB9XG5cbiAgZ2V0UmVwb3J0U2NoZWR1bGVzKFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDBcbiAgKTogUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0UmVwb3J0U2NoZWR1bGVzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlJlcG9ydGluZ0FQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+O1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQWN0aW9ucyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8T3BlcmF0aW9uQWN0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRPcGVyYXRpb25BY3Rpb25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIC8vIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkdMQVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+O1xuICB9XG5cbiAgc2F2ZUFjdG9yVGFncyhyZXF1ZXN0czogQWN0b3JUYWdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVBY3RvclRhZ3NgO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGdldEZsb3dhYmxlU3RhdHVzZXMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRGbG93YWJsZVN0YXR1cy8ke3NraXB9LyR7bGltaXR9L0NyZWF0ZWRBdC9EZXNjYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj47XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIGEgbW9jayB3b3JrZmxvdyAoanVzdCBmb3IgZGVtbylcbiAgcHJpdmF0ZSBjcmVhdGVNb2NrV29ya2Zsb3coY29kZTogc3RyaW5nKTogV29ya2Zsb3cge1xuICAgIC8vIFJldHVybiBhIHNpbXBsZSB3b3JrZmxvdyB3aXRoIG9uZSBsYW5lIGFuZCBvbmUgc3RhZ2VcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB7XG4gICAgICBJZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBDb2RlOiBjb2RlLFxuICAgICAgVGVuYW50SWQ6ICd0ZW5hbnQtMScsXG4gICAgICBpZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICBOYW1lOiAnU2FtcGxlIFdvcmtmbG93JyxcbiAgICAgIERlc2NyaXB0aW9uOiAnQSBzYW1wbGUgd29ya2Zsb3cgbG9hZGVkIGZyb20gQVBJJyxcbiAgICAgIFN0YWdlRW50cnlSdWxlOiAnJyxcbiAgICAgIEFzc2lnbm1lbnRUeXBlOiBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgQWN0aW9uczogW10sXG4gICAgICBMYW5lczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdsYW5lLTAnLFxuICAgICAgICAgIENvZGU6ICdsYW5lLTAnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnbGFuZS0wJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIFBvc2l0aW9uOiAwLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IDAgfSxcbiAgICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFN0YWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIENvZGU6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIE5hbWU6ICdJbml0aWFsIFN0YWdlJyxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogJ1N0YXJ0aW5nIHBvaW50JyxcbiAgICAgICAgICBEdXJhdGlvbjogMjQsXG4gICAgICAgICAgUGFzc09uUnVsZTogJycsXG4gICAgICAgICAgQWN0b3JSdWxlOiBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIE1pbk5vT2ZBY3RvcjogMSxcbiAgICAgICAgICBJc1BhcmFsbGVsOiBmYWxzZSxcbiAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHRydWUsXG4gICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIEZvcm06ICcnLFxuICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgU3dpbUxhbmU6ICdsYW5lLTAnLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDEwMCwgWTogNTAgfSxcbiAgICAgICAgICBJc1N1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG59XG4iXX0=
|
|
@@ -660,6 +660,56 @@ export class WorkflowDesignerState {
|
|
|
660
660
|
getCodeForObject(id) {
|
|
661
661
|
return this.loadedObjectIds[id] || '';
|
|
662
662
|
}
|
|
663
|
+
/**
|
|
664
|
+
* Moves a node from one swimlane to another and updates all related state:
|
|
665
|
+
* - Node position (swimlane-relative x/y)
|
|
666
|
+
* - Swimlane arrays (removes from old, adds to new)
|
|
667
|
+
* - Connection swimlane indices for this node
|
|
668
|
+
* - Node's stageData.Tags and SwimLane to match the destination swimlane
|
|
669
|
+
*/
|
|
670
|
+
moveNodeToSwimlane(nodeId, fromSwimlaneIndex, toSwimlaneIndex, newX, absoluteY // absolute SVG Y of the node at drop time
|
|
671
|
+
) {
|
|
672
|
+
const fromSwimlane = this.swimlanes[fromSwimlaneIndex];
|
|
673
|
+
if (!fromSwimlane?.nodes)
|
|
674
|
+
return null;
|
|
675
|
+
const nodeIndex = fromSwimlane.nodes.findIndex((n) => n.id === nodeId);
|
|
676
|
+
if (nodeIndex === -1)
|
|
677
|
+
return null;
|
|
678
|
+
// Pull the node out – keep a local reference
|
|
679
|
+
const node = fromSwimlane.nodes[nodeIndex];
|
|
680
|
+
// ── Fix the Y coordinate ──────────────────────────────────────────────
|
|
681
|
+
// Template formula: absoluteSVGY = node.y + swimlane.order * 263
|
|
682
|
+
// Connection formula: absoluteY = node.y + swimlaneIndex * 263 + point.y
|
|
683
|
+
// Both expect node.y to be swimlane-relative:
|
|
684
|
+
// node.y = absoluteSVGY - swimlane.order * 263
|
|
685
|
+
node.x = newX;
|
|
686
|
+
node.y = absoluteY - toSwimlaneIndex * this.swimlaneHeight;
|
|
687
|
+
// ── Move between swimlane arrays (immutable reassignment) ─────────────
|
|
688
|
+
// Using filter+spread instead of splice/push so Angular's @for block
|
|
689
|
+
// detects the array change on both old and new swimlane.
|
|
690
|
+
fromSwimlane.nodes = fromSwimlane.nodes.filter((n) => n.id !== nodeId);
|
|
691
|
+
const toSwimlane = this.swimlanes[toSwimlaneIndex];
|
|
692
|
+
toSwimlane.nodes = [...(toSwimlane.nodes || []), node];
|
|
693
|
+
// ── Update connection swimlane indices ────────────────────────────────
|
|
694
|
+
this.connections = this.connections.map((conn) => {
|
|
695
|
+
if (conn.sourceNodeId !== nodeId && conn.targetNodeId !== nodeId)
|
|
696
|
+
return conn;
|
|
697
|
+
return {
|
|
698
|
+
...conn,
|
|
699
|
+
...(conn.sourceNodeId === nodeId ? { sourceSwimlaneIndex: toSwimlaneIndex } : {}),
|
|
700
|
+
...(conn.targetNodeId === nodeId ? { targetSwimlaneIndex: toSwimlaneIndex } : {}),
|
|
701
|
+
};
|
|
702
|
+
});
|
|
703
|
+
// ── Sync node metadata to the destination swimlane ────────────────────
|
|
704
|
+
node.stageData = {
|
|
705
|
+
...node.stageData,
|
|
706
|
+
Tags: [...(toSwimlane.tags || [])],
|
|
707
|
+
SwimLane: toSwimlane.id || '',
|
|
708
|
+
};
|
|
709
|
+
return node;
|
|
710
|
+
}
|
|
711
|
+
/** Swimlane height constant used for coordinate conversions. */
|
|
712
|
+
swimlaneHeight = 263;
|
|
663
713
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
664
714
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerState, providedIn: 'root' });
|
|
665
715
|
}
|
|
@@ -669,4 +719,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
669
719
|
providedIn: 'root',
|
|
670
720
|
}]
|
|
671
721
|
}] });
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFpQixrQkFBa0IsRUFBMkMsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFZcEssTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUMvQixXQUFXLEdBQWtCLElBQUksQ0FBQyxDQUFDLHVDQUF1QztJQUMxRSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsR0FPbEIsRUFBRSxDQUFDO0lBQ1AsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFDckMsZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztJQUN2QyxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUVqQyxRQUFRLEdBQW9CLElBQUksQ0FBQztJQUNqQyxjQUFjLEdBQTZCLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEdBQWtDLEVBQUUsQ0FBQztJQUNoRCxZQUFZLEdBQW1DLEVBQUUsQ0FBQztJQUVsRCxhQUFhLENBQUMsRUFBVTtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEMsZUFBZSxHQUE2QjtRQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztRQUN2QyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSx1Q0FBdUM7UUFDNUQsMkNBQTJDO1FB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QyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUF3QyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLGVBQWUsR0FBOEIsRUFBRSxDQUFDLENBQUMsdUJBQXVCO0lBRXhFLDBDQUEwQztJQUMxQyxvQkFBb0IsQ0FBQyxFQUFVLEVBQUUsSUFBWTtRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELGdCQUFnQixDQUFDLEVBQVU7UUFDekIsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLGdCQUFnQixDQUFDLEVBQVU7UUFDekIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO3dHQTl6QlUscUJBQXFCOzRHQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9iamVjdFN0YXRlLCBTdGFnZUFjdG9yUnVsZSwgU3RhdHVzLCBTd2ltTGFuZSwgVGFnLCBUYXNrQXNzaWdubWVudFR5cGUsIFdvcmtmbG93LCBXb3JrZmxvd0FjdGlvbiwgV29ya2Zsb3dTdGFnZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQge1xuICBDb25uZWN0aW9uLFxuICBDb25uZWN0aW9uUG9pbnQsXG4gIE5vZGUsXG4gIFN3aW1sYW5lSXRlbSxcbiAgVG9vbFR5cGUsXG59IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dEZXNpZ25lclN0YXRlIHtcbiAgc3dpbWxhbmVzOiBTd2ltbGFuZUl0ZW1bXSA9IFtdO1xuICBzdGFydE5vZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBJRCBvZiB0aGUgZmlyc3Qvc3RhcnQgbm9kZVxuICBjb25uZWN0aW9uczogQ29ubmVjdGlvbltdID0gW107XG4gIGRyYWdnaW5nQ29ubmVjdGlvbkRhdGE6IHtcbiAgICBzb3VyY2VQb2ludD86IENvbm5lY3Rpb25Qb2ludDtcbiAgICBzb3VyY2VTd2ltbGFuZUluZGV4PzogbnVtYmVyO1xuICAgIHN0YXJ0WD86IG51bWJlcjtcbiAgICBzdGFydFk/OiBudW1iZXI7XG4gICAgY3VycmVudFg/OiBudW1iZXI7XG4gICAgY3VycmVudFk/OiBudW1iZXI7XG4gIH0gPSB7fTtcbiAgd29ya2Zsb3dGb3JtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB3b3JrZmxvd0Zvcm1OYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgd29ya2Zsb3dJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgd29ya2Zsb3c6IFdvcmtmbG93IHwgbnVsbCA9IG51bGw7XG4gIHN3aW1sYW5lUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBTd2ltTGFuZT4gPSB7fTtcbiAgc3RhZ2VSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93U3RhZ2U+ID0ge307XG4gIGFjdGlvblJlY29yZDogUmVjb3JkPHN0cmluZywgV29ya2Zsb3dBY3Rpb24+ID0ge307XG5cbiAgc2V0V29ya2Zsb3dJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53b3JrZmxvd0lkID0gaWQ7XG4gIH1cblxuICBwdWJsaWMgbGFuZUlkVG9JbmRleE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25SdWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgIHN0YWdlOiBbJ3N0YWdlJywgJ2RlY2lzaW9uJywgJ3N1YmZsb3cnXSxcbiAgICBkZWNpc2lvbjogWydzdGFnZSddLCAvLyBEZWNpc2lvbnMgY2FuIG9ubHkgY29ubmVjdCB0byBTdGFnZXNcbiAgICAvLyAnYWN0aW9uJzogWydzdGFnZScsICdmb3JtJywgJ2RlY2lzaW9uJ10sXG4gICAgZm9ybTogW10sXG4gICAgc3ViZmxvdzogWydzdGFnZScsICdkZWNpc2lvbiddLFxuICB9O1xuXG4gIHNldFdvcmtmbG93Rm9ybShmb3JtSWQ6IHN0cmluZyB8IG51bGwsIGZvcm1OYW1lOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy53b3JrZmxvd0Zvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLndvcmtmbG93Rm9ybU5hbWUgPSBmb3JtTmFtZTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLndvcmtmbG93Rm9ybUlkLCB0aGlzLndvcmtmbG93Rm9ybU5hbWUpO1xuICB9XG5cbiAgYWRkU3dpbWxhbmUobmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIGtleSBmb3IgdGhpcyBzd2ltbGFuZVxuICAgIGNvbnN0IHN3aW1sYW5lS2V5ID0gYGxhbmUtJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoXG4gICAgICBNYXRoLnJhbmRvbSgpICogMTAwMFxuICAgICl9YDtcblxuICAgIHRoaXMuc3dpbWxhbmVzID0gdGhpcy5zd2ltbGFuZXMuY29uY2F0KFtcbiAgICAgIHtcbiAgICAgICAgb3JkZXI6IHRoaXMuc3dpbWxhbmVzLmxlbmd0aCxcbiAgICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICAgIHRhZ3MsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgaWQ6IHN3aW1sYW5lS2V5LCAvLyBTdG9yZSB0aGUgZ2VuZXJhdGVkIGtleSBhcyBpZCBmb3IgZnJvbnRlbmQgcmVmZXJlbmNlXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmVnaXN0ZXJMYW5lTWFwcGluZyhsYW5lSWQ6IHN0cmluZywgc3dpbWxhbmVJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5sYW5lSWRUb0luZGV4TWFwLnNldChsYW5lSWQsIHN3aW1sYW5lSW5kZXgpO1xuICB9XG5cbiAgLy8gQWRkIHRoaXMgbWV0aG9kIHRvIGdlbmVyYXRlIGNvbm5lY3Rpb24gcG9pbnRzIGZvciBhIG5vZGVcbiAgZ2VuZXJhdGVDb25uZWN0aW9uUG9pbnRzKG5vZGU6IE5vZGUpOiBDb25uZWN0aW9uUG9pbnRbXSB7XG4gICAgY29uc3QgcG9pbnRzOiBDb25uZWN0aW9uUG9pbnRbXSA9IFtdO1xuICAgIGNvbnN0IHNwYWNpbmcgPSA1MDsgLy8gU3BhY2UgYmV0d2VlbiBjb25uZWN0aW9uIHBvaW50c1xuXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJykge1xuICAgICAgLy8gUmVjdGFuZ3VsYXIgc2hhcGVzIC0gYWRkIHBvaW50cyBhcm91bmQgdGhlIHJlY3RhbmdsZVxuXG4gICAgICAvLyBUb3AgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHggPSBzcGFjaW5nOyB4IDwgbm9kZS53aWR0aDsgeCArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLSR7eH1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiB4LFxuICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgdHlwZTogJ3RvcCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBSaWdodCBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tcmlnaHQtJHt5fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IG5vZGUud2lkdGgsXG4gICAgICAgICAgeTogeSxcbiAgICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQm90dG9tIGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB4ID0gc3BhY2luZzsgeCA8IG5vZGUud2lkdGg7IHggKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0ke3h9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgICB0eXBlOiAnYm90dG9tJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIExlZnQgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtJHt5fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogeSxcbiAgICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZGVjaXNpb24nKSB7XG4gICAgICAvLyBEaWFtb25kIHNoYXBlIC0gYWRkIHBvaW50cyBhdCB0aGUgZm91ciBjb3JuZXJzXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGgsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0IC8gMixcbiAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0LFxuICAgICAgICB0eXBlOiAnYm90dG9tJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IG5vZGUuaGVpZ2h0IC8gMixcbiAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdmb3JtJykge1xuICAgICAgLy8gRm9ybSBvbmx5IGhhcyBpbnB1dCBjb25uZWN0aW9uIHBvaW50cywgbm8gb3V0cHV0IHBvaW50c1xuXG4gICAgICAvLyBMZWZ0IGVkZ2UgcG9pbnRzIChmb3IgaW5wdXQgY29ubmVjdGlvbnMpXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICAvLyBIZXhhZ29uIHNoYXBlIC0gYWRkIHBvaW50cyBhdCB0aGUgc2l4IGNvcm5lcnNcbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogMCxcbiAgICAgICAgdHlwZTogJ3RvcCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tcmlnaHQtdG9wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDQsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tcmlnaHQtYm90dG9tYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiAobm9kZS5oZWlnaHQgKiAzKSAvIDQsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC1ib3R0b21gLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IChub2RlLmhlaWdodCAqIDMpIC8gNCxcbiAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtdG9wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDQsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwb2ludHM7XG4gIH1cblxuICBhZGROb2RlKFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICB0eXBlOiBUb29sVHlwZSxcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHN0YWdlRGF0YT86IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4sXG4gICAgd29ya2Zsb3dEYXRhPzogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSxcbiAgICB1c2VFeGlzdGluZ0lkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdIHx8XG4gICAgICAhdHlwZSB8fFxuICAgICAgKHR5cGUgIT09ICdzdGFnZScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ2RlY2lzaW9uJyAmJlxuICAgICAgICB0eXBlICE9PSAnZm9ybScgJiZcbiAgICAgICAgdHlwZSAhPT0gJ3N1YmZsb3cnKVxuICAgICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQWRqdXN0IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHN3aW1sYW5lXG4gICAgY29uc3QgYWRqdXN0ZWRZID0geSAtIHN3aW1sYW5lSW5kZXggKiAyNjM7IC8vIFN1YnRyYWN0aW5nIGhlYWRlciBoZWlnaHRcblxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIElEIG9yIHVzZSBleGlzdGluZ1xuICAgIGNvbnN0IGlkID1cbiAgICAgIHVzZUV4aXN0aW5nSWQgJiYgc3RhZ2VEYXRhPy5Db2RlXG4gICAgICAgID8gc3RhZ2VEYXRhLkNvZGVcbiAgICAgICAgOiBgJHt0eXBlfS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YDtcblxuICAgIC8vIENyZWF0ZSBub2RlIHdpdGggZGltZW5zaW9ucyBiYXNlZCBvbiB0eXBlXG4gICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIHgsXG4gICAgICB5OiBhZGp1c3RlZFksXG4gICAgICB3aWR0aDogdHlwZSA9PT0gJ3N1YmZsb3cnID8gMTUwIDogMTY5LCAvLyBXaWR0aCBmcm9tIFNWR1xuICAgICAgaGVpZ2h0OiAxMDAsIC8vIEhlaWdodCBmcm9tIFNWR1xuICAgICAgaXNTdGFydE5vZGU6IGZhbHNlLCAvLyBEZWZhdWx0IHRvIGZhbHNlXG4gICAgICBzdGFnZURhdGE6IHN0YWdlRGF0YSB8fCB7fSwgLy8gU3RvcmUgc3RhZ2UgZGF0YVxuICAgICAgd29ya2Zsb3dEYXRhOiB3b3JrZmxvd0RhdGEgfHwgbnVsbCxcbiAgICB9O1xuXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgZW50aXJlIHdvcmtmbG93LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBub2RlXG4gICAgaWYgKHRoaXMuZ2V0Tm9kZUNvdW50KCkgPT09IDApIHtcbiAgICAgIG5vZGUuaXNTdGFydE5vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5zdGFydE5vZGVJZCA9IGlkO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGNvbm5lY3Rpb24gcG9pbnRzIGZvciB0aGUgbm9kZVxuICAgIG5vZGUuY29ubmVjdGlvblBvaW50cyA9IHRoaXMuZ2VuZXJhdGVDb25uZWN0aW9uUG9pbnRzKG5vZGUpO1xuXG4gICAgLy8gQWRkIG5vZGUgdG8gdGhlIHN3aW1sYW5lXG4gICAgaWYgKCF0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2Rlcykge1xuICAgICAgdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMucHVzaChub2RlKTtcblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLy8gSGVscGVyIHRvIGdldCB0b3RhbCBub2RlIGNvdW50IGFjcm9zcyBhbGwgc3dpbWxhbmVzXG4gIGdldE5vZGVDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN3aW1sYW5lcy5yZWR1Y2UoXG4gICAgICAoY291bnQsIHN3aW1sYW5lKSA9PiBjb3VudCArIChzd2ltbGFuZS5ub2Rlcz8ubGVuZ3RoIHx8IDApLFxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICAvLyBGaW5kIGEgbm9kZSBieSBJRCAodXNlZnVsIGZvciBsYXRlciBvcGVyYXRpb25zKVxuICBmaW5kTm9kZUJ5SWQoaWQ6IHN0cmluZyk6IHsgbm9kZTogTm9kZTsgc3dpbWxhbmVJbmRleDogbnVtYmVyIH0gfCBudWxsIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3dpbWxhbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzd2ltbGFuZSA9IHRoaXMuc3dpbWxhbmVzW2ldO1xuICAgICAgY29uc3Qgbm9kZSA9IHN3aW1sYW5lLm5vZGVzPy5maW5kKChuKSA9PiBuLmlkID09PSBpZCk7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICByZXR1cm4geyBub2RlLCBzd2ltbGFuZUluZGV4OiBpIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gRmluZCBhIG5vZGUgYnkgSUQgKHVzZWZ1bCBmb3IgbGF0ZXIgb3BlcmF0aW9ucylcbiAgZmluZEFjdGlvbkJ5SWQoY29ubmVjdGlvbklkOiBzdHJpbmcpOiBDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gY29ubmVjdGlvbklkKSA/PyBudWxsO1xuICB9XG5cbiAgc3RhcnRDb25uZWN0aW9uRHJhZyhcbiAgICBwb2ludDogQ29ubmVjdGlvblBvaW50LFxuICAgIHN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICBnbG9iYWxYOiBudW1iZXIsXG4gICAgZ2xvYmFsWTogbnVtYmVyXG4gICkge1xuICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YSA9IHtcbiAgICAgIHNvdXJjZVBvaW50OiBwb2ludCxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IHN3aW1sYW5lSW5kZXgsXG4gICAgICBzdGFydFg6IGdsb2JhbFgsXG4gICAgICBzdGFydFk6IGdsb2JhbFksXG4gICAgICBjdXJyZW50WDogZ2xvYmFsWCxcbiAgICAgIGN1cnJlbnRZOiBnbG9iYWxZLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uRHJhZyhjdXJyZW50WDogbnVtYmVyLCBjdXJyZW50WTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkge1xuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRYID0gY3VycmVudFg7XG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuY3VycmVudFkgPSBjdXJyZW50WTtcbiAgICB9XG4gIH1cblxuICBlbmRDb25uZWN0aW9uRHJhZygpIHtcbiAgICBjb25zb2xlLmxvZygnRW5kaW5nIGNvbm5lY3Rpb24gZHJhZywgY2xlYXJpbmcgZGF0YScpO1xuICAgIC8vIENsZWFyIGRyYWdnaW5nIGRhdGFcbiAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEgPSB7fTtcbiAgfVxuXG4gIGlzQ29ubmVjdGlvbkRyYWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb25QYXRoRGF0YSgpOiB7XG4gICAgc3RhcnRYOiBudW1iZXI7XG4gICAgc3RhcnRZOiBudW1iZXI7XG4gICAgZW5kWDogbnVtYmVyO1xuICAgIGVuZFk6IG51bWJlcjtcbiAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gIH0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCB7IHNvdXJjZVBvaW50LCBzb3VyY2VTd2ltbGFuZUluZGV4LCBjdXJyZW50WCwgY3VycmVudFkgfSA9XG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGE7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKHNvdXJjZVBvaW50Lm5vZGVJZCk/Lm5vZGU7XG5cbiAgICBpZiAoIW5vZGUgfHwgc291cmNlU3dpbWxhbmVJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIENhbGN1bGF0ZSBzdGFydCBwb2ludCBpbiBnbG9iYWwgY29vcmRpbmF0ZXNcbiAgICBjb25zdCBzdGFydFggPSBub2RlLnggKyBzb3VyY2VQb2ludC54O1xuICAgIGNvbnN0IHN0YXJ0WSA9IG5vZGUueSArIHNvdXJjZVBvaW50LnkgKyBzb3VyY2VTd2ltbGFuZUluZGV4ICogMjYzOyAvLyBBZGQgc3dpbWxhbmUgb2Zmc2V0XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRYLFxuICAgICAgc3RhcnRZLFxuICAgICAgZW5kWDogY3VycmVudFggPz8gc3RhcnRYLFxuICAgICAgZW5kWTogY3VycmVudFkgPz8gc3RhcnRZLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlQ29ubmVjdGlvbihcbiAgICB0YXJnZXROb2RlSWQ6IHN0cmluZyxcbiAgICB0YXJnZXRQb2ludElkOiBzdHJpbmcsXG4gICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogbnVtYmVyXG4gICk6IENvbm5lY3Rpb24gfCBudWxsIHtcbiAgICBjb25zdCB7IHNvdXJjZVBvaW50LCBzb3VyY2VTd2ltbGFuZUluZGV4IH0gPSB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGE7XG5cbiAgICBpZiAoIXNvdXJjZVBvaW50IHx8IHNvdXJjZVN3aW1sYW5lSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyBzb3VyY2UgZGF0YSBmb3IgY29ubmVjdGlvbicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdGlvbjogQ29ubmVjdGlvbiA9IHtcbiAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgIHNvdXJjZU5vZGVJZDogc291cmNlUG9pbnQubm9kZUlkLFxuICAgICAgdGFyZ2V0Tm9kZUlkOiB0YXJnZXROb2RlSWQsXG4gICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludC5pZCxcbiAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50SWQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VTd2ltbGFuZUluZGV4LFxuICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0U3dpbWxhbmVJbmRleCxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGFjdGlvbjogbnVsbCxcbiAgICB9O1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKCdDcmVhdGVkIGNvbm5lY3Rpb246JywgY29ubmVjdGlvbik7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnQ29ubmVjdGlvbnMgYXJyYXkgbm93IGhhcycsXG4gICAgICB0aGlzLmNvbm5lY3Rpb25zLmxlbmd0aCxcbiAgICAgICdjb25uZWN0aW9ucydcbiAgICApO1xuICAgIHJldHVybiBjb25uZWN0aW9uO1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGdldCBjb25uZWN0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICBnZXRDb25uZWN0aW9uRGF0YShjb25uZWN0aW9uOiBDb25uZWN0aW9uKToge1xuICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgIGVuZFg6IG51bWJlcjtcbiAgICBlbmRZOiBudW1iZXI7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgfSB8IG51bGwge1xuICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi5zb3VyY2VOb2RlSWQpO1xuICAgIGNvbnN0IHRhcmdldE5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubmVjdGlvbi50YXJnZXROb2RlSWQpO1xuXG4gICAgaWYgKCFzb3VyY2VOb2RlSW5mbyB8fCAhdGFyZ2V0Tm9kZUluZm8pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXROb2RlSW5mby5ub2RlO1xuXG4gICAgLy8gRmluZCBjb25uZWN0aW9uIHBvaW50c1xuICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24uc291cmNlUG9pbnRJZFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0YXJnZXROb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAocCkgPT4gcC5pZCA9PT0gY29ubmVjdGlvbi50YXJnZXRQb2ludElkXG4gICAgKTtcblxuICAgIGlmICghc291cmNlUG9pbnQgfHwgIXRhcmdldFBvaW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3RhcnRYID0gc291cmNlTm9kZS54ICsgc291cmNlUG9pbnQueDtcbiAgICBjb25zdCBzdGFydFkgPVxuICAgICAgc291cmNlTm9kZS55ICsgc291cmNlUG9pbnQueSArIGNvbm5lY3Rpb24uc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MztcblxuICAgIGNvbnN0IGVuZFggPSB0YXJnZXROb2RlLnggKyB0YXJnZXRQb2ludC54O1xuICAgIGNvbnN0IGVuZFkgPVxuICAgICAgdGFyZ2V0Tm9kZS55ICsgdGFyZ2V0UG9pbnQueSArIGNvbm5lY3Rpb24udGFyZ2V0U3dpbWxhbmVJbmRleCAqIDI2MztcblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydFgsXG4gICAgICBzdGFydFksXG4gICAgICBlbmRYLFxuICAgICAgZW5kWSxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IGNvbm5lY3Rpb24uc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IGNvbm5lY3Rpb24udGFyZ2V0U3dpbWxhbmVJbmRleCxcbiAgICB9O1xuICB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIGNoZWNrIGlmIGEgY29ubmVjdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIG5vZGUgdHlwZXNcbiAgY2FuQ29ubmVjdChzb3VyY2VOb2RlVHlwZTogc3RyaW5nLCB0YXJnZXROb2RlVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29ubmVjdGlvblJ1bGVzW3NvdXJjZU5vZGVUeXBlXT8uaW5jbHVkZXModGFyZ2V0Tm9kZVR5cGUpIHx8IGZhbHNlXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBnZXQgYWxsb3dlZCBub2RlIHR5cGVzIGZvciB0aGUgY3VycmVudCBkcmFnZ2luZyBjb25uZWN0aW9uXG4gIGdldEFsbG93ZWRUYXJnZXROb2RlVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVBvaW50KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLmZpbmROb2RlQnlJZChcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludC5ub2RlSWRcbiAgICApO1xuICAgIGlmICghc291cmNlTm9kZUluZm8pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlVHlwZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGUudHlwZTtcblxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25SdWxlc1tzb3VyY2VOb2RlVHlwZV0gfHwgW107XG4gIH1cblxuICB1cGRhdGVTd2ltbGFuZShpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHRhZ3M6IFRhZ1tdKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnU3RhdGU6IFVwZGF0aW5nIHN3aW1sYW5lIGF0IGluZGV4JyxcbiAgICAgIGluZGV4LFxuICAgICAgJ3dpdGggbmFtZScsXG4gICAgICBuYW1lLFxuICAgICAgJ2FuZCB0YWdzJyxcbiAgICAgIHRhZ3NcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc3dpbWxhbmVzW2luZGV4XSA9IHtcbiAgICAgICAgLi4udGhpcy5zd2ltbGFuZXNbaW5kZXhdLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgIH07XG4gICAgICBjb25zb2xlLmxvZygnU3dpbWxhbmUgdXBkYXRlZDonLCB0aGlzLnN3aW1sYW5lc1tpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIHN3aW1sYW5lIGluZGV4OicsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm1Ub1dvcmtmbG93TW9kZWwoKTogV29ya2Zsb3cge1xuICAgIC8vIFVzZSBzdG9yZWQgd29ya2Zsb3cgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IG9uZVxuICAgIGNvbnN0IHdvcmtmbG93OiBXb3JrZmxvdyA9IHRoaXMud29ya2Zsb3dcbiAgICAgID8geyAuLi50aGlzLndvcmtmbG93LCBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLkNoYW5nZWQgfVxuICAgICAgOiB7XG4gICAgICAgIC8vIEJhc2VNb2RlbCBwcm9wZXJ0aWVzXG4gICAgICAgIElkOiAnJyxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgaWQ6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IHRoaXMud2FzTG9hZGVkRnJvbUFwaSh0aGlzLndvcmtmbG93SWQgfHwgJycpXG4gICAgICAgICAgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkXG4gICAgICAgICAgOiBPYmplY3RTdGF0ZS5OZXcsXG5cbiAgICAgICAgLy8gV29ya2Zsb3cgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICBOYW1lOiAnTmV3IFdvcmtmbG93JyxcbiAgICAgICAgRGVzY3JpcHRpb246ICcnLFxuICAgICAgICBTdGFnZUVudHJ5UnVsZTogJycsXG4gICAgICAgIEZvcm06IHRoaXMud29ya2Zsb3dGb3JtSWQgfHwgdW5kZWZpbmVkLFxuICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgT3BlcmF0aW9uOiAnJyxcbiAgICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgICBBY3Rpb25zOiBbXSxcbiAgICAgICAgTGFuZXM6IFtdLFxuICAgICAgICBTdGFnZXM6IFtdLFxuICAgICAgfTtcblxuICAgIC8vIFVwZGF0ZSB3b3JrZmxvdyBmb3JtIGlmIGNoYW5nZWRcbiAgICBpZiAodGhpcy53b3JrZmxvd0Zvcm1JZCAhPT0gdGhpcy53b3JrZmxvdz8uRm9ybSkge1xuICAgICAgd29ya2Zsb3cuRm9ybSA9IHRoaXMud29ya2Zsb3dGb3JtSWQgfHwgd29ya2Zsb3cuRm9ybTtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2Zvcm0gc3dpbWxhbmVzIHRvIFN3aW1MYW5lW11cbiAgICB3b3JrZmxvdy5MYW5lcyA9IHRoaXMuc3dpbWxhbmVzLm1hcCgoc3dpbWxhbmUpID0+IHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3Rpbmcgc3dpbWxhbmVcbiAgICAgIGlmIChzd2ltbGFuZS5pZCAmJiB0aGlzLnN3aW1sYW5lUmVjb3JkW3N3aW1sYW5lLmlkXSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgbGFuZSB3aXRoIGNoYW5nZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTGFuZSA9IHRoaXMuc3dpbWxhbmVSZWNvcmRbc3dpbWxhbmUuaWRdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nTGFuZSxcbiAgICAgICAgICBOYW1lOiBzd2ltbGFuZS5sYWJlbCxcbiAgICAgICAgICBUYWdzOiBzd2ltbGFuZS50YWdzLFxuICAgICAgICAgIFBvc2l0aW9uOiBzd2ltbGFuZS5vcmRlcixcbiAgICAgICAgICBDb29yZGluYXRlczogeyBYOiAwLCBZOiBzd2ltbGFuZS5vcmRlciAqIDI2MyB9LFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBJRCBmb3IgbmV3IHN3aW1sYW5lcyBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgY29uc3QgbGFuZUlkID1cbiAgICAgICAgICBzd2ltbGFuZS5pZCB8fFxuICAgICAgICAgIGBsYW5lLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKX1gO1xuXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgbGFuZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgLy8gaWQ6IGxhbmVJZCxcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgTmFtZTogc3dpbWxhbmUubGFiZWwsXG4gICAgICAgICAgVGFnczogc3dpbWxhbmUudGFncyB8fCBbXSxcbiAgICAgICAgICBQb3NpdGlvbjogc3dpbWxhbmUub3JkZXIsXG4gICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LFxuICAgICAgICAgIEtleTogc3dpbWxhbmUuaWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gbm9kZXMgdG8gV29ya2Zsb3dTdGFnZVtdXG4gICAgY29uc3Qgc3RhZ2VzOiBXb3JrZmxvd1N0YWdlW10gPSBbXTtcblxuICAgIHRoaXMuc3dpbWxhbmVzLmZvckVhY2goKHN3aW1sYW5lLCBzd2ltbGFuZUluZGV4KSA9PiB7XG4gICAgICBzd2ltbGFuZS5ub2Rlcz8uZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAobm9kZS50eXBlID09PSAnc3RhZ2UnIHx8IG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBleGlzdGluZyBzdGFnZVxuICAgICAgICAgIGlmICh0aGlzLnN0YWdlUmVjb3JkW25vZGUuaWRdKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgc3RhZ2Ugd2l0aCBjaGFuZ2VkIHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdTdGFnZSA9IHRoaXMuc3RhZ2VSZWNvcmRbbm9kZS5pZF07XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB1cGRhdGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRTdGFnZTogV29ya2Zsb3dTdGFnZSA9IHtcbiAgICAgICAgICAgICAgLi4uZXhpc3RpbmdTdGFnZSxcbiAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB0aGF0IG1heSBoYXZlIGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uTmFtZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuTmFtZSA9XG4gICAgICAgICAgICAgICAgbm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgPz8gbm9kZS5zdGFnZURhdGEuTmFtZTtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uRGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLkRlc2NyaXB0aW9uID0gbm9kZS5zdGFnZURhdGEuRGVzY3JpcHRpb247XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkR1cmF0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5EdXJhdGlvbiA9IG5vZGUuc3RhZ2VEYXRhLkR1cmF0aW9uO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5QYXNzT25SdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5QYXNzT25SdWxlID0gbm9kZS5zdGFnZURhdGEuUGFzc09uUnVsZTtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5BY3RvclJ1bGUgPSBub2RlLnN0YWdlRGF0YS5BY3RvclJ1bGU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkFzc2lnbm1lbnRUeXBlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Bc3NpZ25tZW50VHlwZSA9IG5vZGUuc3RhZ2VEYXRhLkFzc2lnbm1lbnRUeXBlO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5NaW5Ob09mQWN0b3IgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLk1pbk5vT2ZBY3RvciA9IG5vZGUuc3RhZ2VEYXRhLk1pbk5vT2ZBY3RvcjtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNQYXJhbGxlbCA9IG5vZGUuc3RhZ2VEYXRhLklzUGFyYWxsZWw7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LlRhZ3MpIHVwZGF0ZWRTdGFnZS5UYWdzID0gbm9kZS5zdGFnZURhdGEuVGFncztcblxuICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGVzZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNFbnRyeVBvaW50ID0gbm9kZS5pc1N0YXJ0Tm9kZTtcbiAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Jc0V4aXRQb2ludCA9IG5vZGUuc3RhZ2VEYXRhPy5Jc0V4aXRQb2ludCB8fCBmYWxzZTtcbiAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Gb3JtID0gbm9kZS5zdGFnZURhdGE/LmZvcm1JZCB8fCAnJztcbiAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Db29yZGluYXRlcyA9IHsgWDogbm9kZS54LCBZOiBub2RlLnkgfTtcbiAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Td2ltTGFuZSA9IHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLmlkIHx8ICcnO1xuXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIk5PREVfVFlQRVwiLCBub2RlLnR5cGUpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgc3ViZmxvdyBzdGFnZVxuICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5Jc1N1YlByb2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuU3ViV29ya0Zsb3cgPSBub2RlLndvcmtmbG93RGF0YT8uaWQgfHwgJyc7XG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5OYW1lID0gbm9kZS53b3JrZmxvd0RhdGE/Lm5hbWUgfHwgJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCB0byBzdGFnZXNcbiAgICAgICAgICAgIHN0YWdlcy5wdXNoKHVwZGF0ZWRTdGFnZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzdGFnZVxuICAgICAgICAgICAgc3RhZ2VzLnB1c2goe1xuICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIC8vIGlkOiBub2RlLmlkLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBXb3JrZmxvdzogd29ya2Zsb3cuQ29kZSxcbiAgICAgICAgICAgICAgTmFtZTpcbiAgICAgICAgICAgICAgICAobm9kZS50eXBlID09PSAnc3ViZmxvdydcbiAgICAgICAgICAgICAgICAgID8gbm9kZS53b3JrZmxvd0RhdGE/Lm5hbWVcbiAgICAgICAgICAgICAgICAgIDogbm9kZS5zdGFnZURhdGE/Lk5hbWUpID8/ICcnLFxuICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogbm9kZS5zdGFnZURhdGE/LkRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICBEdXJhdGlvbjogbm9kZS5zdGFnZURhdGE/LkR1cmF0aW9uIHx8IDAsXG4gICAgICAgICAgICAgIFBhc3NPblJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgICAgICBBY3RvclJ1bGU6IG5vZGUuc3RhZ2VEYXRhPy5BY3RvclJ1bGUgfHwgU3RhZ2VBY3RvclJ1bGUuTm9uZSxcbiAgICAgICAgICAgICAgTWluTm9PZkFjdG9yOiBub2RlLnN0YWdlRGF0YT8uTWluTm9PZkFjdG9yIHx8IDAsXG4gICAgICAgICAgICAgIElzUGFyYWxsZWw6IG5vZGUuc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgICAgICBJc0VudHJ5UG9pbnQ6IG5vZGUuaXNTdGFydE5vZGUsXG4gICAgICAgICAgICAgIElzRXhpdFBvaW50OiBub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnQgfHwgZmFsc2UsIC8vIFdpbGwgYmUgdXBkYXRlZCBiZWxvd1xuICAgICAgICAgICAgICBUYWdzOiBub2RlLnN0YWdlRGF0YT8uVGFncyB8fCBbXSxcbiAgICAgICAgICAgICAgRm9ybTogbm9kZS5zdGFnZURhdGE/LmZvcm1JZCA/PyAnJyxcbiAgICAgICAgICAgICAgQWxsb3dNdWx0aVN1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICBBc3NpZ25tZW50VHlwZTpcbiAgICAgICAgICAgICAgICBub2RlLnN0YWdlRGF0YT8uQXNzaWdubWVudFR5cGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93Py5Bc3NpZ25tZW50VHlwZSB8fFxuICAgICAgICAgICAgICAgIFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgICAgICAgIFN1YldvcmtGbG93OiBub2RlLndvcmtmbG93RGF0YT8uaWQgfHwgJycsXG4gICAgICAgICAgICAgIFN3aW1MYW5lOiB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogbm9kZS54LCBZOiBub2RlLnkgfSxcbiAgICAgICAgICAgICAgSXNTdWJQcm9jZXNzOiBub2RlLnR5cGUgPT09ICdzdWJmbG93JyxcbiAgICAgICAgICAgICAgS2V5OiBub2RlLnN0YWdlRGF0YT8uS2V5IHx8IG5vZGUuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gLy8gRGV0ZXJtaW5lIHdoaWNoIHN0YWdlcyBhcmUgZXhpdCBwb2ludHMgKG5vIG91dGdvaW5nIGNvbm5lY3Rpb25zKVxuICAgIC8vIHN0YWdlcy5mb3JFYWNoKChzdGFnZSkgPT4ge1xuICAgIC8vICAgY29uc3QgaGFzT3V0Z29pbmdDb25uZWN0aW9ucyA9IHRoaXMuY29ubmVjdGlvbnMuc29tZShcbiAgICAvLyAgICAgKGNvbm4pID0+XG4gICAgLy8gICAgICAgY29ubi5zb3VyY2VOb2RlSWQgPT09IHN0YWdlLkNvZGUgfHwgY29ubi5zb3VyY2VOb2RlSWQgPT09IHN0YWdlLmlkXG4gICAgLy8gICApO1xuICAgIC8vICAgaWYgKCFoYXNPdXRnb2luZ0Nvbm5lY3Rpb25zKSB7XG4gICAgLy8gICAgIHN0YWdlLklzRXhpdFBvaW50ID0gdHJ1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9KTtcblxuICAgIC8vIFRyYW5zZm9ybSBjb25uZWN0aW9ucyB0byBXb3JrZmxvd0FjdGlvbltdXG4gICAgY29uc3QgYWN0aW9uczogV29ya2Zsb3dBY3Rpb25bXSA9IFtdO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucy5mb3JFYWNoKChjb25uKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VOb2RlID0gdGhpcy5maW5kTm9kZUJ5SWQoY29ubi5zb3VyY2VOb2RlSWQpPy5ub2RlO1xuICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4udGFyZ2V0Tm9kZUlkKT8ubm9kZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBleGlzdGluZyBhY3Rpb25cbiAgICAgIGlmICh0aGlzLmFjdGlvblJlY29yZFtjb25uLmlkXSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgYWN0aW9uIHdpdGggY2hhbmdlZCB2YWx1ZXNcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPSB0aGlzLmFjdGlvblJlY29yZFtjb25uLmlkXTtcblxuICAgICAgICAvLyBDcmVhdGUgdXBkYXRlZCBhY3Rpb24gd2l0aCBjaGFuZ2VkIHByb3BlcnRpZXNcbiAgICAgICAgY29uc3QgdXBkYXRlZEFjdGlvbjogV29ya2Zsb3dBY3Rpb24gPSB7XG4gICAgICAgICAgLi4uZXhpc3RpbmdBY3Rpb24sXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB0aGF0IG1heSBoYXZlIGNoYW5nZWRcbiAgICAgICAgdXBkYXRlZEFjdGlvbi5OYW1lID1cbiAgICAgICAgICBjb25uLmxhYmVsID8/XG4gICAgICAgICAgYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHt0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gICAgICAgICAgfWA7XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uT3BlcmF0aW9uQWN0aW9uID0gY29ubi5hY3Rpb247XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uSXNQYXJhbGxlbCA9IHRhcmdldE5vZGU/LnN0YWdlRGF0YT8uSXNQYXJhbGxlbCB8fCBmYWxzZTtcbiAgICAgICAgdXBkYXRlZEFjdGlvbi5QYXNzT25SdWxlID0gY29ubi5jb25kaXRpb24gfHwgJyc7XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uVGFyZ2V0U3RhdHVzID0gY29ubi50YXJnZXRTdGF0dXMgfHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyB1cGRhdGVkQWN0aW9uLlNvdXJjZVBvaW50VHlwZSA9IHRoaXMuZ2V0Q29ubmVjdGlvblBvaW50VHlwZShjb25uLnNvdXJjZVBvaW50SWQpO1xuICAgICAgICAvLyB1cGRhdGVkQWN0aW9uLlRhcmdldFBvaW50VHlwZSA9IHRoaXMuZ2V0Q29ubmVjdGlvblBvaW50VHlwZShjb25uLnRhcmdldFBvaW50SWQpO1xuXG4gICAgICAgIGFjdGlvbnMucHVzaCh1cGRhdGVkQWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhY3Rpb25cbiAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIC8vIGlkOiBjb25uLmlkLFxuICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBXb3JrZmxvdzogd29ya2Zsb3cuQ29kZSxcbiAgICAgICAgICBOYW1lOlxuICAgICAgICAgICAgY29ubi5sYWJlbCA/P1xuICAgICAgICAgICAgYEFjdGlvbiBmcm9tICR7c291cmNlTm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ30gdG8gJHt0YXJnZXROb2RlPy5zdGFnZURhdGE/Lk5hbWUgfHwgJ1Vua25vd24nXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICBPcGVyYXRpb25BY3Rpb246IGNvbm4uYWN0aW9uLFxuICAgICAgICAgIFRhcmdldFN0YXR1czogY29ubi50YXJnZXRTdGF0dXMsXG4gICAgICAgICAgRnJvbVN0YWdlOiBjb25uLnNvdXJjZU5vZGVJZCxcbiAgICAgICAgICBUb1N0YWdlOiBjb25uLnRhcmdldE5vZGVJZCxcbiAgICAgICAgICBJc1BhcmFsbGVsOiBzb3VyY2VOb2RlPy5zdGFnZURhdGE/LklzUGFyYWxsZWwgfHwgZmFsc2UsXG4gICAgICAgICAgUGFzc09uUnVsZTogY29ubi5jb25kaXRpb24gfHwgJycsXG4gICAgICAgICAgU291cmNlUG9pbnRUeXBlOiB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi5zb3VyY2VQb2ludElkKSxcbiAgICAgICAgICBUYXJnZXRQb2ludFR5cGU6IHRoaXMuZ2V0Q29ubmVjdGlvblBvaW50VHlwZShjb25uLnRhcmdldFBvaW50SWQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCBkZWxldGVkIG9iamVjdHMgd2l0aCBSZW1vdmVkIHN0YXRlXG4gICAgT2JqZWN0LmtleXModGhpcy5zdGFnZVJlY29yZCkuZm9yRWFjaCgoc3RhZ2VJZCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RzID0gc3RhZ2VzLnNvbWUoXG4gICAgICAgIChzdGFnZSkgPT4gc3RhZ2UuQ29kZSA9PT0gc3RhZ2VJZCB8fCBzdGFnZS5pZCA9PT0gc3RhZ2VJZFxuICAgICAgKTtcblxuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2UgPSB0aGlzLnN0YWdlUmVjb3JkW3N0YWdlSWRdO1xuICAgICAgICBzdGFnZXMucHVzaCh7XG4gICAgICAgICAgLi4uc3RhZ2UsXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5SZW1vdmVkLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmFjdGlvblJlY29yZCkuZm9yRWFjaCgoYWN0aW9uSWQpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGFjdGlvbnMuc29tZShcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLkNvZGUgPT09IGFjdGlvbklkIHx8IGFjdGlvbi5pZCA9PT0gYWN0aW9uSWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuYWN0aW9uUmVjb3JkW2FjdGlvbklkXTtcbiAgICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5SZW1vdmVkLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZGVsZXRlZCBzd2ltbGFuZXNcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN3aW1sYW5lUmVjb3JkKS5mb3JFYWNoKChsYW5lSWQpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHdvcmtmbG93LkxhbmVzLnNvbWUoXG4gICAgICAgIChsYW5lKSA9PiBsYW5lLkNvZGUgPT09IGxhbmVJZCB8fCBsYW5lLmlkID09PSBsYW5lSWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGxhbmUgPSB0aGlzLnN3aW1sYW5lUmVjb3JkW2xhbmVJZF07XG4gICAgICAgIHdvcmtmbG93LkxhbmVzLnB1c2goe1xuICAgICAgICAgIC4uLmxhbmUsXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5SZW1vdmVkLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3b3JrZmxvdy5TdGFnZXMgPSBzdGFnZXM7XG4gICAgd29ya2Zsb3cuQWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICByZXR1cm4gd29ya2Zsb3c7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uUG9pbnRUeXBlKFxuICAgIHBvaW50SWQ6IHN0cmluZ1xuICApOiAndG9wJyB8ICdyaWdodCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gRXh0cmFjdCB0aGUgdHlwZSBmcm9tIHRoZSBjb25uZWN0aW9uIHBvaW50IElEIGZvcm1hdFxuICAgIC8vIHdoaWNoIGlzIHVzdWFsbHkgc29tZXRoaW5nIGxpa2UgXCJub2RlLWlkLXRvcC01MFwiXG4gICAgY29uc3QgcGFydHMgPSBwb2ludElkLnNwbGl0KCctJyk7XG4gICAgY29uc3QgdHlwZUluZGV4ID0gcGFydHMuZmluZEluZGV4KFxuICAgICAgKHBhcnQpID0+XG4gICAgICAgIHBhcnQgPT09ICd0b3AnIHx8XG4gICAgICAgIHBhcnQgPT09ICdyaWdodCcgfHxcbiAgICAgICAgcGFydCA9PT0gJ2JvdHRvbScgfHxcbiAgICAgICAgcGFydCA9PT0gJ2xlZnQnXG4gICAgKTtcblxuICAgIGlmICh0eXBlSW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIHBhcnRzW3R5cGVJbmRleF0gYXMgJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFkZCBhIG5ldyBwcm9wZXJ0eSB0byB0cmFjayBsb2FkZWQgb2JqZWN0c1xuICBsb2FkZWRPYmplY3RJZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTsgLy8gRm9ybWF0OiB7IGlkOiBjb2RlIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gcmVnaXN0ZXIgbG9hZGVkIG9iamVjdHNcbiAgcmVnaXN0ZXJMb2FkZWRPYmplY3QoaWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkZWRPYmplY3RJZHNbaWRdID0gY29kZTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBjaGVjayBpZiBhbiBvYmplY3Qgd2FzIGxvYWRlZCBmcm9tIEFQSVxuICB3YXNMb2FkZWRGcm9tQXBpKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaWQgaW4gdGhpcy5sb2FkZWRPYmplY3RJZHM7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gZ2V0IHRoZSBjb2RlIGZvciBhIGxvYWRlZCBvYmplY3RcbiAgZ2V0Q29kZUZvck9iamVjdChpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkZWRPYmplY3RJZHNbaWRdIHx8ICcnO1xuICB9XG59XG4iXX0=
|
|
722
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFpQixrQkFBa0IsRUFBMkMsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFZcEssTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUMvQixXQUFXLEdBQWtCLElBQUksQ0FBQyxDQUFDLHVDQUF1QztJQUMxRSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsR0FPbEIsRUFBRSxDQUFDO0lBQ1AsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFDckMsZ0JBQWdCLEdBQWtCLElBQUksQ0FBQztJQUN2QyxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUVqQyxRQUFRLEdBQW9CLElBQUksQ0FBQztJQUNqQyxjQUFjLEdBQTZCLEVBQUUsQ0FBQztJQUM5QyxXQUFXLEdBQWtDLEVBQUUsQ0FBQztJQUNoRCxZQUFZLEdBQW1DLEVBQUUsQ0FBQztJQUVsRCxhQUFhLENBQUMsRUFBVTtRQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sZ0JBQWdCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFeEMsZUFBZSxHQUE2QjtRQUMzRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztRQUN2QyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSx1Q0FBdUM7UUFDNUQsMkNBQTJDO1FB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eUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUU7U0FDOUIsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdFQUFnRTtJQUN2RCxjQUFjLEdBQUcsR0FBRyxDQUFDO3dHQTUzQm5CLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSwgU3RhZ2VBY3RvclJ1bGUsIFN0YXR1cywgU3dpbUxhbmUsIFRhZywgVGFza0Fzc2lnbm1lbnRUeXBlLCBXb3JrZmxvdywgV29ya2Zsb3dBY3Rpb24sIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbixcbiAgQ29ubmVjdGlvblBvaW50LFxuICBOb2RlLFxuICBTd2ltbGFuZUl0ZW0sXG4gIFRvb2xUeXBlLFxufSBmcm9tICcuL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RGVzaWduZXJTdGF0ZSB7XG4gIHN3aW1sYW5lczogU3dpbWxhbmVJdGVtW10gPSBbXTtcbiAgc3RhcnROb2RlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgSUQgb2YgdGhlIGZpcnN0L3N0YXJ0IG5vZGVcbiAgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25bXSA9IFtdO1xuICBkcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhOiB7XG4gICAgc291cmNlUG9pbnQ/OiBDb25uZWN0aW9uUG9pbnQ7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleD86IG51bWJlcjtcbiAgICBzdGFydFg/OiBudW1iZXI7XG4gICAgc3RhcnRZPzogbnVtYmVyO1xuICAgIGN1cnJlbnRYPzogbnVtYmVyO1xuICAgIGN1cnJlbnRZPzogbnVtYmVyO1xuICB9ID0ge307XG4gIHdvcmtmbG93Rm9ybUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgd29ya2Zsb3dGb3JtTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHdvcmtmbG93SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHdvcmtmbG93OiBXb3JrZmxvdyB8IG51bGwgPSBudWxsO1xuICBzd2ltbGFuZVJlY29yZDogUmVjb3JkPHN0cmluZywgU3dpbUxhbmU+ID0ge307XG4gIHN0YWdlUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBXb3JrZmxvd1N0YWdlPiA9IHt9O1xuICBhY3Rpb25SZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdvcmtmbG93QWN0aW9uPiA9IHt9O1xuXG4gIHNldFdvcmtmbG93SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dJZCA9IGlkO1xuICB9XG5cbiAgcHVibGljIGxhbmVJZFRvSW5kZXhNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uUnVsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgICBzdGFnZTogWydzdGFnZScsICdkZWNpc2lvbicsICdzdWJmbG93J10sXG4gICAgZGVjaXNpb246IFsnc3RhZ2UnXSwgLy8gRGVjaXNpb25zIGNhbiBvbmx5IGNvbm5lY3QgdG8gU3RhZ2VzXG4gICAgLy8gJ2FjdGlvbic6IFsnc3RhZ2UnLCAnZm9ybScsICdkZWNpc2lvbiddLFxuICAgIGZvcm06IFtdLFxuICAgIHN1YmZsb3c6IFsnc3RhZ2UnLCAnZGVjaXNpb24nXSxcbiAgfTtcblxuICBzZXRXb3JrZmxvd0Zvcm0oZm9ybUlkOiBzdHJpbmcgfCBudWxsLCBmb3JtTmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMud29ya2Zsb3dGb3JtSWQgPSBmb3JtSWQ7XG4gICAgdGhpcy53b3JrZmxvd0Zvcm1OYW1lID0gZm9ybU5hbWU7XG4gICAgY29uc29sZS5sb2codGhpcy53b3JrZmxvd0Zvcm1JZCwgdGhpcy53b3JrZmxvd0Zvcm1OYW1lKTtcbiAgfVxuXG4gIGFkZFN3aW1sYW5lKG5hbWU6IHN0cmluZywgdGFnczogVGFnW10pIHtcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoaXMgc3dpbWxhbmVcbiAgICBjb25zdCBzd2ltbGFuZUtleSA9IGBsYW5lLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKFxuICAgICAgTWF0aC5yYW5kb20oKSAqIDEwMDBcbiAgICApfWA7XG5cbiAgICB0aGlzLnN3aW1sYW5lcyA9IHRoaXMuc3dpbWxhbmVzLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIG9yZGVyOiB0aGlzLnN3aW1sYW5lcy5sZW5ndGgsXG4gICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICB0YWdzLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGlkOiBzd2ltbGFuZUtleSwgLy8gU3RvcmUgdGhlIGdlbmVyYXRlZCBrZXkgYXMgaWQgZm9yIGZyb250ZW5kIHJlZmVyZW5jZVxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJlZ2lzdGVyTGFuZU1hcHBpbmcobGFuZUlkOiBzdHJpbmcsIHN3aW1sYW5lSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubGFuZUlkVG9JbmRleE1hcC5zZXQobGFuZUlkLCBzd2ltbGFuZUluZGV4KTtcbiAgfVxuXG4gIC8vIEFkZCB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgYSBub2RlXG4gIGdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlOiBOb2RlKTogQ29ubmVjdGlvblBvaW50W10ge1xuICAgIGNvbnN0IHBvaW50czogQ29ubmVjdGlvblBvaW50W10gPSBbXTtcbiAgICBjb25zdCBzcGFjaW5nID0gNTA7IC8vIFNwYWNlIGJldHdlZW4gY29ubmVjdGlvbiBwb2ludHNcblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdzdGFnZScpIHtcbiAgICAgIC8vIFJlY3Rhbmd1bGFyIHNoYXBlcyAtIGFkZCBwb2ludHMgYXJvdW5kIHRoZSByZWN0YW5nbGVcblxuICAgICAgLy8gVG9wIGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB4ID0gc3BhY2luZzsgeCA8IG5vZGUud2lkdGg7IHggKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXRvcC0ke3h9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogeCxcbiAgICAgICAgICB5OiAwLFxuICAgICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmlnaHQgZWRnZSBwb2ludHNcbiAgICAgIGZvciAobGV0IHkgPSBzcGFjaW5nOyB5IDwgbm9kZS5oZWlnaHQ7IHkgKz0gc3BhY2luZykge1xuICAgICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ3JpZ2h0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEJvdHRvbSBlZGdlIHBvaW50c1xuICAgICAgZm9yIChsZXQgeCA9IHNwYWNpbmc7IHggPCBub2RlLndpZHRoOyB4ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1ib3R0b20tJHt4fWAsXG4gICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWZ0IGVkZ2UgcG9pbnRzXG4gICAgICBmb3IgKGxldCB5ID0gc3BhY2luZzsgeSA8IG5vZGUuaGVpZ2h0OyB5ICs9IHNwYWNpbmcpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LSR7eX1gLFxuICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICB4OiAwLFxuICAgICAgICAgIHk6IHksXG4gICAgICAgICAgdHlwZTogJ2xlZnQnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ2RlY2lzaW9uJykge1xuICAgICAgLy8gRGlhbW9uZCBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIGZvdXIgY29ybmVyc1xuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tdG9wLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiAwLFxuICAgICAgICB0eXBlOiAndG9wJyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1yaWdodC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdyaWdodCcsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tYm90dG9tLTBgLFxuICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgIHg6IG5vZGUud2lkdGggLyAyLFxuICAgICAgICB5OiBub2RlLmhlaWdodCxcbiAgICAgICAgdHlwZTogJ2JvdHRvbScsXG4gICAgICB9KTtcblxuICAgICAgcG9pbnRzLnB1c2goe1xuICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiBub2RlLmhlaWdodCAvIDIsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSAnZm9ybScpIHtcbiAgICAgIC8vIEZvcm0gb25seSBoYXMgaW5wdXQgY29ubmVjdGlvbiBwb2ludHMsIG5vIG91dHB1dCBwb2ludHNcblxuICAgICAgLy8gTGVmdCBlZGdlIHBvaW50cyAoZm9yIGlucHV0IGNvbm5lY3Rpb25zKVxuICAgICAgZm9yIChsZXQgeSA9IHNwYWNpbmc7IHkgPCBub2RlLmhlaWdodDsgeSArPSBzcGFjaW5nKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBpZDogYCR7bm9kZS5pZH0tbGVmdC0ke3l9YCxcbiAgICAgICAgICBub2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiB5LFxuICAgICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgLy8gSGV4YWdvbiBzaGFwZSAtIGFkZCBwb2ludHMgYXQgdGhlIHNpeCBjb3JuZXJzXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS10b3AtMGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCAvIDIsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHR5cGU6ICd0b3AnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LXJpZ2h0LWJvdHRvbWAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogbm9kZS53aWR0aCxcbiAgICAgICAgeTogKG5vZGUuaGVpZ2h0ICogMykgLyA0LFxuICAgICAgICB0eXBlOiAncmlnaHQnLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWJvdHRvbS0wYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiBub2RlLndpZHRoIC8gMixcbiAgICAgICAgeTogbm9kZS5oZWlnaHQsXG4gICAgICAgIHR5cGU6ICdib3R0b20nLFxuICAgICAgfSk7XG5cbiAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgaWQ6IGAke25vZGUuaWR9LWxlZnQtYm90dG9tYCxcbiAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAobm9kZS5oZWlnaHQgKiAzKSAvIDQsXG4gICAgICAgIHR5cGU6ICdsZWZ0JyxcbiAgICAgIH0pO1xuXG4gICAgICBwb2ludHMucHVzaCh7XG4gICAgICAgIGlkOiBgJHtub2RlLmlkfS1sZWZ0LXRvcGAsXG4gICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogbm9kZS5oZWlnaHQgLyA0LFxuICAgICAgICB0eXBlOiAnbGVmdCcsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG5cbiAgYWRkTm9kZShcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgdHlwZTogVG9vbFR5cGUsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBzdGFnZURhdGE/OiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+LFxuICAgIHdvcmtmbG93RGF0YT86IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0sXG4gICAgdXNlRXhpc3RpbmdJZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XSB8fFxuICAgICAgIXR5cGUgfHxcbiAgICAgICh0eXBlICE9PSAnc3RhZ2UnICYmXG4gICAgICAgIHR5cGUgIT09ICdkZWNpc2lvbicgJiZcbiAgICAgICAgdHlwZSAhPT0gJ2Zvcm0nICYmXG4gICAgICAgIHR5cGUgIT09ICdzdWJmbG93JylcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEFkanVzdCBwb3NpdGlvbiByZWxhdGl2ZSB0byBzd2ltbGFuZVxuICAgIGNvbnN0IGFkanVzdGVkWSA9IHkgLSBzd2ltbGFuZUluZGV4ICogMjYzOyAvLyBTdWJ0cmFjdGluZyBoZWFkZXIgaGVpZ2h0XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBJRCBvciB1c2UgZXhpc3RpbmdcbiAgICBjb25zdCBpZCA9XG4gICAgICB1c2VFeGlzdGluZ0lkICYmIHN0YWdlRGF0YT8uQ29kZVxuICAgICAgICA/IHN0YWdlRGF0YS5Db2RlXG4gICAgICAgIDogYCR7dHlwZX0tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWA7XG5cbiAgICAvLyBDcmVhdGUgbm9kZSB3aXRoIGRpbWVuc2lvbnMgYmFzZWQgb24gdHlwZVxuICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICBpZCxcbiAgICAgIHR5cGUsXG4gICAgICB4LFxuICAgICAgeTogYWRqdXN0ZWRZLFxuICAgICAgd2lkdGg6IHR5cGUgPT09ICdzdWJmbG93JyA/IDE1MCA6IDE2OSwgLy8gV2lkdGggZnJvbSBTVkdcbiAgICAgIGhlaWdodDogMTAwLCAvLyBIZWlnaHQgZnJvbSBTVkdcbiAgICAgIGlzU3RhcnROb2RlOiBmYWxzZSwgLy8gRGVmYXVsdCB0byBmYWxzZVxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEgfHwge30sIC8vIFN0b3JlIHN0YWdlIGRhdGFcbiAgICAgIHdvcmtmbG93RGF0YTogd29ya2Zsb3dEYXRhIHx8IG51bGwsXG4gICAgfTtcblxuICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGVudGlyZSB3b3JrZmxvdywgbWFyayBpdCBhcyB0aGUgc3RhcnQgbm9kZVxuICAgIGlmICh0aGlzLmdldE5vZGVDb3VudCgpID09PSAwKSB7XG4gICAgICBub2RlLmlzU3RhcnROb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhcnROb2RlSWQgPSBpZDtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50cyBmb3IgdGhlIG5vZGVcbiAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgPSB0aGlzLmdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlKTtcblxuICAgIC8vIEFkZCBub2RlIHRvIHRoZSBzd2ltbGFuZVxuICAgIGlmICghdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMpIHtcbiAgICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzID0gW107XG4gICAgfVxuICAgIHRoaXMuc3dpbWxhbmVzW3N3aW1sYW5lSW5kZXhdLm5vZGVzLnB1c2gobm9kZSk7XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8vIEhlbHBlciB0byBnZXQgdG90YWwgbm9kZSBjb3VudCBhY3Jvc3MgYWxsIHN3aW1sYW5lc1xuICBnZXROb2RlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zd2ltbGFuZXMucmVkdWNlKFxuICAgICAgKGNvdW50LCBzd2ltbGFuZSkgPT4gY291bnQgKyAoc3dpbWxhbmUubm9kZXM/Lmxlbmd0aCB8fCAwKSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgLy8gRmluZCBhIG5vZGUgYnkgSUQgKHVzZWZ1bCBmb3IgbGF0ZXIgb3BlcmF0aW9ucylcbiAgZmluZE5vZGVCeUlkKGlkOiBzdHJpbmcpOiB7IG5vZGU6IE5vZGU7IHN3aW1sYW5lSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN3aW1sYW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc3dpbWxhbmUgPSB0aGlzLnN3aW1sYW5lc1tpXTtcbiAgICAgIGNvbnN0IG5vZGUgPSBzd2ltbGFuZS5ub2Rlcz8uZmluZCgobikgPT4gbi5pZCA9PT0gaWQpO1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHsgbm9kZSwgc3dpbWxhbmVJbmRleDogaSB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIEZpbmQgYSBub2RlIGJ5IElEICh1c2VmdWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMpXG4gIGZpbmRBY3Rpb25CeUlkKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGNvbm5lY3Rpb25JZCkgPz8gbnVsbDtcbiAgfVxuXG4gIHN0YXJ0Q29ubmVjdGlvbkRyYWcoXG4gICAgcG9pbnQ6IENvbm5lY3Rpb25Qb2ludCxcbiAgICBzd2ltbGFuZUluZGV4OiBudW1iZXIsXG4gICAgZ2xvYmFsWDogbnVtYmVyLFxuICAgIGdsb2JhbFk6IG51bWJlclxuICApIHtcbiAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEgPSB7XG4gICAgICBzb3VyY2VQb2ludDogcG9pbnQsXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzd2ltbGFuZUluZGV4LFxuICAgICAgc3RhcnRYOiBnbG9iYWxYLFxuICAgICAgc3RhcnRZOiBnbG9iYWxZLFxuICAgICAgY3VycmVudFg6IGdsb2JhbFgsXG4gICAgICBjdXJyZW50WTogZ2xvYmFsWSxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbkRyYWcoY3VycmVudFg6IG51bWJlciwgY3VycmVudFk6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5jdXJyZW50WCA9IGN1cnJlbnRYO1xuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLmN1cnJlbnRZID0gY3VycmVudFk7XG4gICAgfVxuICB9XG5cbiAgZW5kQ29ubmVjdGlvbkRyYWcoKSB7XG4gICAgY29uc29sZS5sb2coJ0VuZGluZyBjb25uZWN0aW9uIGRyYWcsIGNsZWFyaW5nIGRhdGEnKTtcbiAgICAvLyBDbGVhciBkcmFnZ2luZyBkYXRhXG4gICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhID0ge307XG4gIH1cblxuICBpc0Nvbm5lY3Rpb25EcmFnZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQ7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uUGF0aERhdGEoKToge1xuICAgIHN0YXJ0WDogbnVtYmVyO1xuICAgIHN0YXJ0WTogbnVtYmVyO1xuICAgIGVuZFg6IG51bWJlcjtcbiAgICBlbmRZOiBudW1iZXI7XG4gICAgc291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyO1xuICB9IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgeyBzb3VyY2VQb2ludCwgc291cmNlU3dpbWxhbmVJbmRleCwgY3VycmVudFgsIGN1cnJlbnRZIH0gPVxuICAgICAgdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChzb3VyY2VQb2ludC5ub2RlSWQpPy5ub2RlO1xuXG4gICAgaWYgKCFub2RlIHx8IHNvdXJjZVN3aW1sYW5lSW5kZXggPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBDYWxjdWxhdGUgc3RhcnQgcG9pbnQgaW4gZ2xvYmFsIGNvb3JkaW5hdGVzXG4gICAgY29uc3Qgc3RhcnRYID0gbm9kZS54ICsgc291cmNlUG9pbnQueDtcbiAgICBjb25zdCBzdGFydFkgPSBub2RlLnkgKyBzb3VyY2VQb2ludC55ICsgc291cmNlU3dpbWxhbmVJbmRleCAqIDI2MzsgLy8gQWRkIHN3aW1sYW5lIG9mZnNldFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0WCxcbiAgICAgIHN0YXJ0WSxcbiAgICAgIGVuZFg6IGN1cnJlbnRYID8/IHN0YXJ0WCxcbiAgICAgIGVuZFk6IGN1cnJlbnRZID8/IHN0YXJ0WSxcbiAgICAgIHNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZUNvbm5lY3Rpb24oXG4gICAgdGFyZ2V0Tm9kZUlkOiBzdHJpbmcsXG4gICAgdGFyZ2V0UG9pbnRJZDogc3RyaW5nLFxuICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IG51bWJlclxuICApOiBDb25uZWN0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgeyBzb3VyY2VQb2ludCwgc291cmNlU3dpbWxhbmVJbmRleCB9ID0gdGhpcy5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhO1xuXG4gICAgaWYgKCFzb3VyY2VQb2ludCB8fCBzb3VyY2VTd2ltbGFuZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pc3Npbmcgc291cmNlIGRhdGEgZm9yIGNvbm5lY3Rpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3Rpb246IENvbm5lY3Rpb24gPSB7XG4gICAgICBpZDogYGNvbm4tJHtEYXRlLm5vdygpfS0ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDApfWAsXG4gICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgIHRhcmdldE5vZGVJZDogdGFyZ2V0Tm9kZUlkLFxuICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludElkLFxuICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlU3dpbWxhbmVJbmRleCxcbiAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBhY3Rpb246IG51bGwsXG4gICAgfTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ0Nvbm5lY3Rpb25zIGFycmF5IG5vdyBoYXMnLFxuICAgICAgdGhpcy5jb25uZWN0aW9ucy5sZW5ndGgsXG4gICAgICAnY29ubmVjdGlvbnMnXG4gICAgKTtcbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBnZXQgY29ubmVjdGlvbiBkYXRhIGZvciByZW5kZXJpbmdcbiAgZ2V0Q29ubmVjdGlvbkRhdGEoY29ubmVjdGlvbjogQ29ubmVjdGlvbik6IHtcbiAgICBzdGFydFg6IG51bWJlcjtcbiAgICBzdGFydFk6IG51bWJlcjtcbiAgICBlbmRYOiBudW1iZXI7XG4gICAgZW5kWTogbnVtYmVyO1xuICAgIHNvdXJjZVN3aW1sYW5lSW5kZXg6IG51bWJlcjtcbiAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBudW1iZXI7XG4gIH0gfCBudWxsIHtcbiAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24uc291cmNlTm9kZUlkKTtcbiAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm5lY3Rpb24udGFyZ2V0Tm9kZUlkKTtcblxuICAgIGlmICghc291cmNlTm9kZUluZm8gfHwgIXRhcmdldE5vZGVJbmZvKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0Tm9kZUluZm8ubm9kZTtcblxuICAgIC8vIEZpbmQgY29ubmVjdGlvbiBwb2ludHNcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgIChwKSA9PiBwLmlkID09PSBjb25uZWN0aW9uLnNvdXJjZVBvaW50SWRcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgKHApID0+IHAuaWQgPT09IGNvbm5lY3Rpb24udGFyZ2V0UG9pbnRJZFxuICAgICk7XG5cbiAgICBpZiAoIXNvdXJjZVBvaW50IHx8ICF0YXJnZXRQb2ludCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIGdsb2JhbCBjb29yZGluYXRlc1xuICAgIGNvbnN0IHN0YXJ0WCA9IHNvdXJjZU5vZGUueCArIHNvdXJjZVBvaW50Lng7XG4gICAgY29uc3Qgc3RhcnRZID1cbiAgICAgIHNvdXJjZU5vZGUueSArIHNvdXJjZVBvaW50LnkgKyBjb25uZWN0aW9uLnNvdXJjZVN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICBjb25zdCBlbmRYID0gdGFyZ2V0Tm9kZS54ICsgdGFyZ2V0UG9pbnQueDtcbiAgICBjb25zdCBlbmRZID1cbiAgICAgIHRhcmdldE5vZGUueSArIHRhcmdldFBvaW50LnkgKyBjb25uZWN0aW9uLnRhcmdldFN3aW1sYW5lSW5kZXggKiAyNjM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnRYLFxuICAgICAgc3RhcnRZLFxuICAgICAgZW5kWCxcbiAgICAgIGVuZFksXG4gICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBjb25uZWN0aW9uLnNvdXJjZVN3aW1sYW5lSW5kZXgsXG4gICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiBjb25uZWN0aW9uLnRhcmdldFN3aW1sYW5lSW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIC8vIEFkZCBhIG1ldGhvZCB0byBjaGVjayBpZiBhIGNvbm5lY3Rpb24gaXMgYWxsb3dlZCBiYXNlZCBvbiBub2RlIHR5cGVzXG4gIGNhbkNvbm5lY3Qoc291cmNlTm9kZVR5cGU6IHN0cmluZywgdGFyZ2V0Tm9kZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbm5lY3Rpb25SdWxlc1tzb3VyY2VOb2RlVHlwZV0/LmluY2x1ZGVzKHRhcmdldE5vZGVUeXBlKSB8fCBmYWxzZVxuICAgICk7XG4gIH1cblxuICAvLyBBZGQgYSBtZXRob2QgdG8gZ2V0IGFsbG93ZWQgbm9kZSB0eXBlcyBmb3IgdGhlIGN1cnJlbnQgZHJhZ2dpbmcgY29ubmVjdGlvblxuICBnZXRBbGxvd2VkVGFyZ2V0Tm9kZVR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5maW5kTm9kZUJ5SWQoXG4gICAgICB0aGlzLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnQubm9kZUlkXG4gICAgKTtcbiAgICBpZiAoIXNvdXJjZU5vZGVJbmZvKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlTm9kZVR5cGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlLnR5cGU7XG5cbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uUnVsZXNbc291cmNlTm9kZVR5cGVdIHx8IFtdO1xuICB9XG5cbiAgdXBkYXRlU3dpbWxhbmUoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nLCB0YWdzOiBUYWdbXSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1N0YXRlOiBVcGRhdGluZyBzd2ltbGFuZSBhdCBpbmRleCcsXG4gICAgICBpbmRleCxcbiAgICAgICd3aXRoIG5hbWUnLFxuICAgICAgbmFtZSxcbiAgICAgICdhbmQgdGFncycsXG4gICAgICB0YWdzXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN3aW1sYW5lc1tpbmRleF0gPSB7XG4gICAgICAgIC4uLnRoaXMuc3dpbWxhbmVzW2luZGV4XSxcbiAgICAgICAgbGFiZWw6IG5hbWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ1N3aW1sYW5lIHVwZGF0ZWQ6JywgdGhpcy5zd2ltbGFuZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBzd2ltbGFuZSBpbmRleDonLCBpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk6IFdvcmtmbG93IHtcbiAgICAvLyBVc2Ugc3RvcmVkIHdvcmtmbG93IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB0aGlzLndvcmtmbG93XG4gICAgICA/IHsgLi4udGhpcy53b3JrZmxvdywgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkIH1cbiAgICAgIDoge1xuICAgICAgICAvLyBCYXNlTW9kZWwgcHJvcGVydGllc1xuICAgICAgICBJZDogJycsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiB0aGlzLndhc0xvYWRlZEZyb21BcGkodGhpcy53b3JrZmxvd0lkIHx8ICcnKVxuICAgICAgICAgID8gT2JqZWN0U3RhdGUuQ2hhbmdlZFxuICAgICAgICAgIDogT2JqZWN0U3RhdGUuTmV3LFxuXG4gICAgICAgIC8vIFdvcmtmbG93IHNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgICAgTmFtZTogJ05ldyBXb3JrZmxvdycsXG4gICAgICAgIERlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgU3RhZ2VFbnRyeVJ1bGU6ICcnLFxuICAgICAgICBGb3JtOiB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgQXNzaWdubWVudFR5cGU6IFRhc2tBc3NpZ25tZW50VHlwZS5BdXRvUm91dGUsXG4gICAgICAgIE9wZXJhdGlvbjogJycsXG4gICAgICAgIFN0YXR1czogU3RhdHVzLkFjdGl2ZSxcbiAgICAgICAgQWN0aW9uczogW10sXG4gICAgICAgIExhbmVzOiBbXSxcbiAgICAgICAgU3RhZ2VzOiBbXSxcbiAgICAgIH07XG5cbiAgICAvLyBVcGRhdGUgd29ya2Zsb3cgZm9ybSBpZiBjaGFuZ2VkXG4gICAgaWYgKHRoaXMud29ya2Zsb3dGb3JtSWQgIT09IHRoaXMud29ya2Zsb3c/LkZvcm0pIHtcbiAgICAgIHdvcmtmbG93LkZvcm0gPSB0aGlzLndvcmtmbG93Rm9ybUlkIHx8IHdvcmtmbG93LkZvcm07XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIHN3aW1sYW5lcyB0byBTd2ltTGFuZVtdXG4gICAgd29ya2Zsb3cuTGFuZXMgPSB0aGlzLnN3aW1sYW5lcy5tYXAoKHN3aW1sYW5lKSA9PiB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4aXN0aW5nIHN3aW1sYW5lXG4gICAgICBpZiAoc3dpbWxhbmUuaWQgJiYgdGhpcy5zd2ltbGFuZVJlY29yZFtzd2ltbGFuZS5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGxhbmUgd2l0aCBjaGFuZ2VkIHZhbHVlc1xuICAgICAgICBjb25zdCBleGlzdGluZ0xhbmUgPSB0aGlzLnN3aW1sYW5lUmVjb3JkW3N3aW1sYW5lLmlkXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5leGlzdGluZ0xhbmUsXG4gICAgICAgICAgTmFtZTogc3dpbWxhbmUubGFiZWwsXG4gICAgICAgICAgVGFnczogc3dpbWxhbmUudGFncyxcbiAgICAgICAgICBQb3NpdGlvbjogc3dpbWxhbmUub3JkZXIsXG4gICAgICAgICAgQ29vcmRpbmF0ZXM6IHsgWDogMCwgWTogc3dpbWxhbmUub3JkZXIgKiAyNjMgfSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLkNoYW5nZWQsXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBuZXcgSUQgZm9yIG5ldyBzd2ltbGFuZXMgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGNvbnN0IGxhbmVJZCA9XG4gICAgICAgICAgc3dpbWxhbmUuaWQgfHxcbiAgICAgICAgICBgbGFuZS0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YDtcblxuICAgICAgICAvLyBDcmVhdGUgbmV3IGxhbmVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIC8vIGlkOiBsYW5lSWQsXG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgIFdvcmtmbG93OiB3b3JrZmxvdy5Db2RlLFxuICAgICAgICAgIE5hbWU6IHN3aW1sYW5lLmxhYmVsLFxuICAgICAgICAgIFRhZ3M6IHN3aW1sYW5lLnRhZ3MgfHwgW10sXG4gICAgICAgICAgUG9zaXRpb246IHN3aW1sYW5lLm9yZGVyLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IHN3aW1sYW5lLm9yZGVyICogMjYzIH0sXG4gICAgICAgICAgU2l6ZTogeyBXaWR0aDogMzAwMCwgSGVpZ2h0OiAyNjMgfSxcbiAgICAgICAgICBLZXk6IHN3aW1sYW5lLmlkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVHJhbnNmb3JtIG5vZGVzIHRvIFdvcmtmbG93U3RhZ2VbXVxuICAgIGNvbnN0IHN0YWdlczogV29ya2Zsb3dTdGFnZVtdID0gW107XG5cbiAgICB0aGlzLnN3aW1sYW5lcy5mb3JFYWNoKChzd2ltbGFuZSwgc3dpbWxhbmVJbmRleCkgPT4ge1xuICAgICAgc3dpbWxhbmUubm9kZXM/LmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ3N0YWdlJyB8fCBub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3Rpbmcgc3RhZ2VcbiAgICAgICAgICBpZiAodGhpcy5zdGFnZVJlY29yZFtub2RlLmlkXSkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHN0YWdlIHdpdGggY2hhbmdlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3RhZ2UgPSB0aGlzLnN0YWdlUmVjb3JkW25vZGUuaWRdO1xuXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkU3RhZ2U6IFdvcmtmbG93U3RhZ2UgPSB7XG4gICAgICAgICAgICAgIC4uLmV4aXN0aW5nU3RhZ2UsXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/Lk5hbWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLk5hbWUgPVxuICAgICAgICAgICAgICAgIG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lID8/IG5vZGUuc3RhZ2VEYXRhLk5hbWU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5EZXNjcmlwdGlvbiA9IG5vZGUuc3RhZ2VEYXRhLkRlc2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRHVyYXRpb24gPSBub2RlLnN0YWdlRGF0YS5EdXJhdGlvbjtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuUGFzc09uUnVsZSA9IG5vZGUuc3RhZ2VEYXRhLlBhc3NPblJ1bGU7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LkFjdG9yUnVsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQWN0b3JSdWxlID0gbm9kZS5zdGFnZURhdGEuQWN0b3JSdWxlO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5Bc3NpZ25tZW50VHlwZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQXNzaWdubWVudFR5cGUgPSBub2RlLnN0YWdlRGF0YS5Bc3NpZ25tZW50VHlwZTtcbiAgICAgICAgICAgIGlmIChub2RlLnN0YWdlRGF0YT8uTWluTm9PZkFjdG9yICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIHVwZGF0ZWRTdGFnZS5NaW5Ob09mQWN0b3IgPSBub2RlLnN0YWdlRGF0YS5NaW5Ob09mQWN0b3I7XG4gICAgICAgICAgICBpZiAobm9kZS5zdGFnZURhdGE/LklzUGFyYWxsZWwgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzUGFyYWxsZWwgPSBub2RlLnN0YWdlRGF0YS5Jc1BhcmFsbGVsO1xuICAgICAgICAgICAgaWYgKG5vZGUuc3RhZ2VEYXRhPy5UYWdzKSB1cGRhdGVkU3RhZ2UuVGFncyA9IG5vZGUuc3RhZ2VEYXRhLlRhZ3M7XG5cbiAgICAgICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlc2UgcHJvcGVydGllc1xuICAgICAgICAgICAgdXBkYXRlZFN0YWdlLklzRW50cnlQb2ludCA9IG5vZGUuaXNTdGFydE5vZGU7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNFeGl0UG9pbnQgPSBub2RlLnN0YWdlRGF0YT8uSXNFeGl0UG9pbnQgfHwgZmFsc2U7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuRm9ybSA9IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgfHwgJyc7XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuQ29vcmRpbmF0ZXMgPSB7IFg6IG5vZGUueCwgWTogbm9kZS55IH07XG4gICAgICAgICAgICB1cGRhdGVkU3RhZ2UuU3dpbUxhbmUgPSB0aGlzLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5pZCB8fCAnJztcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJOT0RFX1RZUEVcIiwgbm9kZS50eXBlKTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIHN1YmZsb3cgc3RhZ2VcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdzdWJmbG93Jykge1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuSXNTdWJQcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdXBkYXRlZFN0YWdlLlN1YldvcmtGbG93ID0gbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnO1xuICAgICAgICAgICAgICB1cGRhdGVkU3RhZ2UuTmFtZSA9IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lIHx8ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBZGQgdG8gc3RhZ2VzXG4gICAgICAgICAgICBzdGFnZXMucHVzaCh1cGRhdGVkU3RhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgc3RhZ2VcbiAgICAgICAgICAgIHN0YWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgICAvLyBpZDogbm9kZS5pZCxcbiAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgICAgIE5hbWU6XG4gICAgICAgICAgICAgICAgKG5vZGUudHlwZSA9PT0gJ3N1YmZsb3cnXG4gICAgICAgICAgICAgICAgICA/IG5vZGUud29ya2Zsb3dEYXRhPy5uYW1lXG4gICAgICAgICAgICAgICAgICA6IG5vZGUuc3RhZ2VEYXRhPy5OYW1lKSA/PyAnJyxcbiAgICAgICAgICAgICAgRGVzY3JpcHRpb246IG5vZGUuc3RhZ2VEYXRhPy5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgRHVyYXRpb246IG5vZGUuc3RhZ2VEYXRhPy5EdXJhdGlvbiB8fCAwLFxuICAgICAgICAgICAgICBQYXNzT25SdWxlOiBub2RlLnN0YWdlRGF0YT8uUGFzc09uUnVsZSB8fCAnJyxcbiAgICAgICAgICAgICAgQWN0b3JSdWxlOiBub2RlLnN0YWdlRGF0YT8uQWN0b3JSdWxlIHx8IFN0YWdlQWN0b3JSdWxlLk5vbmUsXG4gICAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogbm9kZS5zdGFnZURhdGE/Lk1pbk5vT2ZBY3RvciB8fCAwLFxuICAgICAgICAgICAgICBJc1BhcmFsbGVsOiBub2RlLnN0YWdlRGF0YT8uSXNQYXJhbGxlbCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgSXNFbnRyeVBvaW50OiBub2RlLmlzU3RhcnROb2RlLFxuICAgICAgICAgICAgICBJc0V4aXRQb2ludDogbm9kZS5zdGFnZURhdGE/LklzRXhpdFBvaW50IHx8IGZhbHNlLCAvLyBXaWxsIGJlIHVwZGF0ZWQgYmVsb3dcbiAgICAgICAgICAgICAgVGFnczogbm9kZS5zdGFnZURhdGE/LlRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIEZvcm06IG5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPz8gJycsXG4gICAgICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6XG4gICAgICAgICAgICAgICAgbm9kZS5zdGFnZURhdGE/LkFzc2lnbm1lbnRUeXBlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvdz8uQXNzaWdubWVudFR5cGUgfHxcbiAgICAgICAgICAgICAgICBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgICAgICAgICBTdWJXb3JrRmxvdzogbm9kZS53b3JrZmxvd0RhdGE/LmlkIHx8ICcnLFxuICAgICAgICAgICAgICBTd2ltTGFuZTogdGhpcy5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0uaWQgfHwgJycsXG4gICAgICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IG5vZGUueCwgWTogbm9kZS55IH0sXG4gICAgICAgICAgICAgIElzU3ViUHJvY2Vzczogbm9kZS50eXBlID09PSAnc3ViZmxvdycsXG4gICAgICAgICAgICAgIEtleTogbm9kZS5zdGFnZURhdGE/LktleSB8fCBub2RlLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIC8vIERldGVybWluZSB3aGljaCBzdGFnZXMgYXJlIGV4aXQgcG9pbnRzIChubyBvdXRnb2luZyBjb25uZWN0aW9ucylcbiAgICAvLyBzdGFnZXMuZm9yRWFjaCgoc3RhZ2UpID0+IHtcbiAgICAvLyAgIGNvbnN0IGhhc091dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLmNvbm5lY3Rpb25zLnNvbWUoXG4gICAgLy8gICAgIChjb25uKSA9PlxuICAgIC8vICAgICAgIGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5Db2RlIHx8IGNvbm4uc291cmNlTm9kZUlkID09PSBzdGFnZS5pZFxuICAgIC8vICAgKTtcbiAgICAvLyAgIGlmICghaGFzT3V0Z29pbmdDb25uZWN0aW9ucykge1xuICAgIC8vICAgICBzdGFnZS5Jc0V4aXRQb2ludCA9IHRydWU7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gY29ubmVjdGlvbnMgdG8gV29ya2Zsb3dBY3Rpb25bXVxuICAgIGNvbnN0IGFjdGlvbnM6IFdvcmtmbG93QWN0aW9uW10gPSBbXTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubikgPT4ge1xuICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKGNvbm4uc291cmNlTm9kZUlkKT8ubm9kZTtcbiAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCk/Lm5vZGU7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXhpc3RpbmcgYWN0aW9uXG4gICAgICBpZiAodGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF0pIHtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGFjdGlvbiB3aXRoIGNoYW5nZWQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID0gdGhpcy5hY3Rpb25SZWNvcmRbY29ubi5pZF07XG5cbiAgICAgICAgLy8gQ3JlYXRlIHVwZGF0ZWQgYWN0aW9uIHdpdGggY2hhbmdlZCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBY3Rpb246IFdvcmtmbG93QWN0aW9uID0ge1xuICAgICAgICAgIC4uLmV4aXN0aW5nQWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuQ2hhbmdlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uTmFtZSA9XG4gICAgICAgICAgY29ubi5sYWJlbCA/P1xuICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgIH1gO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLk9wZXJhdGlvbkFjdGlvbiA9IGNvbm4uYWN0aW9uO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLklzUGFyYWxsZWwgPSB0YXJnZXROb2RlPy5zdGFnZURhdGE/LklzUGFyYWxsZWwgfHwgZmFsc2U7XG4gICAgICAgIHVwZGF0ZWRBY3Rpb24uUGFzc09uUnVsZSA9IGNvbm4uY29uZGl0aW9uIHx8ICcnO1xuICAgICAgICB1cGRhdGVkQWN0aW9uLlRhcmdldFN0YXR1cyA9IGNvbm4udGFyZ2V0U3RhdHVzIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5Tb3VyY2VQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi5zb3VyY2VQb2ludElkKTtcbiAgICAgICAgLy8gdXBkYXRlZEFjdGlvbi5UYXJnZXRQb2ludFR5cGUgPSB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKTtcblxuICAgICAgICBhY3Rpb25zLnB1c2godXBkYXRlZEFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYWN0aW9uXG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAvLyBpZDogY29ubi5pZCxcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgV29ya2Zsb3c6IHdvcmtmbG93LkNvZGUsXG4gICAgICAgICAgTmFtZTpcbiAgICAgICAgICAgIGNvbm4ubGFiZWwgPz9cbiAgICAgICAgICAgIGBBY3Rpb24gZnJvbSAke3NvdXJjZU5vZGU/LnN0YWdlRGF0YT8uTmFtZSB8fCAnVW5rbm93bid9IHRvICR7dGFyZ2V0Tm9kZT8uc3RhZ2VEYXRhPy5OYW1lIHx8ICdVbmtub3duJ1xuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgT3BlcmF0aW9uQWN0aW9uOiBjb25uLmFjdGlvbixcbiAgICAgICAgICBUYXJnZXRTdGF0dXM6IGNvbm4udGFyZ2V0U3RhdHVzLFxuICAgICAgICAgIEZyb21TdGFnZTogY29ubi5zb3VyY2VOb2RlSWQsXG4gICAgICAgICAgVG9TdGFnZTogY29ubi50YXJnZXROb2RlSWQsXG4gICAgICAgICAgSXNQYXJhbGxlbDogc291cmNlTm9kZT8uc3RhZ2VEYXRhPy5Jc1BhcmFsbGVsIHx8IGZhbHNlLFxuICAgICAgICAgIFBhc3NPblJ1bGU6IGNvbm4uY29uZGl0aW9uIHx8ICcnLFxuICAgICAgICAgIFNvdXJjZVBvaW50VHlwZTogdGhpcy5nZXRDb25uZWN0aW9uUG9pbnRUeXBlKGNvbm4uc291cmNlUG9pbnRJZCksXG4gICAgICAgICAgVGFyZ2V0UG9pbnRUeXBlOiB0aGlzLmdldENvbm5lY3Rpb25Qb2ludFR5cGUoY29ubi50YXJnZXRQb2ludElkKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZGVsZXRlZCBvYmplY3RzIHdpdGggUmVtb3ZlZCBzdGF0ZVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhZ2VSZWNvcmQpLmZvckVhY2goKHN0YWdlSWQpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHN0YWdlcy5zb21lKFxuICAgICAgICAoc3RhZ2UpID0+IHN0YWdlLkNvZGUgPT09IHN0YWdlSWQgfHwgc3RhZ2UuaWQgPT09IHN0YWdlSWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlID0gdGhpcy5zdGFnZVJlY29yZFtzdGFnZUlkXTtcbiAgICAgICAgc3RhZ2VzLnB1c2goe1xuICAgICAgICAgIC4uLnN0YWdlLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25SZWNvcmQpLmZvckVhY2goKGFjdGlvbklkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSBhY3Rpb25zLnNvbWUoXG4gICAgICAgIChhY3Rpb24pID0+IGFjdGlvbi5Db2RlID09PSBhY3Rpb25JZCB8fCBhY3Rpb24uaWQgPT09IGFjdGlvbklkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvblJlY29yZFthY3Rpb25JZF07XG4gICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGRlbGV0ZWQgc3dpbWxhbmVzXG4gICAgT2JqZWN0LmtleXModGhpcy5zd2ltbGFuZVJlY29yZCkuZm9yRWFjaCgobGFuZUlkKSA9PiB7XG4gICAgICBjb25zdCBleGlzdHMgPSB3b3JrZmxvdy5MYW5lcy5zb21lKFxuICAgICAgICAobGFuZSkgPT4gbGFuZS5Db2RlID09PSBsYW5lSWQgfHwgbGFuZS5pZCA9PT0gbGFuZUlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBjb25zdCBsYW5lID0gdGhpcy5zd2ltbGFuZVJlY29yZFtsYW5lSWRdO1xuICAgICAgICB3b3JrZmxvdy5MYW5lcy5wdXNoKHtcbiAgICAgICAgICAuLi5sYW5lLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuUmVtb3ZlZCxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd29ya2Zsb3cuU3RhZ2VzID0gc3RhZ2VzO1xuICAgIHdvcmtmbG93LkFjdGlvbnMgPSBhY3Rpb25zO1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvblBvaW50VHlwZShcbiAgICBwb2ludElkOiBzdHJpbmdcbiAgKTogJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCB1bmRlZmluZWQge1xuICAgIC8vIEV4dHJhY3QgdGhlIHR5cGUgZnJvbSB0aGUgY29ubmVjdGlvbiBwb2ludCBJRCBmb3JtYXRcbiAgICAvLyB3aGljaCBpcyB1c3VhbGx5IHNvbWV0aGluZyBsaWtlIFwibm9kZS1pZC10b3AtNTBcIlxuICAgIGNvbnN0IHBhcnRzID0gcG9pbnRJZC5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHR5cGVJbmRleCA9IHBhcnRzLmZpbmRJbmRleChcbiAgICAgIChwYXJ0KSA9PlxuICAgICAgICBwYXJ0ID09PSAndG9wJyB8fFxuICAgICAgICBwYXJ0ID09PSAncmlnaHQnIHx8XG4gICAgICAgIHBhcnQgPT09ICdib3R0b20nIHx8XG4gICAgICAgIHBhcnQgPT09ICdsZWZ0J1xuICAgICk7XG5cbiAgICBpZiAodHlwZUluZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBwYXJ0c1t0eXBlSW5kZXhdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGQgYSBuZXcgcHJvcGVydHkgdG8gdHJhY2sgbG9hZGVkIG9iamVjdHNcbiAgbG9hZGVkT2JqZWN0SWRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307IC8vIEZvcm1hdDogeyBpZDogY29kZSB9XG5cbiAgLy8gQWRkIGEgbWV0aG9kIHRvIHJlZ2lzdGVyIGxvYWRlZCBvYmplY3RzXG4gIHJlZ2lzdGVyTG9hZGVkT2JqZWN0KGlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSA9IGNvZGU7XG4gIH1cblxuICAvLyBNZXRob2QgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IHdhcyBsb2FkZWQgZnJvbSBBUElcbiAgd2FzTG9hZGVkRnJvbUFwaShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlkIGluIHRoaXMubG9hZGVkT2JqZWN0SWRzO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGdldCB0aGUgY29kZSBmb3IgYSBsb2FkZWQgb2JqZWN0XG4gIGdldENvZGVGb3JPYmplY3QoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGVkT2JqZWN0SWRzW2lkXSB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIG5vZGUgZnJvbSBvbmUgc3dpbWxhbmUgdG8gYW5vdGhlciBhbmQgdXBkYXRlcyBhbGwgcmVsYXRlZCBzdGF0ZTpcbiAgICogLSBOb2RlIHBvc2l0aW9uIChzd2ltbGFuZS1yZWxhdGl2ZSB4L3kpXG4gICAqIC0gU3dpbWxhbmUgYXJyYXlzIChyZW1vdmVzIGZyb20gb2xkLCBhZGRzIHRvIG5ldylcbiAgICogLSBDb25uZWN0aW9uIHN3aW1sYW5lIGluZGljZXMgZm9yIHRoaXMgbm9kZVxuICAgKiAtIE5vZGUncyBzdGFnZURhdGEuVGFncyBhbmQgU3dpbUxhbmUgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIHN3aW1sYW5lXG4gICAqL1xuICBtb3ZlTm9kZVRvU3dpbWxhbmUoXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgZnJvbVN3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICB0b1N3aW1sYW5lSW5kZXg6IG51bWJlcixcbiAgICBuZXdYOiBudW1iZXIsXG4gICAgYWJzb2x1dGVZOiBudW1iZXIgICAgICAgIC8vIGFic29sdXRlIFNWRyBZIG9mIHRoZSBub2RlIGF0IGRyb3AgdGltZVxuICApOiBOb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgZnJvbVN3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbZnJvbVN3aW1sYW5lSW5kZXhdO1xuICAgIGlmICghZnJvbVN3aW1sYW5lPy5ub2RlcykgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub2RlSW5kZXggPSBmcm9tU3dpbWxhbmUubm9kZXMuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgIGlmIChub2RlSW5kZXggPT09IC0xKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFB1bGwgdGhlIG5vZGUgb3V0IOKAkyBrZWVwIGEgbG9jYWwgcmVmZXJlbmNlXG4gICAgY29uc3Qgbm9kZSA9IGZyb21Td2ltbGFuZS5ub2Rlc1tub2RlSW5kZXhdO1xuXG4gICAgLy8g4pSA4pSAIEZpeCB0aGUgWSBjb29yZGluYXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFRlbXBsYXRlIGZvcm11bGE6IGFic29sdXRlU1ZHWSA9IG5vZGUueSArIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgLy8gQ29ubmVjdGlvbiBmb3JtdWxhOiBhYnNvbHV0ZVkgPSBub2RlLnkgKyBzd2ltbGFuZUluZGV4ICogMjYzICsgcG9pbnQueVxuICAgIC8vIEJvdGggZXhwZWN0IG5vZGUueSB0byBiZSBzd2ltbGFuZS1yZWxhdGl2ZTpcbiAgICAvLyAgIG5vZGUueSA9IGFic29sdXRlU1ZHWSAtIHN3aW1sYW5lLm9yZGVyICogMjYzXG4gICAgbm9kZS54ID0gbmV3WDtcbiAgICBub2RlLnkgPSBhYnNvbHV0ZVkgLSB0b1N3aW1sYW5lSW5kZXggKiB0aGlzLnN3aW1sYW5lSGVpZ2h0O1xuXG4gICAgLy8g4pSA4pSAIE1vdmUgYmV0d2VlbiBzd2ltbGFuZSBhcnJheXMgKGltbXV0YWJsZSByZWFzc2lnbm1lbnQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgIC8vIFVzaW5nIGZpbHRlcitzcHJlYWQgaW5zdGVhZCBvZiBzcGxpY2UvcHVzaCBzbyBBbmd1bGFyJ3MgQGZvciBibG9ja1xuICAgIC8vIGRldGVjdHMgdGhlIGFycmF5IGNoYW5nZSBvbiBib3RoIG9sZCBhbmQgbmV3IHN3aW1sYW5lLlxuICAgIGZyb21Td2ltbGFuZS5ub2RlcyA9IGZyb21Td2ltbGFuZS5ub2Rlcy5maWx0ZXIoKG4pID0+IG4uaWQgIT09IG5vZGVJZCk7XG5cbiAgICBjb25zdCB0b1N3aW1sYW5lID0gdGhpcy5zd2ltbGFuZXNbdG9Td2ltbGFuZUluZGV4XTtcbiAgICB0b1N3aW1sYW5lLm5vZGVzID0gWy4uLih0b1N3aW1sYW5lLm5vZGVzIHx8IFtdKSwgbm9kZV07XG5cbiAgICAvLyDilIDilIAgVXBkYXRlIGNvbm5lY3Rpb24gc3dpbWxhbmUgaW5kaWNlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5jb25uZWN0aW9ucy5tYXAoKGNvbm4pID0+IHtcbiAgICAgIGlmIChjb25uLnNvdXJjZU5vZGVJZCAhPT0gbm9kZUlkICYmIGNvbm4udGFyZ2V0Tm9kZUlkICE9PSBub2RlSWQpIHJldHVybiBjb25uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29ubixcbiAgICAgICAgLi4uKGNvbm4uc291cmNlTm9kZUlkID09PSBub2RlSWQgPyB7IHNvdXJjZVN3aW1sYW5lSW5kZXg6IHRvU3dpbWxhbmVJbmRleCB9IDoge30pLFxuICAgICAgICAuLi4oY29ubi50YXJnZXROb2RlSWQgPT09IG5vZGVJZCA/IHsgdGFyZ2V0U3dpbWxhbmVJbmRleDogdG9Td2ltbGFuZUluZGV4IH0gOiB7fSksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgLy8g4pSA4pSAIFN5bmMgbm9kZSBtZXRhZGF0YSB0byB0aGUgZGVzdGluYXRpb24gc3dpbWxhbmUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgbm9kZS5zdGFnZURhdGEgPSB7XG4gICAgICAuLi5ub2RlLnN0YWdlRGF0YSxcbiAgICAgIFRhZ3M6IFsuLi4odG9Td2ltbGFuZS50YWdzIHx8IFtdKV0sXG4gICAgICBTd2ltTGFuZTogdG9Td2ltbGFuZS5pZCB8fCAnJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKiogU3dpbWxhbmUgaGVpZ2h0IGNvbnN0YW50IHVzZWQgZm9yIGNvb3JkaW5hdGUgY29udmVyc2lvbnMuICovXG4gIHJlYWRvbmx5IHN3aW1sYW5lSGVpZ2h0ID0gMjYzO1xufVxuIl19
|