qms-angular 1.1.64 → 1.1.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +1974 -1657
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/enum/bpmn-add-connection-type.enum.js +6 -0
- package/esm2015/lib/common/enum/data-type.enum.js +2 -1
- package/esm2015/lib/common/enum/shape-connection-action.enum.js +7 -0
- package/esm2015/lib/common/enum/shape-targets.enum.js +6 -0
- package/esm2015/lib/common/qms-icon.const.js +13 -1
- package/esm2015/lib/components/app-icon/icon-registry.service.js +17 -2
- package/esm2015/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.js +2 -1
- package/esm2015/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.js +5 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-action-event.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-action.model.js +3 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-connection-detail.model.js +32 -0
- package/esm2015/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.js +7 -0
- package/esm2015/lib/components/qms-bpmn/qms-bpmn.component.js +120 -16
- package/esm2015/lib/components/qms-bpmn/qms-bpmn.module.js +15 -5
- package/esm2015/lib/components/related/list-other-related/list-related.component.js +6 -3
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +2 -2
- package/esm2015/lib/components/select-process-data/select-process-data.component.js +2 -3
- package/esm2015/lib/components/select-process-data-tree/select-process-data-tree.component.js +1 -1
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +3 -3
- package/esm2015/lib/components/treeNew/tree.component.js +3 -3
- package/esm2015/lib/model/en.js +8 -2
- package/esm2015/lib/model/no.js +8 -2
- package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +4 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +38 -34
- package/esm2015/lib/qms-ckeditor-components/models/connect-type.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/models/qms-bpmn-config.model.js +2 -1
- package/esm2015/lib/services/qms-bpmn.service.js +24 -1
- package/esm2015/public-api.js +11 -1
- package/esm2015/qms-angular.js +3 -1
- package/fesm2015/qms-angular.js +2150 -1905
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/enum/bpmn-add-connection-type.enum.d.ts +4 -0
- package/lib/common/enum/data-type.enum.d.ts +2 -1
- package/lib/common/enum/shape-connection-action.enum.d.ts +5 -0
- package/lib/common/enum/shape-targets.enum.d.ts +4 -0
- package/lib/common/qms-icon.const.d.ts +5 -0
- package/lib/components/app-icon/icon-registry.service.d.ts +5 -0
- package/lib/components/qms-bpmn/models/change-document-anchor-for-shape-event.model.d.ts +5 -0
- package/lib/components/qms-bpmn/models/flow-chart-shape/activity-related-items.d.ts +1 -0
- package/lib/components/qms-bpmn/models/remove-shape-connection-item-event.model.d.ts +13 -0
- package/lib/components/qms-bpmn/models/shape-connection-action-event.model.d.ts +7 -0
- package/lib/components/qms-bpmn/models/shape-connection-action.model.d.ts +5 -0
- package/lib/components/qms-bpmn/models/shape-connection-detail.model.d.ts +71 -0
- package/lib/components/qms-bpmn/models/shape-flow-chart-connection-detail.model.d.ts +6 -0
- package/lib/components/qms-bpmn/qms-bpmn.component.d.ts +51 -10
- package/lib/components/related/list-other-related/list-related.component.d.ts +1 -1
- package/lib/model/en.d.ts +6 -0
- package/lib/model/no.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +4 -1
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +19 -19
- package/lib/qms-ckeditor-components/models/connect-type.model.d.ts +2 -0
- package/lib/qms-ckeditor-components/models/qms-bpmn-config.model.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +10 -0
- package/qms-angular.d.ts +2 -0
- package/qms-angular.metadata.json +1 -1
- package/src/assets/jointjs/scss/bpmn.css +2 -2
- package/src/lib/components/qms-bpmn/qms-bpmn.component.scss +263 -0
- package/src/lib/components/related/list-other-related/list-related.component.scss +201 -197
- package/src/lib/components/select-process-data/select-process-data.component.scss +0 -2
- package/src/lib/components/select-process-data-tree/select-process-data-tree.component.scss +0 -1
- package/src/lib/components/select-process-document/select-process-document.component.scss +4 -0
- package/src/lib/components/treeNew/tree.component.scss +4 -0
@@ -540,6 +540,29 @@ export class BpmnService {
|
|
540
540
|
},
|
541
541
|
'delete backspace': (evt) => {
|
542
542
|
evt.preventDefault();
|
543
|
+
var cells = selection.collection.toArray();
|
544
|
+
let allowDelete = true;
|
545
|
+
if (window[FlowChartConst.SHAPE_FLOWCHART]) {
|
546
|
+
var shapeFlowChart = window[FlowChartConst.SHAPE_FLOWCHART];
|
547
|
+
// Clear all by click remove button
|
548
|
+
if (cells) {
|
549
|
+
cells.every(function (e) {
|
550
|
+
var shapeId = e.attributes.id;
|
551
|
+
var index = shapeFlowChart.findIndex(function (x) {
|
552
|
+
return x.shapeId === shapeId;
|
553
|
+
});
|
554
|
+
if (index >= 0) {
|
555
|
+
allowDelete = false;
|
556
|
+
return false;
|
557
|
+
}
|
558
|
+
return true;
|
559
|
+
});
|
560
|
+
}
|
561
|
+
}
|
562
|
+
if (!allowDelete) {
|
563
|
+
window.postMessage(FlowChartConst.EXIST_DATA, null);
|
564
|
+
return;
|
565
|
+
}
|
543
566
|
graph.removeCells(selection.collection.toArray());
|
544
567
|
},
|
545
568
|
'ctrl+z': () => {
|
@@ -1442,4 +1465,4 @@ function createPoolTools(poolView, coordinates) {
|
|
1442
1465
|
poolView.addTools(elementToolsView);
|
1443
1466
|
joint.ui.FreeTransform.clear(paper);
|
1444
1467
|
}
|
1445
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvcW1zLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLGlCQUFpQixNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sZUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNyRyxPQUFPLFVBQVUsTUFBTSxxREFBcUQsQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQy9GLE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7OztBQUs3RSxJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksS0FBVSxDQUFDO0FBQ2YsSUFBSSxTQUFjLENBQUM7QUFDbkIsSUFBSSxhQUFrQixDQUFDO0FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBSXZDLE1BQU0sT0FBTyxXQUFXO0lBY3RCLFlBQW9CLFNBQWtDO1FBQWxDLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBYi9DLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFOUIsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBS3BDLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLENBQ1YsZ0JBQXFCLEVBQ3JCLGVBQW9CLEVBQ3BCLFNBQWlCLEVBQ2pCLFdBQWdCLEVBQ2hCLFFBQWEsRUFDYixXQUFpQixFQUNqQixvQkFBMEIsRUFDMUIsUUFBaUI7UUFFakIsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEQ7YUFDSTtZQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7U0FBRTtRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQ3RCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsU0FBUyxFQUNULFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxDQUFDLElBQUksRUFDVCxXQUFXLEVBQ1gsb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQ2pCLGdCQUFxQixFQUNyQixlQUFvQixFQUNwQixTQUFpQixFQUNqQixXQUFnQixFQUNoQixRQUFhLEVBQ2IsSUFBUyxFQUNULFdBQWlCLEVBQ2pCLG9CQUEwQjtRQUUxQixNQUFNLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzVDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUIsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUV2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXJGLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztRQUV6QixJQUFJLENBQUMsb0JBQW9CO1lBQ3ZCLGFBQWEsR0FBRyxlQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBRTlELGFBQWEsR0FBRyxvQkFBb0IsQ0FBQztRQUN2QyxnREFBZ0Q7UUFDaEQsSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLGdCQUFnQixFQUFFO1lBQzNDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsRUFBRTtnQkFDYixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDaEMsTUFBTSxNQUFNLEdBQUc7d0JBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7d0JBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsUUFBUSxFQUFFLEtBQUs7cUJBQ2hCLENBQUM7b0JBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDakQsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTt3QkFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDbkM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUU5Qyw0QkFBNEI7UUFDNUIsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTNDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzFCLEtBQUssRUFBRSxHQUFHO1lBQ1YsTUFBTSxFQUFFLEdBQUc7WUFDWCxLQUFLLEVBQUUsS0FBSztZQUNaLFFBQVEsRUFBRSxRQUFRLEtBQUssaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEQsUUFBUSxFQUFFLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO1lBQzdDLEtBQUssRUFBRSxJQUFJO1lBQ1gsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNO1lBQ3ZDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDaEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsY0FBYztZQUNkLFdBQVcsQ0FBQyxXQUFXO2dCQUNyQixPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDcEIsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQ2pDLEtBQUssRUFBRTt3QkFDTCxJQUFJLEVBQUU7NEJBQ0osUUFBUSxFQUFFLFVBQVU7eUJBQ3JCO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRztnQkFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDL0IseUJBQXlCO2dCQUN6QixJQUFJLE1BQU0sS0FBSyxNQUFNLEVBQUU7b0JBQ3JCLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELHNDQUFzQztnQkFDdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ25CLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUNELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUNuQixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxnQ0FBZ0M7Z0JBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksVUFBVSxLQUFLLGFBQWEsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFO29CQUNoRSxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsSUFBSSxFQUFFLGVBQWU7YUFDdEI7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7YUFDdkI7WUFDRCxZQUFZO1lBQ1osYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLElBQUk7WUFDckIsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxVQUFVLEtBQUssb0JBQW9CLElBQUksU0FBUyxLQUFLLG9CQUFvQixFQUFFO29CQUM3RSxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFJLFVBQVUsS0FBSyxnQkFBZ0IsSUFBSSxTQUFTLEtBQUssYUFBYSxFQUFFO29CQUNsRSxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxlQUFlO1lBQ2YsWUFBWSxFQUFFO2dCQUNaLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsS0FBSyxFQUFFOzRCQUNMLE1BQU0sRUFBRSxTQUFTOzRCQUNqQixjQUFjLEVBQUUsQ0FBQzs0QkFDakIsaUJBQWlCLEVBQUUsT0FBTzt5QkFDM0I7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDSixtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLFVBQVUsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsdUNBQXVDO2dCQUN2QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNuQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN2QztZQUNILENBQUM7WUFDRCxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBRUQsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDNUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDakMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUFFLE9BQU87aUJBQUU7Z0JBQzFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFFRCxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM5QixzQ0FBc0M7Z0JBQ3RDLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUN2QixPQUFPO2lCQUNSO2dCQUVELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7b0JBQ3hDLElBQUksRUFBRSxZQUFZO29CQUNsQixLQUFLLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO3dCQUN4QyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7d0JBQ3hCLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRTtxQkFDekI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUVELGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzlCLHVEQUF1RDtnQkFDdkQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUNuQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hCO1lBQ0gsQ0FBQztZQUVELGNBQWMsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUMzQix1REFBdUQ7Z0JBQ3ZELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN0QixPQUFPO2lCQUNSO2dCQUNELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUMxQyxJQUFJLFFBQVEsS0FBSyxzQkFBc0IsRUFBRTt3QkFDdkMsT0FBTztxQkFDUjtvQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQy9DLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzVDLElBQUksUUFBUSxLQUFLLHdCQUF3QixFQUFFO3dCQUN6QyxPQUFPO3FCQUNSO29CQUNELFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUNqRCxPQUFPO2lCQUNSO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUMxQyxJQUFJLFFBQVEsS0FBSyx1QkFBdUIsRUFBRTt3QkFDeEMsT0FBTztxQkFDUjtvQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ2hELE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pDLElBQUksUUFBUSxLQUFLLHVCQUF1QixFQUFFO3dCQUN4QyxPQUFPO3FCQUNSO29CQUNELFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztvQkFDaEQsT0FBTztpQkFDUjtnQkFDRCxJQUFJLFFBQVEsS0FBSyxZQUFZLEVBQUU7b0JBQzdCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEM7WUFDSCxDQUFDO1lBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxRQUFRLEtBQUssaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsT0FBTztnQkFDVCxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUMvQixJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxPQUFPO2dCQUNULFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELHFCQUFxQixFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRTtvQkFDdkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDdkMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxFQUFFOzRCQUN2RSwwREFBMEQ7NEJBQzFELFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7eUJBQzlDOzZCQUFNOzRCQUNMLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDMUM7cUJBQ0Y7aUJBQ0Y7cUJBQ0k7b0JBQ0gsVUFBVSxFQUFFLENBQUM7b0JBQ2IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUM1QixhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtZQUNILENBQUM7WUFDRCxtQkFBbUIsRUFBRSxVQUFVLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQyxLQUFLO1lBQ0wsZUFBZSxFQUFFLElBQUk7WUFDckIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWhDLEtBQUssQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUs7WUFDOUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsZUFBZTtRQUNmLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2pDLEtBQUs7WUFDTCxLQUFLO1lBQ0wsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLCtCQUErQjtTQUMvRCxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRSxTQUFTLENBQUMsRUFBRSxDQUFDLDJCQUEyQixFQUFFLENBQUMsUUFBYSxFQUFFLEdBQVEsRUFBRSxFQUFFO1lBQ3BFLDJGQUEyRjtZQUMzRixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JCLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM3QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsYUFBYTtRQUViLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsS0FBSztZQUNMLEtBQUs7WUFDTCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsWUFBWSxDQUFDLElBQUk7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUUvQixrRUFBa0U7Z0JBQ2xFLE1BQU0sY0FBYyxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRixJQUFJLGNBQWMsRUFBRTtvQkFDbEIsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7d0JBQ2hCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxHQUFHLGNBQWM7d0JBQzFDLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxHQUFHLGNBQWM7cUJBQzdDLENBQUMsQ0FBQztvQkFDSCxJQUFJLElBQUksS0FBSyxvQkFBb0IsRUFBRTt3QkFDakMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDakU7aUJBQ0Y7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVwRCxJQUFJLGFBQWEsR0FBRztZQUNsQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ2pCLEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDaEIsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNkLEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDckIsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCxNQUFNLEVBQUUsT0FBTzt3QkFDZixXQUFXLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLEVBQUUsUUFBUTtxQkFDckI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNuQixLQUFLLEVBQUU7b0JBQ0wsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQ2xCLEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDbkIsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsU0FBUztxQkFDaEI7b0JBQ0QsS0FBSyxFQUFFO3dCQUNMLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRSxFQUFFO29CQUNULE1BQU0sRUFBRSxFQUFFO2lCQUNYO2dCQUNELEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLE9BQU87d0JBQ2IsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLHFCQUFxQjtZQUNyQjtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFO2dCQUNsRCxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQy9CLEtBQUssRUFBRSxDQUFDO3dCQUNOLEtBQUssRUFBRSxRQUFRO3FCQUNoQixFQUFFO3dCQUNELEtBQUssRUFBRSxRQUFRO3FCQUNoQixDQUFDO2dCQUNGLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO29CQUN6QixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO29CQUMvQixVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO29CQUM1QixlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO2lCQUNsQzthQUNGLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLFlBQVksRUFBRSxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7Z0JBQ2hELEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE9BQU87d0JBQ2YsV0FBVyxFQUFFLENBQUM7d0JBQ2QsVUFBVSxFQUFFLFFBQVE7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNoQyxLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxPQUFPO3dCQUNmLFdBQVcsRUFBRSxDQUFDO3dCQUNkLFVBQVUsRUFBRSxRQUFRO3FCQUNyQjtpQkFDRjthQUNGLENBQUM7U0FBQyxDQUFDO1FBQ04sMEJBQTBCO1FBQzFCLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN4QyxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRTt3QkFDTCw2Q0FBNkM7d0JBQzdDLFNBQVMsRUFBRSxLQUFLOzRCQUNkLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSztnQ0FDNUIsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtnQ0FDdkUsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTs0QkFDckUsQ0FBQyxDQUFDLGdtRUFBZ21FO3FCQUNybUU7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxhQUFhO3dCQUNuQixNQUFNLEVBQUUsU0FBUzt3QkFDakIsV0FBVyxFQUFFLENBQUM7d0JBQ2QsZUFBZSxFQUFFLEdBQUc7cUJBQ3JCO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDLENBQUM7U0FDTDtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFNUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqRCxPQUFPLEVBQUUsR0FBRztZQUNaLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsRUFBRTtZQUNiLFdBQVcsRUFBRSxFQUFFO1lBQ2YsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QyxpREFBaUQ7UUFDakQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN6QywwREFBMEQ7WUFDMUQsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILGNBQWM7UUFDZCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsMkJBQTJCLEVBQUUsQ0FBQztTQUMvQjtRQUVELFNBQVMsMkJBQTJCO1lBQ2xDLFFBQVEsQ0FBQyxFQUFFLENBQ1Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYix5REFBeUQ7b0JBQ3pELFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztnQkFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNiLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUM5QyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7d0JBQzdCLGVBQWUsRUFBRSxJQUFJO3FCQUN0QixDQUFDLENBQUM7b0JBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDOUMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUFDO29CQUVILGtGQUFrRjtvQkFDbEYsMkRBQTJEO29CQUMzRCxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7b0JBQzFCLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkQsYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLENBQUM7Z0JBRUQsa0JBQWtCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDMUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNyQixLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNiLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4RCxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3RCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxNQUFNLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLENBQUM7cUJBQ2pCO2dCQUNILENBQUM7Z0JBRUQsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixNQUFNLE1BQU0sR0FBRyw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDeEQsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN0QixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzVCLElBQUksTUFBTSxFQUFFO3dCQUNWLGFBQWEsRUFBRSxDQUFDO3FCQUNqQjtnQkFDSCxDQUFDO2dCQUVELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ2hELGFBQWEsRUFBRSxDQUFDO2dCQUNsQixDQUFDO2dCQUVELFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNuQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDakQsQ0FBQztnQkFFRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDcEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNyQixhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDcEQsQ0FBQztnQkFFRCxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFFRCxhQUFhLEVBQUUsR0FBRyxFQUFFO29CQUNsQixhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsRUFDRCxJQUFJLENBQ0wsQ0FBQztRQUNKLENBQUM7UUFFRCxTQUFTLGlCQUFpQjtZQUN4QixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBRWpDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sV0FBVyxHQUFRLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ2pDLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixVQUFVLEVBQUUsQ0FBQztnQkFFYixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBUztvQkFDakMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztRQUVELFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsT0FBTzthQUNSO1lBQ0QsVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMvQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFOUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFO2dCQUNoRCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUNsQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2lCQUN6QjthQUNGLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLHNEQUFzRDtZQUN0RCxzREFBc0Q7WUFDdEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFakQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksT0FBTyxDQUFDO2dCQUVaLElBQUksSUFBSSxZQUFZLEtBQUssQ0FBQyxZQUFZLEVBQUU7b0JBQ3RDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2lCQUNyQztnQkFFRCxJQUFJLElBQUksS0FBSyxvQkFBb0IsSUFBSSxXQUFXLEVBQUU7b0JBQ2hELGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7aUJBQ3hDO2dCQUVELGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUN6QyxRQUFRO29CQUNSLHFCQUFxQixFQUFFLEtBQUs7b0JBQzVCLGFBQWEsRUFBRSxLQUFLO29CQUNwQixRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3ZCLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDMUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUVaLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQzdCLFFBQVE7b0JBQ1IsS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLElBQUksRUFBRSxTQUFTO29CQUNmLGdCQUFnQixFQUFFLElBQUk7b0JBQ3RCLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUN2QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2lCQUNGLENBQUMsQ0FBQztnQkFDSCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZDLElBQUksSUFBSSxLQUFLLG9CQUFvQixFQUFFO3dCQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUM3QjtvQkFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ2Y7YUFDRjtZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNqQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO29CQUN4QyxJQUFJLEVBQUUsa0JBQWtCO29CQUN4QixLQUFLLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO3dCQUNqQixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7d0JBQ3JCLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRTt3QkFDckIsSUFBSSxFQUFFLENBQUMsZUFBZSxFQUFFO3dCQUN4QixJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7d0JBQ3hCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO3dCQUNoQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO3FCQUM3QztpQkFDRixDQUFDLENBQUM7Z0JBRUgsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QjtZQUVELG1EQUFtRDtZQUNuRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLElBQUksUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRTtnQkFDbEYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUN2QixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzdDLHlDQUF5QztvQkFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUFFOzRCQUMvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs0QkFDakMsU0FBUzt5QkFDVjt3QkFDRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzRCQUNqQyxTQUFTO3lCQUNWO3dCQUNELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUM3QyxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDO3dCQUMvQixDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7NEJBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7NEJBQ2pDLFNBQVM7eUJBQ1Y7d0JBQ0QsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzVDLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEtBQUssNEJBQTRCLENBQUMsUUFBUSxFQUFFOzRCQUMxRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQzs0QkFDcEMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7eUJBQzdDOzZCQUFNLElBQUksV0FBVyxDQUFDLGdCQUFnQixLQUFLLDRCQUE0QixDQUFDLElBQUksRUFBRTs0QkFDN0UsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3lCQUNqQzs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxpQkFBaUIsRUFBRTs0QkFDMUYsd0NBQXdDOzRCQUN4QyxRQUFRLFdBQVcsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQ0FDMUQsS0FBSyxlQUFlLENBQUMsUUFBUTtvQ0FDM0IsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0NBQzVDLE1BQU07Z0NBQ1IsS0FBSyxlQUFlLENBQUMsT0FBTztvQ0FDMUIsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO29DQUMzQyxNQUFNO2dDQUNSLEtBQUssZUFBZSxDQUFDLElBQUk7b0NBQ3ZCLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztvQ0FDeEMsTUFBTTtnQ0FDUixLQUFLLGVBQWUsQ0FBQyxRQUFRO29DQUMzQixjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7b0NBQzFDLE1BQU07Z0NBQ1IsS0FBSyxlQUFlLENBQUMscUJBQXFCO29DQUN4QyxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQztvQ0FDMUQsTUFBTTs2QkFDVDt5QkFDRjs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxTQUFTLEVBQUU7NEJBQ2xGLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO3lCQUM5Qzs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxTQUFTLEVBQUU7NEJBQ2xGLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO3lCQUM5Qzs2QkFBTSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUU7NEJBQ25GLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDO3lCQUMzRDt3QkFFRCxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUU7NEJBQzFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO3lCQUNyQzt3QkFDRCxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUM3QixRQUFROzRCQUNSLEtBQUssRUFBRSxTQUFTOzRCQUNoQixVQUFVLEVBQUUsY0FBYzt5QkFDM0IsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUM3QjtpQkFDRjtnQkFFRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTs0QkFDL0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQzt5QkFDdkQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxVQUFVLElBQUksUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRTtnQkFDeEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztvQkFDN0IsUUFBUTtvQkFDUixLQUFLLEVBQUUsU0FBUztvQkFDaEIsVUFBVSxFQUFFLEVBQUU7aUJBQ2YsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7b0JBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM1QyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3FCQUMxRDtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLHlDQUF5QztnQkFDekMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDakQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25FLE1BQU0sQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkQ7WUFFRCw2QkFBNkI7WUFDN0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELFNBQVMsVUFBVTtZQUNqQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTNCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxvQkFBb0IsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxTQUFTLDZCQUE2QixDQUFDLFNBQVM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDcEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxDQUFDLGVBQWUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksZUFBZSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUVELFNBQVMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJO1lBQy9CLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDdEIsT0FBTyxFQUFFO2lCQUNULFFBQVEsQ0FBQyxRQUFRLENBQUM7aUJBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDVixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELFNBQVMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZTtZQUMvQyxtQ0FBbUM7WUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLG9CQUFvQixFQUFFO2dCQUNqRixPQUFPO2FBQ1I7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMvQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsYUFBYTtRQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLO1lBQzFCLFVBQVUsRUFBRTtnQkFDVixhQUFhO2dCQUNiLGNBQWM7YUFDZjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFHO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsTUFBTSxjQUFjLEdBQUcsK0RBQStELENBQUM7Z0JBQ3ZGLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFFL0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxTQUFTLEVBQUUsR0FBRyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDaEMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFO3dCQUN2QixJQUFJOzRCQUNGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3JCLE1BQU0sVUFBVSxHQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUMxRSxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUM5QyxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO3lCQUNsQzt3QkFBQyxPQUFPLENBQUMsRUFBRTs0QkFDVixVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3lCQUNoQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDWCxDQUFDO1lBRUQsU0FBUyxFQUFFLEdBQUcsRUFBRTtnQkFDZCxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNWLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQy9CLHdEQUF3RDtvQkFDeEQsTUFBTSxJQUFJLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDMUQsSUFBSSxJQUFJLEVBQUU7NEJBQ1IsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQzt5QkFDakM7NkJBQU07NEJBQ0wsVUFBVSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDaEM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7b0JBQ2hELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO29CQUNqRSxNQUFNLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztvQkFDakUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRTt3QkFDL0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztxQkFDL0U7eUJBQU07d0JBQ0wsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztxQkFDcEY7b0JBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUN0QjtnQkFDRCxlQUFlLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDbEQsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO2dCQUNyQixJQUNFLGVBQWUsQ0FBQyxXQUFXO29CQUMzQixlQUFlLENBQUMsV0FBVyxLQUFLLEVBQUU7b0JBQ2xDLGVBQWUsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUFDLEtBQUssRUFDaEQ7b0JBQ0EsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDN0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7aUJBQzdFO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7aUJBQ2xGO1lBQ0gsQ0FBQztZQUVELGdCQUFnQixFQUFFLEdBQUcsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztnQkFDN0IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO29CQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztpQkFDckI7Z0JBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBRUQscUJBQXFCLEVBQUUsR0FBRyxFQUFFO2dCQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2lCQUM1RTtZQUNILENBQUM7WUFFRCxlQUFlLENBQUMsT0FBTztnQkFDckIsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUMzQixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUM1QztxQkFBTTtvQkFDTCxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztpQkFDbEM7WUFDSCxDQUFDO1lBRUQsZ0JBQWdCLENBQUMsTUFBTTtnQkFDckIsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO29CQUN4QixNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hELElBQUksSUFBSSxLQUFLLG9CQUFvQixFQUFFO3dCQUNqQyxPQUFPO3FCQUNSO2lCQUNGO2dCQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzlCLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUM1QyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFOztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkQsT0FBTztnQkFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFFdkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixNQUFBLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7b0JBQ3BILE1BQUEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLENBQUMsQ0FBQztvQkFDakksTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQywwQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7b0JBQ3JGLE1BQUEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsMENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO29CQUV0RixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7d0JBQ3hCLE1BQUEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsMENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO3FCQUM1Rjt5QkFBTTt3QkFDTCxNQUFBLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQztxQkFDeEc7aUJBQ0Y7cUJBQU07b0JBQ0wsTUFBQSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO29CQUNqSCxNQUFBLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxTQUFTLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7b0JBQzlILE1BQUEsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsMENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO29CQUN4RixNQUFBLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztvQkFFekYsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO3dCQUN4QixNQUFBLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLDBDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQzt3QkFDOUYsUUFBUSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztxQkFDOUQ7eUJBQU07d0JBQ0wsTUFBQSxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7d0JBQzFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7cUJBQzlEO2lCQUNGO1lBQ0gsQ0FBQztTQUNGLENBQUM7UUFDRixPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1Qsc0JBQXNCLEVBQUUsZUFBZSxDQUFDLE1BQU07WUFDOUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDOUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDOUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLE9BQU87WUFDN0Msb0JBQW9CLEVBQUU7O2dCQUNwQixJQUFJLFlBQVksR0FBRyxNQUFBLEtBQUssQ0FBQyxHQUFHLDBDQUFFLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDL0MsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO3FCQUN4QztpQkFDRjtnQkFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsNkJBQTZCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQjtZQUMvRCw4QkFBOEIsRUFBRSxlQUFlLENBQUMsVUFBVTtZQUMxRCw2QkFBNkIsRUFBRSxlQUFlLENBQUMsZ0JBQWdCO1lBQy9ELGtDQUFrQyxFQUFFLGVBQWUsQ0FBQyxxQkFBcUI7WUFDekUsdUJBQXVCLEVBQUUsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQy9FLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUM3RSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDN0Qsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pELHlCQUF5QixFQUFFLGVBQWUsQ0FBQyxnQkFBZ0I7U0FDNUQsQ0FBQyxDQUFDO1FBRUgsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNwQywwQ0FBMEM7WUFDMUMsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7WUFDekMsVUFBVSxFQUFFO2dCQUNWLGFBQWE7Z0JBQ2IsY0FBYzthQUNmO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFL0MsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNuQixNQUFNLEVBQUUsZ0JBQWdCO1lBQ3hCLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDNUIsQ0FBQztZQUNELEdBQUcsRUFBRSxnQkFBZ0I7WUFDckIsT0FBTyxFQUFFLEVBQUU7WUFDWCxTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDakQsT0FBTzthQUNKLFFBQVEsRUFBRTthQUNWLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDWixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNiLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ25CLE1BQU0sRUFBRSw2QkFBNkIsSUFBSSxDQUFDLEVBQUUsSUFBSTtnQkFDaEQsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxDQUFDO2FBQ1gsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFELGFBQWEsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5GLHVCQUF1QjtRQUN2QixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNyQyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUN0RCxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsV0FBb0I7UUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixPQUFPO1NBQ1I7UUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBb0IsRUFBRSxlQUFxQjtRQUN6RCxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDdkIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksU0FBUyxFQUFFO2dCQUNiLE1BQU0sTUFBTSxHQUFHO29CQUNiLEtBQUssRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxlQUFlLENBQUMsWUFBWTtvQkFDckMsV0FBVztvQkFDWCxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUk7b0JBQzFCLFdBQVcsRUFBRSxlQUFlLENBQUMsV0FBVztvQkFDeEMsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCLENBQUM7Z0JBQ0YsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDakQsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtvQkFDZCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUNELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ25DO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBb0I7UUFDbkMsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsRUFBRTtnQkFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDekIsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDbkMsT0FBTyxDQUFDLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLEVBQ0YsQ0FBQyxDQUNGLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFO1lBQ3ZCLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsRUFBRTtnQkFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUN4RztTQUNGO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFdBQW9CO1FBQ3JDLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQzVDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUN4QyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUFFO3dCQUNqQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDbEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ3RGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO3FCQUNuRjt5QkFBTTt3QkFDTCxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztxQkFDcEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMzQixNQUFNLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2hELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUFtQixFQUFFLGFBQWtCO1FBQ3hELElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNsQixJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3RCLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzs0QkFDakIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUNsQjt3QkFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUNsQjt3QkFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUNsQjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQVM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDaEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0IsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFO2dCQUNoRCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNwQixNQUFNLEVBQUU7b0JBQ04sT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUNsQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO29CQUN0QixVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFO2lCQUN6QjthQUNGLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxRQUFnQjtRQUMzQixJQUFJLFFBQVEsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1RCxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEY7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWdCO1FBQzdCLElBQUksUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRTtZQUN2QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVELGFBQWEsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1RjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0I7UUFDOUIsSUFBSSxRQUFRLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0Y7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksS0FBSyxJQUFJLGFBQWEsRUFBRTtZQUMxQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEMsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pELGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUNqQztpQkFBTTtnQkFDTCxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDeEI7U0FDRjtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTO1FBQzFCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxhQUFhLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDeEMsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLENBQUM7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNoRDtTQUNGO2FBQU0sSUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLGVBQWU7WUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxvQkFBb0I7WUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxrQkFBa0I7WUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxpQkFBaUIsRUFDdEM7WUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7Z0JBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDeEMsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLENBQUM7b0JBQ1QsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDaEQ7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsT0FBZTs7UUFDMUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO1lBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkIsc0NBQXNDO1lBQ3RDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNoQyxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNuQixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNaLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUNFLENBQUEsTUFBQSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLDBDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSTtpQkFDL0MsTUFBQSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLDBDQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBLEVBQzVEO2dCQUNBLElBQUksR0FBRyxNQUFBLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsMENBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDckU7WUFDRCxNQUFBLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsMENBQUUsSUFBSSxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVMsRUFBRSxHQUFRO1FBQ25DLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxvQkFBb0IsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7UUFFRCxJQUNFLEdBQUcsQ0FBQyxTQUFTO1lBQ2IsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLFdBQVc7Z0JBQzVCLEdBQUcsQ0FBQyxTQUFTLEtBQUssV0FBVztnQkFDN0IsR0FBRyxDQUFDLFNBQVMsS0FBSyxjQUFjO2dCQUNoQyxHQUFHLENBQUMsU0FBUyxLQUFLLGFBQWEsQ0FBQyxFQUNsQztZQUNBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXpELHlCQUF5QjtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNULE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBRXRDLE1BQU0sSUFBSSxHQUFHLFNBQVMsS0FBSyxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFFdEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxLQUFLLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDO2lCQUM1RDthQUNGO1NBQ0Y7YUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLFlBQVksS0FBSywrQkFBK0IsRUFBRTtZQUNuRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsVUFBa0IsRUFBRSxNQUFjO1FBQzlELFFBQVEsVUFBVSxFQUFFO1lBQ2xCLEtBQUssS0FBSztnQkFDUixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDM0MsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3BELE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQVU7UUFDeEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3pDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQVU7UUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDekMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNWLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxnQkFBb0M7UUFDdEQsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRTtZQUN4QyxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sTUFBTSxHQUFHO3dCQUNiLEtBQUssRUFBRSxDQUFDO3dCQUNSLE9BQU8sRUFBRSxDQUFDLENBQUMsWUFBWTt3QkFDdkIsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO3dCQUMxQixRQUFRLEVBQUUsS0FBSztxQkFDaEIsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNqRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbEUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNkLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDdkM7b0JBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QyxDQUFDOzs7O1lBNzlDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWhCUSx1QkFBdUI7O0FBKytDaEMsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVc7SUFDNUMsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUUxQixzREFBc0Q7SUFDdEQsb0VBQW9FO0lBQ3BFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU87SUFDbEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXpCLElBQUksWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN6RCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxDQUFDO1FBQ1YsVUFBVSxFQUFFO1lBQ1YsTUFBTSxFQUFFLE1BQU07WUFDZCxjQUFjLEVBQUUsQ0FBQztZQUNqQixRQUFRLEVBQUUsU0FBUztTQUNwQjtLQUNGLENBQUMsQ0FBQztJQUNILElBQUksYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztRQUMzRCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFO1FBQ1gsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDLENBQUM7SUFDSCxJQUFJLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7UUFDN0MsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztLQUNyQyxDQUFDLENBQUM7SUFDSCxRQUFRLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDcEMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XG5pbXBvcnQgSW5zcGVjdG9yRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2pvaW50SlMvYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vam9pbnRKUy9icG1uL3Rvb2xiYXIuZnVuY3Rpb24nO1xuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0JztcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bSc7XG5pbXBvcnQgZ3VpZEhlbHBlciBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vaGVscGVyL2d1aWRIZWxwZXInO1xuaW1wb3J0IHsgRGlhZ3JhbVRlbXBsYXRlcyB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL21vZGVscy9kaWFncmFtLXRlbXBsYXRlLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xuaW1wb3J0IHsgUmVsYXRlZEl0ZW1UeXBlIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2VudW1zL3JlbGF0ZWQtdG8taXRlbS10eXBlJztcbmltcG9ydCBCUE1OQ3VzdG9tRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2pvaW50SlMvYnBtbi9icG1uLmN1c3RvbS5mdW5jdGlvbic7XG5cbi8qIERlY2xhcmUgam9pbnRqcyBvYmplY3QgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12YXJcbmRlY2xhcmUgdmFyIGpvaW50OiBhbnk7XG5sZXQgZ3JhcGg6IGFueTtcbmxldCBwYXBlcjogYW55O1xubGV0IHNlbGVjdGlvbjogYW55O1xubGV0IHRvb2xiYXJDb25maWc6IGFueTtcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xuY29uc3Qgc3RhbmRhcmQgPSBqb2ludC5zaGFwZXMuc3RhbmRhcmQ7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCcG1uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBpc1NhdmVBc1RlbXBsYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBpc0RlbGV0ZVRlbXBsYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBpc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XG4gIHB1YmxpYyBpc1RlbXAgPSB0cnVlO1xuICBwdWJsaWMganNvblRlbXBDb250ZW50ID0gJyc7XG4gIHB1YmxpYyBpc1Jlc2V0ID0gZmFsc2U7XG4gIHB1YmxpYyBpc1NlbGVjdGVkVGVtcGxhdGUgPSBmYWxzZTtcbiAgcHVibGljIGpzb25PcmlnaW5hbENvbnRlbnQgPSAnJztcbiAgcHVibGljIGlzRnVsbFNjcmVlbiA9IHRydWU7XG4gIHB1YmxpYyBpc0V4cGFuZGVkUGFuZWwgPSB0cnVlO1xuICBMQU5HOiBhbnk7XG4gIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgKSB7XG5cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYnVpbGREaWFncmFtKFxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcbiAgICBkaWFncmFtVGVtcGxhdGU6IGFueSxcbiAgICBicG1uVGhlbWU6IHN0cmluZyxcbiAgICBqc29uQ29udGVudDogYW55LFxuICAgIGVkaXRNb2RlOiBhbnksXG4gICAgc2hhcGVJbWFnZXM/OiBhbnksXG4gICAgdG9vbGJhckNvbmZpZ3VyYXRpb24/OiBhbnksXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZygnZW4nKTtcbiAgICB9XG4gICAgZWxzZSB7IHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcobGFuZ3VhZ2UpIH1cbiAgICB0aGlzLmV4Y3V0ZWRCdWlsZERpYWdyYW0oXG4gICAgICBkaWFncmFtVGVtcGxhdGVzLFxuICAgICAgZGlhZ3JhbVRlbXBsYXRlLFxuICAgICAgYnBtblRoZW1lLFxuICAgICAganNvbkNvbnRlbnQsXG4gICAgICBlZGl0TW9kZSxcbiAgICAgIHRoaXMuTEFORyxcbiAgICAgIHNoYXBlSW1hZ2VzLFxuICAgICAgdG9vbGJhckNvbmZpZ3VyYXRpb25cbiAgICApO1xuICB9XG5cbiAgZXhjdXRlZEJ1aWxkRGlhZ3JhbShcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXG4gICAgZGlhZ3JhbVRlbXBsYXRlOiBhbnksXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXG4gICAganNvbkNvbnRlbnQ6IGFueSxcbiAgICBlZGl0TW9kZTogYW55LFxuICAgIExBTkc6IGFueSxcbiAgICBzaGFwZUltYWdlcz86IGFueSxcbiAgICB0b29sYmFyQ29uZmlndXJhdGlvbj86IGFueVxuICApIHtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfTk9UX1NIT1dfQUdBSU5dID0gZmFsc2U7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkVESVRfTU9ERV0gPSBlZGl0TW9kZTtcbiAgICBqb2ludC5zZXRUaGVtZShicG1uVGhlbWUpO1xuXG4gICAganNvbkNvbnRlbnQgPyBqc29uQ29udGVudCA9IEpTT04ucGFyc2UoanNvbkNvbnRlbnQpIDoganNvbkNvbnRlbnQgPSAnJztcblxuICAgIGNvbnN0IGdkQXV0aCA9IHdpbmRvd1tgZ2RBdXRoYF07XG4gICAgY29uc3QgZ2RMb2FkID0gd2luZG93W2BnZExvYWRgXTtcbiAgICBjb25zdCBnZFNhdmUgPSB3aW5kb3dbYGdkU2F2ZWBdO1xuICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcsIHNoYXBlSW1hZ2VzKTtcblxuICAgIGxldCBmcmVlVHJhbnNmb3JtID0gbnVsbDtcblxuICAgIGlmICghdG9vbGJhckNvbmZpZ3VyYXRpb24pXG4gICAgICB0b29sYmFyQ29uZmlnID0gVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKExBTkcpO1xuICAgIGVsc2VcbiAgICAgIHRvb2xiYXJDb25maWcgPSB0b29sYmFyQ29uZmlndXJhdGlvbjtcbiAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbjogQWRkIHRlbXBsYXRlIGxpc3QgKi9cbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scyAmJiBkaWFncmFtVGVtcGxhdGVzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXgsXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgIGZsb3dDaGFydElkOiBpdGVtLmZsb3dDaGFydElkLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGl0ZW0uanNvbkNvbnRlbnQsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5pbmRleCA9PT0gb3B0aW9uLmluZGV4O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdyYXBoID0gbmV3IGpvaW50LmRpYS5HcmFwaCh7IHR5cGU6ICdicG1uJyB9KTtcblxuICAgIC8vIG92ZXJ3cml0ZSBjdXN0b20gZnVuY3Rpb25cbiAgICBCUE1OQ3VzdG9tRnVuY3Rpb24uY3VzdG9tSm9pbnRKU0JQTU4oKTtcblxuICAgIGNvbnN0IGNvbW1hbmRNYW5hZ2VyID0gbmV3IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlcih7IGdyYXBoIH0pO1xuICAgIGNvbnN0IGtleWJvYXJkID0gbmV3IGpvaW50LnVpLktleWJvYXJkKCk7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gbmV3IGpvaW50LnVpLkNsaXBib2FyZCgpO1xuXG4gICAgcGFwZXIgPSBuZXcgam9pbnQuZGlhLlBhcGVyKHtcbiAgICAgIHdpZHRoOiA4MDAsXG4gICAgICBoZWlnaHQ6IDYwMCxcbiAgICAgIG1vZGVsOiBncmFwaCxcbiAgICAgIGdyaWRTaXplOiBlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldyA/IDUgOiAxMCxcbiAgICAgIGRyYXdHcmlkOiBlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldyxcbiAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgc29ydGluZzogam9pbnQuZGlhLlBhcGVyLnNvcnRpbmcuQVBQUk9YLFxuICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXG4gICAgICBzbmFwTGFiZWxzOiB0cnVlLFxuICAgICAgLy8gQ29ubmVjdGlvbnNcbiAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XG4gICAgICAgIHJldHVybiBuZXcgYnBtbjIuRmxvdyh7XG4gICAgICAgICAgejogZWxlbWVudFZpZXcubW9kZWwuZ2V0KCd6JykgLSAxLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBsaW5lOiB7XG4gICAgICAgICAgICAgIGZsb3dUeXBlOiAnc2VxdWVuY2UnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICB2YWxpZGF0ZUNvbm5lY3Rpb24oY2VsbFZpZXdTLCBtYWduZXRTLCBjZWxsVmlld1QsIG1hZ25ldFQsIGVuZCkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBjZWxsVmlld1MubW9kZWw7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbG9vcCBsaW5rc1xuICAgICAgICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbGluayB0byBsaW5rIGNvbm5lY3Rpb25cbiAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UuZ2V0KCd0eXBlJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuZ2V0KCd0eXBlJyk7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgICAgZGVmYXVsdEFuY2hvcjoge1xuICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Q29ubmVjdGlvblBvaW50OiB7XG4gICAgICAgIG5hbWU6ICdib3VuZGFyeScsXG4gICAgICAgIGFyZ3M6IHsgc3Ryb2tlOiB0cnVlIH1cbiAgICAgIH0sXG4gICAgICAvLyBFbWJlZGRpbmdcbiAgICAgIGVtYmVkZGluZ01vZGU6IHRydWUsXG4gICAgICBmcm9udFBhcmVudE9ubHk6IHRydWUsXG4gICAgICB2YWxpZGF0ZUVtYmVkZGluZyhjaGlsZFZpZXcsIHBhcmVudFZpZXcpIHtcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHBhcmVudFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XG4gICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnICYmIGNoaWxkVHlwZSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkFjdGl2aXR5JyAmJiBjaGlsZFR5cGUgPT09ICdicG1uMi5FdmVudCcpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgLy8gSGlnaGxpZ2h0aW5nXG4gICAgICBoaWdobGlnaHRpbmc6IHtcbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIG5hbWU6ICdtYXNrJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcbiAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCc6IDMsXG4gICAgICAgICAgICAgICdzdHJva2UtbGluZWpvaW4nOiAncm91bmQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkub24oe1xuICAgICAgJ2JsYW5rOnBvaW50ZXJkb3duJzogKGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICBjbG9zZVRvb2xzKCk7XG4gICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xuICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdzaGlmdCcsIGV2dCkpIHtcbiAgICAgICAgICBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdibGFuazpjb250ZXh0bWVudSc6IChldnQsIHgsIHkpID0+IHtcbiAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcbiAgICAgIH0sXG5cbiAgICAgICdjZWxsOnBvaW50ZXJ1cCc6IChjZWxsVmlldykgPT4ge1xuICAgICAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XG4gICAgICAgIGNvbnN0IHsgY29sbGVjdGlvbiB9ID0gc2VsZWN0aW9uO1xuICAgICAgICBpZiAoY29sbGVjdGlvbi5pbmNsdWRlcyhjZWxsKSkgeyByZXR1cm47IH1cbiAgICAgICAgY29sbGVjdGlvbi5yZXNldChbY2VsbF0pO1xuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcsIG51bGwpO1xuICAgICAgfSxcblxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxuICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XG4gICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxuICAgICAgICAgIHRvb2xzOiBbXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoeyB2ZXJ0ZXhBZGRpbmc6IGZhbHNlIH0pLFxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXG4gICAgICAgICAgXVxuICAgICAgICB9KTtcblxuICAgICAgICBsaW5rVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xuICAgICAgfSxcblxuICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgb25seSB0aGUgaG92ZXIgdG9vbCwgbm90IHRoZSBwb2ludGVyZG93biB0b29sXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XG4gICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXG4gICAgICAgIGNvbnN0IGxpbmsgPSBsaW5rVmlldy5tb2RlbDtcbiAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xuICAgICAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW3NvdXJjZS5nZXQoJ3R5cGUnKSwgdGFyZ2V0LmdldCgndHlwZScpXTtcbiAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Bbm5vdGF0aW9uTGluaycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkFubm90YXRpb25MaW5rKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkNvbnZlcnNhdGlvbicpID4gLTEpIHtcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmtUeXBlICE9PSAnYnBtbjIuRmxvdycpIHtcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnZWxlbWVudDptb3VzZW92ZXInOiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgaWYgKGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3BlblRvb2xzKGNlbGxWaWV3LCBudWxsKTtcbiAgICAgIH0sXG4gICAgICAnZWxlbWVudDptb3VzZW91dCc6IChjZWxsVmlldykgPT4ge1xuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcsIG51bGwpO1xuICAgICAgfSxcbiAgICAgICdlbGVtZW50OnBvaW50ZXJkb3duJzogKGNlbGxWaWV3LCBldnQsIHgsIHkpID0+IHtcbiAgICAgICAgaWYgKGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdjdHJsIG1ldGEnLCBldnQpKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmNvbGxlY3Rpb24uZmluZChmdW5jdGlvbiAoY2VsbCkgeyByZXR1cm4gY2VsbC5pc0xpbmsoKSB9KSkge1xuICAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgbWl4aW5nIGxpbmtzIGFuZCBlbGVtZW50cyBpbiB0aGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KFtjZWxsVmlldy5tb2RlbF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGNlbGxWaWV3Lm1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2xvc2VUb29scygpO1xuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xuICAgICAgICAgIHBhcGVyLnNldEludGVyYWN0aXZpdHkoeyBlbGVtZW50TW92ZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnY2VsbDpwb2ludGVyY2xpY2snOiBmdW5jdGlvbiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkge1xuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcsIGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3ID8gam9pbnQuZy5Qb2ludCh4LCB5KSA6IG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xuXG4gICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IG5ldyBqb2ludC51aS5QYXBlclNjcm9sbGVyKHtcbiAgICAgIHBhcGVyLFxuICAgICAgYXV0b1Jlc2l6ZVBhcGVyOiB0cnVlLFxuICAgICAgc2Nyb2xsV2hpbGVEcmFnZ2luZzogdHJ1ZSxcbiAgICAgIGN1cnNvcjogJ2dyYWInXG4gICAgfSk7XG5cbiAgICAkKCcjcGFwZXItY29udGFpbmVyJykuaHRtbCgnJyk7XG4gICAgcGFwZXJTY3JvbGxlci4kZWwuYXBwZW5kVG8oJyNwYXBlci1jb250YWluZXInKTtcbiAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignZ3JhYicpO1xuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XG5cbiAgICBwYXBlci5vbignYmxhbms6bW91c2V3aGVlbCcsIF8ucGFydGlhbChvbk1vdXNld2hlZWwsIG51bGwpLCB0aGlzKTtcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcbiAgICBmdW5jdGlvbiBvbk1vdXNld2hlZWwoY2VsbFZpZXcsIGV2dCwgeCwgeSwgZGVsdGEpIHtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbShkZWx0YSAqIDAuMSwgeyBtaW46IDAuMiwgbWF4OiA1LCBncmlkOiAwLjEsIG94OiB4LCBveTogeSB9KTtcbiAgICB9XG5cbiAgICAvKiBTRUxFQ1RJT04gKi9cbiAgICBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcbiAgICAgIHBhcGVyLFxuICAgICAgZ3JhcGgsXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxuICAgICAgZmlsdGVyOiBbJ2JwbW4yLkhlYWRlcmVkUG9vbCddIC8vIGRvbid0IGFsbG93IHRvIHNlbGVjdCBhIHBvb2xcbiAgICB9KTtcblxuICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLm9uKCdyZXNldCBhZGQgcmVtb3ZlJywgb25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgc2VsZWN0aW9uLm9uKCdzZWxlY3Rpb24tYm94OnBvaW50ZXJkb3duJywgKGNlbGxWaWV3OiBhbnksIGV2dDogYW55KSA9PiB7XG4gICAgICAvLyBVbnNlbGVjdCBhbiBlbGVtZW50IGlmIHRoZSBDVFJML01ldGEga2V5IGlzIHByZXNzZWQgd2hpbGUgYSBzZWxlY3RlZCBlbGVtZW50IGlzIGNsaWNrZWQuXG4gICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ2N0cmwgbWV0YScsIGV2dCkpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlbW92ZShjZWxsVmlldy5tb2RlbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyogU1RFTkNJTCAqL1xuXG4gICAgY29uc3Qgc3RlbmNpbCA9IG5ldyBqb2ludC51aS5TdGVuY2lsKHtcbiAgICAgIGdyYXBoLFxuICAgICAgcGFwZXIsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICBkcmFnRW5kQ2xvbmUoY2VsbCkge1xuICAgICAgICBjb25zdCBjbG9uZSA9IGNlbGwuY2xvbmUoKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xuXG4gICAgICAgIC8vIHNvbWUgdHlwZXMgb2YgdGhlIGVsZW1lbnRzIG5lZWQgcmVzaXppbmcgYWZ0ZXIgdGhleSBhcmUgZHJvcHBlZFxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcbiAgICAgICAgaWYgKHNpemVNdWx0aXBsaWVyKSB7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxTaXplID0gY2xvbmUuZ2V0KCdzaXplJyk7XG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xuICAgICAgICAgICAgd2lkdGg6IG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNpemVNdWx0aXBsaWVyLFxuICAgICAgICAgICAgaGVpZ2h0OiBvcmlnaW5hbFNpemUuaGVpZ2h0ICogc2l6ZU11bHRpcGxpZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIGNsb25lLnNldCgncGFkZGluZycsIHsgdG9wOiAwLCBsZWZ0OiAzMCwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xuXG4gICAgdmFyIHN0ZW5jaWxTaGFwZXMgPSBbXG4gICAgICBuZXcgYnBtbjIuQWN0aXZpdHkoe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5HYXRld2F5KHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBuZXcgYnBtbjIuRXZlbnQoe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5Db252ZXJzYXRpb24oe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5EYXRhT2JqZWN0KHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBuZXcgYnBtbjIuRGF0YVN0b3JlKHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBuZXcgYnBtbjIuQW5ub3RhdGlvbih7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgZmlsbDogJyNmZmZmZmYnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBuZXcgYnBtbjIuR3JvdXAoe1xuICAgICAgICBzaXplOiB7XG4gICAgICAgICAgd2lkdGg6IDgwLFxuICAgICAgICAgIGhlaWdodDogODBcbiAgICAgICAgfSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgdGV4dDogJ0dyb3VwJyxcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdicG1uMi5IZWFkZXJlZFBvb2wnLFxuICAgICAgICBwYWRkaW5nOiB7IHRvcDogMCwgbGVmdDogMTUsIHJpZ2h0OiAwLCBib3R0b206IDAgfSxcbiAgICAgICAgc2l6ZTogeyB3aWR0aDogOTAsIGhlaWdodDogNTAgfSxcbiAgICAgICAgbGFuZXM6IFt7XG4gICAgICAgICAgbGFiZWw6ICdMYW5lIDEnXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBsYWJlbDogJ0xhbmUgMidcbiAgICAgICAgfV0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI2ZmZmZmZicgfSxcbiAgICAgICAgICBoZWFkZXJMYWJlbDogeyB0ZXh0OiAnSGVhZGVyJyB9LFxuICAgICAgICAgIGxhbmVMYWJlbHM6IHsgZm9udFNpemU6IDEzIH0sXG4gICAgICAgICAgbWlsZXN0b25lTGFiZWxzOiB7IGZvbnRTaXplOiAxMyB9XG4gICAgICAgIH1cbiAgICAgIH0sIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5DaG9yZW9ncmFwaHkoe1xuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLCBuZXcgam9pbnQuc2hhcGVzLmJwbW4uTWVzc2FnZSh7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGV4dDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSldO1xuICAgIC8vIExvYWQgc2hhcGUgaW1hZ2Ugb3Igbm90XG4gICAgaWYgKHNoYXBlSW1hZ2VzICYmIHNoYXBlSW1hZ2VzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaWR4ID0gc2hhcGVJbWFnZXMuZmluZEluZGV4KChpbWcpID0+IHtcbiAgICAgICAgcmV0dXJuIGltZ1snaXNEZWZhdWx0J10gPT09IHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGltYWdlID0gc2hhcGVJbWFnZXNbaWR4XTtcbiAgICAgIHN0ZW5jaWxTaGFwZXMucHVzaChuZXcgc3RhbmRhcmQuSW1hZ2Uoe1xuICAgICAgICB0eXBlOiAnc3RhbmRhcmQuSW1hZ2UnLFxuICAgICAgICBzaXplOiB7IHdpZHRoOiA4MCwgaGVpZ2h0OiA4MCB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIHhsaW5rSHJlZjogaW1hZ2VcbiAgICAgICAgICAgICAgPyBpbWFnZVsnaW1hZ2VUeXBlJ10gPT09ICdzdmcnXG4gICAgICAgICAgICAgICAgPyBgZGF0YTppbWFnZS8ke2ltYWdlWydpbWFnZVR5cGUnXX0reG1sO2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgICA6IGBkYXRhOmltYWdlLyR7aW1hZ2VbJ2ltYWdlVHlwZSddfTtiYXNlNjQsJHtpbWFnZVsnaW1hZ2VTdHJpbmcnXX1gXG4gICAgICAgICAgICAgIDogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0OElVUlBRMVJaVUVVZ2MzWm5JRkJWUWt4SlF5QWlMUzh2VnpOREx5OUVWRVFnVTFaSElERXVNUzh2UlU0aUlDSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OUhjbUZ3YUdsamN5OVRWa2N2TVM0eEwwUlVSQzl6ZG1jeE1TNWtkR1FpUGp4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1pSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpSUhkcFpIUm9QU0kxTTNCNElpQm9aV2xuYUhROUlqUXljSGdpSUhacFpYZENiM2c5SWpBZ01DQTFNeUEwTWlJZ1pXNWhZbXhsTFdKaFkydG5jbTkxYm1ROUltNWxkeUF3SURBZ05UTWdORElpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBqeG5QanhuSUc5d1lXTnBkSGs5SWpBdU5Ea2lQanh3WVhSb0lHWnBiR3c5SWlNeU1qSXhNemdpSUdROUlrMDBPUzR6TkRRc00yTXdMalUwTWl3d0xERXVNalV0TUM0d05ESXNNUzR5TlN3d0xqVjJNelJqTUN3d0xqVTBNaTB3TGpjd09Dd3hMalV0TVM0eU5Td3hMalZvTFRRMll5MHdMalUwTWl3d0xUQXVOelV0TUM0NU5UZ3RNQzQzTlMweExqVWdkaTB6TkdNd0xUQXVOVFF5TERBdU1qQTRMVEF1TlN3d0xqYzFMVEF1TldnME5pNHlOU0JOTkRrdU16UTBMREZvTFRRMll5MHhMalkxTERBdE1pNDNOU3d3TGpnMUxUSXVOelVzTWk0MWRqTTBZekFzTVM0Mk5Td3hMakVzTXk0MUxESXVOelVzTXk0MWFEUTJJR014TGpZMUxEQXNNeTR5TlMweExqZzFMRE11TWpVdE15NDFkaTB6TkVNMU1pNDFPVFFzTVM0NE5TdzFNQzQ1T1RRc01TdzBPUzR6TkRRc01VdzBPUzR6TkRRc01Yb2lMejQ4WTJseVkyeGxJR1pwYkd3OUlpTXlNakl4TXpnaUlHTjRQU0l6T0M0d09UUWlJR041UFNJeE1pNDFNRElpSUhJOUlqUXVNems0SWk4K1BIQmhkR2dnWm1sc2JEMGlJekl5TWpFek9DSWdaRDBpVFRVd0xqVTVOQ3d5Tmk0NU56SnNMVGN1TVRNMUxUVXVPVEU0WXkweExqQTNOaTB3TGpnNE9DMHlMamN5Tmkwd0xqZzFOQzB6TGpjME9Td3dMakE0Tkd3dE55NHlNalFzTmk0MU9ESk1NVGd1TWpVeExERXlMakl4SUdNdE1TNHdOek10TVM0eE56TXRNaTQ0TWpZdE1TNHhPRFl0TXk0NU1UY3RNQzR3TWpSTU1TNDFPVFFzTWpVdU9USXlWalF3YURRNExqazVNMk13TGpFeE5Td3dMREF1TURBM0xUQXVNREl4TERBdU1EQTNMVEF1TURJNVZqSTJMamszTW5vaUx6NDhMMmMrUEdjK1BHYytQR2MrUEhCaGRHZ2dabWxzYkQwaUl6TXhSREJETmlJZ1pEMGlUVFE1TGpNME5Dd3lZekF1TlRReUxEQXNNUzR5TlMwd0xqQTBNaXd4TGpJMUxEQXVOWFl6TkdNd0xEQXVOVFF5TFRBdU56QTRMREV1TlMweExqSTFMREV1TldndE5EWmpMVEF1TlRReUxEQXRNQzQzTlMwd0xqazFPQzB3TGpjMUxURXVOU0IyTFRNMFl6QXRNQzQxTkRJc01DNHlNRGd0TUM0MUxEQXVOelV0TUM0MWFEUTJMakkxSUUwME9TNHpORFFzTUdndE5EWmpMVEV1TmpVc01DMHlMamMxTERBdU9EVXRNaTQzTlN3eUxqVjJNelJqTUN3eExqWTFMREV1TVN3ekxqVXNNaTQzTlN3ekxqVm9ORFlnWXpFdU5qVXNNQ3d6TGpJMUxURXVPRFVzTXk0eU5TMHpMalYyTFRNMFF6VXlMalU1TkN3d0xqZzFMRFV3TGprNU5Dd3dMRFE1TGpNME5Dd3dURFE1TGpNME5Dd3dlaUl2UGp3dlp6NDhZMmx5WTJ4bElHWnBiR3c5SWlNek1VUXdRellpSUdONFBTSXpPQzR3T1RRaUlHTjVQU0l4TVM0MU1ESWlJSEk5SWpRdU16azRJaTgrUEhCaGRHZ2dabWxzYkQwaUl6TXhSREJETmlJZ1pEMGlUVFV3TGpVNU5Dd3lOUzQ1TnpKc0xUY3VNVE0xTFRVdU9URTRZeTB4TGpBM05pMHdMamc0T0MweUxqY3lOaTB3TGpnMU5DMHpMamMwT1N3d0xqQTROR3d0Tnk0eU1qUXNOaTQxT0RKTU1UZ3VNalV4TERFeExqSXhJR010TVM0d056TXRNUzR4TnpNdE1pNDRNall0TVM0eE9EWXRNeTQ1TVRjdE1DNHdNalJNTVM0MU9UUXNNalF1T1RJeVZqTTVhRFE0TGprNU0yTXdMakV4TlN3d0xEQXVNREEzTFRBdU1ESXhMREF1TURBM0xUQXVNREk1VmpJMUxqazNNbm9pTHo0OEwyYytQQzluUGp3dlp6NDhMM04yWno0ZydcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICBzdHJva2U6ICcjMzFkMGM2JyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnMCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzdGVuY2lsLmxvYWQoc3RlbmNpbFNoYXBlcyk7XG5cbiAgICBqb2ludC5sYXlvdXQuR3JpZExheW91dC5sYXlvdXQoc3RlbmNpbC5nZXRHcmFwaCgpLCB7XG4gICAgICBjb2x1bW5zOiAxMDAsXG4gICAgICBjb2x1bW5XaWR0aDogJ2NvbXBhY3QnLFxuICAgICAgbWFyZ2luWDogMjAsXG4gICAgICBtYXJnaW5ZOiAyMCxcbiAgICAgIGNvbHVtbkdhcDogNDAsXG4gICAgICB2ZXJ0aWNhbEdhcDogMjAsXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcbiAgICB9KTtcbiAgICBjb25zdCByZXNldENlbGxWaWV3ID0gdGhpcy5yZXNldENlbGxWaWV3O1xuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cbiAgICBzdGVuY2lsLm9uKCdlbGVtZW50OmRyb3AnLCAoZWxlbWVudFZpZXcpID0+IHtcbiAgICAgIC8vIG9wZW4gaW5zcGVjdG9yIGFmdGVyIGEgbmV3IGVsZW1lbnQgZHJvcHBlZCBmcm9tIHN0ZW5jaWxcbiAgICAgIG9wZW5Ub29scyhlbGVtZW50VmlldywgbnVsbCk7XG4gICAgfSk7XG5cbiAgICAvKiBLRVlCT0FSRCAqL1xuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdCkge1xuICAgICAgaW5pdGlhbGl6ZUtleWJvYXJkU2hvcnRjdXRzKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUtleWJvYXJkU2hvcnRjdXRzKCkge1xuICAgICAga2V5Ym9hcmQub24oXG4gICAgICAgIHtcbiAgICAgICAgICAnY3RybCtjJzogKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXG4gICAgICAgICAgICBjbGlwYm9hcmQuY29weUVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3YnOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXN0ZWRDZWxscyA9IGNsaXBib2FyZC5wYXN0ZUNlbGxzKGdyYXBoLCB7XG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxuICAgICAgICAgICAgICB1c2VMb2NhbFN0b3JhZ2U6IHRydWVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IF8uZmlsdGVyKHBhc3RlZENlbGxzLCAoY2VsbCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gY2VsbC5pc0VsZW1lbnQoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGFzdGVkIGVsZW1lbnRzIGdldCBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyB0aGUgVVggYmV0dGVyIGFzXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCt4IHNoaWZ0K2RlbGV0ZSc6ICgpID0+IHtcbiAgICAgICAgICAgIGNsaXBib2FyZC5jdXRFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xuICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnZGVsZXRlIGJhY2tzcGFjZSc6IChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZ3JhcGgucmVtb3ZlQ2VsbHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwreic6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci51bmRvKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci5yZWRvKCk7XG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrYSc6ICgpID0+IHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xuICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCtwbHVzJzogKGV2dCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oMC4yLCB7IG1heDogNSwgZ3JpZDogMC4yIH0pO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCttaW51cyc6IChldnQpID0+IHtcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKC0wLjIsIHsgbWluOiAwLjIsIGdyaWQ6IDAuMiB9KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2tleWRvd246c2hpZnQnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignY3Jvc3NoYWlyJyk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uU2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBwcmltYXJ5Q2VsbDogYW55ID0gY29sbGVjdGlvbi5maXJzdCgpO1xuICAgICAgICBzZWxlY3Rpb24uZGVzdHJveVNlbGVjdGlvbkJveChwcmltYXJ5Q2VsbCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgcmVzZXRDZWxsVmlldygpO1xuICAgICAgICBjbG9zZVRvb2xzKCk7XG5cbiAgICAgICAgY29sbGVjdGlvbi5lYWNoKGZ1bmN0aW9uIChjZWxsOiBhbnkpIHtcbiAgICAgICAgICBzZWxlY3Rpb24uY3JlYXRlU2VsZWN0aW9uQm94KGNlbGwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcsIGNvb3JkaW5hdGVzKSB7XG4gICAgICBpZiAoIWNlbGxWaWV3KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gY2VsbFZpZXc7XG4gICAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcblxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XG4gICAgICAgIGNlbGwsXG4gICAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxuICAgICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcbiAgICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KFtdKTtcbiAgICAgIC8vIEFkZCB0aGUgY2VsbCBpbnRvIHRoZSBzZWxlY3Rpb24gY29sbGVjdGlvbiBzaWxlbnRseVxuICAgICAgLy8gc28gbm8gc2VsZWN0aW9uIGJveCBpcyByZW5kZXJlZCBhYm92ZSB0aGUgY2VsbFZpZXcuXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5hZGQoY2VsbCwgeyBzaWxlbnQ6IHRydWUgfSk7XG5cbiAgICAgIGlmIChjZWxsLmlzRWxlbWVudCgpKSB7XG4gICAgICAgIGxldCBtaW5TaXplO1xuXG4gICAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgYnBtbjIuSGVhZGVyZWRQb29sKSB7XG4gICAgICAgICAgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtaW5TaXplID0geyB3aWR0aDogMzAsIGhlaWdodDogMzAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlID09PSBcImJwbW4yLkhlYWRlcmVkUG9vbFwiICYmIGNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgY3JlYXRlUG9vbFRvb2xzKGNlbGxWaWV3LCBjb29yZGluYXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmcmVlVHJhbnNmb3JtID0gbmV3IGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0oe1xuICAgICAgICAgIGNlbGxWaWV3LFxuICAgICAgICAgIGFsbG93T3J0aG9nb25hbFJlc2l6ZTogZmFsc2UsXG4gICAgICAgICAgYWxsb3dSb3RhdGlvbjogZmFsc2UsXG4gICAgICAgICAgbWluV2lkdGg6IG1pblNpemUud2lkdGgsXG4gICAgICAgICAgbWluSGVpZ2h0OiBtaW5TaXplLmhlaWdodFxuICAgICAgICB9KS5yZW5kZXIoKTtcblxuICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xuICAgICAgICAgIGNlbGxWaWV3LFxuICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgdHlwZTogJ3Rvb2xiYXInLFxuICAgICAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXG4gICAgICAgICAgYm94Q29udGVudDogKGNlbGxWaWV3KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFsby5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5pc0xpbmsoKSkge1xuICAgICAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcbiAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgICAgICAgIG5hbWU6ICdsaW5rLXBvaW50ZXJkb3duJyxcbiAgICAgICAgICB0b29sczogW1xuICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKCksXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQW5jaG9yKCksXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQXJyb3doZWFkKCksXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKCksXG4gICAgICAgICAgICBuZXcgbnMuU2VnbWVudHMoKSxcbiAgICAgICAgICAgIG5ldyBucy5Cb3VuZGFyeSh7IHBhZGRpbmc6IDE1IH0pLFxuICAgICAgICAgICAgbmV3IG5zLlJlbW92ZSh7IG9mZnNldDogLTIwLCBkaXN0YW5jZTogNDAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNlbGxWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICB9XG5cbiAgICAgIC8qIFFNUy0yMzY0OiBzaG93IGxpbmsgYW5kIHBvaXRlciBjaGFuZ2UgdG8gaGFuZCAqL1xuICAgICAgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdmVyJyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgam9pbnQtZWxlbWVudGApO1xuICAgICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHNoYXBlSWQgPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGlzdFtpXS5hdHRyaWJ1dGVzWzBdLm5vZGVWYWx1ZSAhPT0gc2hhcGVJZCkge1xuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaGFwZURldGFpbE1vZGVsID0gd2luZG93W2BTSEFQRV9ERVRBSUxfTU9ERUxgXTtcbiAgICAgICAgICAgIGlmICghc2hhcGVEZXRhaWxNb2RlbCkge1xuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNoYXBlRGV0YWlsTW9kZWwuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB4LnNoYXBlSWQgPT09IHNoYXBlSWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2hhcGVEZXRhaWwgPSBzaGFwZURldGFpbE1vZGVsW2luZGV4XTtcbiAgICAgICAgICAgIGxldCBjb25uZWN0aW9uTmFtZSA9ICcnO1xuICAgICAgICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQUNUSVZJVFk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICAgICAgICAgICAgc3dpdGNoIChzaGFwZURldGFpbC5kb2N1bWVudE1vZGVsLnJlbGF0ZWRJdGVtc1swXS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmRvY3VtZW50OlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19ET0NVTUVOVDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3M6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX1BST0NFU1M7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5hcmVhOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19BUkVBO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuaGFuZGJvb2s6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0ZPTERFUjtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fSU5URVJDT05ORUNURURfUFJPQ0VTUztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fREVWSUFUSU9OO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdCkge1xuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0NIRUNLTElTVDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Db21wbGlhbmNlKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQ09NUExJQU5DRV9SRVFVSVJFTUVOVDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xuICAgICAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgYm94Q29udGVudDogY29ubmVjdGlvbk5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaGFsby5yZW5kZXIoKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcbiAgICAgICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5jb250YWlucygnam9pbnQtZnJlZS10cmFuc2Zvcm0nKSkge1xuICAgICAgICAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmFkZCgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW91dCcgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcbiAgICAgICAgICBjZWxsVmlldyxcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGJveENvbnRlbnQ6ICcnXG4gICAgICAgIH0pO1xuICAgICAgICBoYWxvLnJlbmRlcigpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xuICAgICAgICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xuICAgICAgICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbiAqL1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb3NlVG9vbHMoKSB7XG4gICAgICBwYXBlci5yZW1vdmVUb29scygpO1xuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XG4gICAgICBqb2ludC51aS5GcmVlVHJhbnNmb3JtLmNsZWFyKHBhcGVyKTtcbiAgICAgIGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xuICAgICAgam9pbnQudWkuSGFsby5jbGVhcihwYXBlcik7XG5cbiAgICAgIGNvbnN0IGNlbGxzID0gZ3JhcGguZ2V0Q2VsbHMoKTtcbiAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcbiAgICAgICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgICAgY2VsbC5zZXQoJ3onLCAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbikge1xuICAgICAgY29uc3QgbW9kZWxzID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpIHx8IFtdO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTaGFwZUlkID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXTtcbiAgICAgIHJldHVybiAhIXNlbGVjdGVkU2hhcGVJZCAmJiBtb2RlbHMuZmlsdGVyKG1vZGVsID0+IG1vZGVsLmF0dHJpYnV0ZXMuaWQgPT0gc2VsZWN0ZWRTaGFwZUlkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG93U3RhdHVzKG1lc3NhZ2UsIHR5cGUpIHtcbiAgICAgICQoJy5zdGF0dXMnKS5yZW1vdmVDbGFzcygnaW5mbyBlcnJvciBzdWNjZXNzJykuYWRkQ2xhc3ModHlwZSkuaHRtbChtZXNzYWdlKTtcbiAgICAgICQoJyNzdGF0dXNiYXItY29udGFpbmVyJylcbiAgICAgICAgLmRlcXVldWUoKVxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIC5kZWxheSgzMDAwKVxuICAgICAgICAucXVldWUoKCkgPT4ge1xuICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlTGluayhncmFwaCwgbGluaywgbGlua0NvbnN0cnVjdG9yKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxuICAgICAgY29uc3QgbGluazIgPSBuZXcgbGlua0NvbnN0cnVjdG9yKHtcbiAgICAgICAgc291cmNlOiBsaW5rLnNvdXJjZSgpLFxuICAgICAgICB0YXJnZXQ6IGxpbmsudGFyZ2V0KCksXG4gICAgICAgIHZlcnRpY2VzOiBsaW5rLnZlcnRpY2VzKClcbiAgICAgIH0pO1xuICAgICAgbGluay5yZW1vdmUoeyByZXBsYWNlTGluazogdHJ1ZSB9KTtcbiAgICAgIGxpbmsyLnNldCgneicsIC0xKTtcbiAgICAgIGxpbmsyLmFkZFRvKGdyYXBoKTtcbiAgICB9XG5cbiAgICBncmFwaC5vbignY2hhbmdlJywgKGNlbGwsIG9wdCkgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZVRleHRJbnNpZGUoY2VsbCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlTGlua0xhYmVsKGNlbGwsIDEyKTtcbiAgICAgIHRoaXMub25DaGFuZ2VBbGxpZ21lbnQoY2VsbCwgb3B0KTtcbiAgICAgIGlmICghb3B0Lmluc3BlY3RvciB8fCAhZnJlZVRyYW5zZm9ybSB8fCBjZWxsLmdldCgndHlwZScpICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbldpZHRoID0gbWluU2l6ZS53aWR0aDtcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5IZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcbiAgICB9KTtcblxuICAgIC8qIFRPT0xCQVIgKi9cbiAgICBjb25zdCB0b29sYmFyID0gbmV3IGpvaW50LnVpLlRvb2xiYXIoe1xuICAgICAgdG9vbHM6IHRvb2xiYXJDb25maWcudG9vbHMsXG4gICAgICByZWZlcmVuY2VzOiB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIsXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sYmFyQ29tbWFuZHMgPSB7XG4gICAgICB0b0pTT046ICgpID0+IHtcbiAgICAgICAgY29uc3Qgd2luZG93RmVhdHVyZXMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz1ubyc7XG4gICAgICAgIGNvbnN0IHdpbmRvd05hbWUgPSBfLnVuaXF1ZUlkKCdqc29uX291dHB1dCcpO1xuICAgICAgICBjb25zdCBqc29uV2luZG93ID0gd2luZG93Lm9wZW4oJycsIHdpbmRvd05hbWUsIHdpbmRvd0ZlYXR1cmVzKTtcblxuICAgICAgICBqc29uV2luZG93LmRvY3VtZW50LndyaXRlKEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSk7XG4gICAgICB9LFxuICAgICAgbG9hZEdyYXBoOiAoKSA9PiB7XG4gICAgICAgIGdkQXV0aCgoKSA9PiB7XG4gICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGluZy4uJywgJ2luZm8nKTtcbiAgICAgICAgICBnZExvYWQoKG5hbWUsIGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihqc29uKTtcbiAgICAgICAgICAgICAgY29uc3QgZWxGaWxlTmFtZSA9IDxIVE1MQnV0dG9uRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKTtcbiAgICAgICAgICAgICAgZWxGaWxlTmFtZS52YWx1ZSA9IG5hbWUucmVwbGFjZSgvLmpzb24kLywgJycpO1xuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH0sXG5cbiAgICAgIHNhdmVHcmFwaDogKCkgPT4ge1xuICAgICAgICBnZEF1dGgoKCkgPT4ge1xuICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmluZy4uJywgJ2luZm8nKTtcbiAgICAgICAgICAvLyBsZXQgbmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XG4gICAgICAgICAgZ2RTYXZlKG5hbWUudmFsdWUsIEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSwgKGZpbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmVkLicsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdmYWlsZWQuJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VsZWN0ZWQ6IChldmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1RlbXApIHtcbiAgICAgICAgICB0aGlzLmpzb25UZW1wQ29udGVudCA9IHRoaXMuanNvbk9yaWdpbmFsQ29udGVudDtcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5qc29uQ29udGVudCkge1xuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9GTE9XQ0hBUlRfSURdID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF0gPSBldmVudC5qc29uQ29udGVudDtcbiAgICAgICAgICBpZiAodGhpcy5pc1Nob3dDb25maXJtTWVzc2FnZSgpKSB7XG4gICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0Lk5FWFRfQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XG4gICAgICB9LFxuICAgICAgb25DbGVhcjogKCkgPT4ge1xuICAgICAgICBncmFwaC5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgIH0sXG4gICAgICBvbkRlbGV0ZVRlbXBsYXRlOiAoKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgJiZcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09ICcnICYmXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICE9PSBndWlkSGVscGVyLmVtcHR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuaXNEZWxldGVUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gdHJ1ZTtcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuREVMRVRFX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0Lk1VU1RfU0VMRUNUX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIG9uU2F2ZUFzVGVtcGxhdGU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1NhdmVBc1RlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNUZW1wKSB7XG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XG4gICAgICAgICAgdGhpcy5pc1RlbXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0FWRV9BU19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgfSxcblxuICAgICAgb25SZXNldFRvVGVtcFRlbXBsYXRlOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXTtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlKSB7XG4gICAgICAgICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5SRVNFVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjaGFuZ2VTbmFwTGluZXMoY2hlY2tlZCkge1xuICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgIHNuYXBsaW5lcy5zdGFydExpc3RlbmluZygpO1xuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbmFwbGluZXMuc3RvcExpc3RlbmluZygpO1xuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBhcHBseU9uU2VsZWN0aW9uKG1ldGhvZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSAndG9Gcm9udCcpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzWzBdLmdldCgndHlwZScpO1xuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBncmFwaC5zdGFydEJhdGNoKCdzZWxlY3Rpb24nKTtcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XG4gICAgICAgICAgbW9kZWxbbWV0aG9kXSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZ3JhcGguc3RvcEJhdGNoKCdzZWxlY3Rpb24nKTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGVGdWxsc2NyZWVuOiAoKSA9PiB7XG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSAhdGhpcy5pc0Z1bGxTY3JlZW47XG5cbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdPy5jbGFzc0xpc3QucmVtb3ZlKCdjbG9zZS1mdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9jZGstb3ZlcmxheScpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJylbMF0/LmNsYXNzTGlzdC5yZW1vdmUoJ2p1c3RpZnktY29udGVudF9jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWZ0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmlnaHRwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZFBhbmVsKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdPy5jbGFzc0xpc3QuYWRkKCdjbG9zZS1mdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9jZGstb3ZlcmxheScpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJylbMF0/LmNsYXNzTGlzdC5hZGQoJ2p1c3RpZnktY29udGVudF9jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWZ0cGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmlnaHRwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZFBhbmVsKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsJyk7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpLnN0eWxlLmhlaWdodCA9ICc0MDBweCc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJykuc3R5bGUuaGVpZ2h0ID0gJzUwMHB4JztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRvb2xiYXIub24oe1xuICAgICAgJ3RvLWpzb246cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvSlNPTixcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXG4gICAgICAnc2F2ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuc2F2ZUdyYXBoLFxuICAgICAgJ2NsZWFyOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkNsZWFyLFxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGpvaW50VG9vbHNFbCA9IHBhcGVyLnN2Zz8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnam9pbnQtdG9vbHMnKTtcbiAgICAgICAgaWYgKGpvaW50VG9vbHNFbCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRUb29sc0VsLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBqb2ludFRvb2xzRWxbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgam9pbnQuZm9ybWF0LnByaW50KHBhcGVyKTtcbiAgICAgIH0sXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXG4gICAgICAnc2VsZWN0VGVtcGxhdGU6b3B0aW9uOnNlbGVjdCc6IHRvb2xiYXJDb21tYW5kcy5vblNlbGVjdGVkLFxuICAgICAgJ2RlbGV0ZVRlbXBsYXRlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5vbkRlbGV0ZVRlbXBsYXRlLFxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcbiAgICAgICd0by1mcm9udDpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0Zyb250JyksXG4gICAgICAndG8tYmFjazpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMuYXBwbHlPblNlbGVjdGlvbi5iaW5kKHRoaXMsICd0b0JhY2snKSxcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXG4gICAgICAnZ3JpZC1zaXplOmNoYW5nZSc6IHBhcGVyLnNldEdyaWRTaXplLmJpbmQocGFwZXIpLFxuICAgICAgJ2Z1bGxzY3JlZW46cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLnRvZ2dsZUZ1bGxzY3JlZW5cbiAgICB9KTtcblxuICAgICQoJyN0b29sYmFyLWNvbnRhaW5lcicpLmh0bWwoJycpO1xuICAgIHRvb2xiYXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjdG9vbGJhci1jb250YWluZXInKTtcblxuICAgIGNvbnN0IHpvb21Ub29sID0gbmV3IGpvaW50LnVpLlRvb2xiYXIoe1xuICAgICAgLy8gaW5pdGkgYWxpemUgdG9vbHMgd2l0aCBkZWZhdWx0IHNldHRpbmdzXG4gICAgICB0b29sczogWyd6b29tVG9GaXQnLCAnem9vbUluJywgJ3pvb21PdXQnXSxcbiAgICAgIHJlZmVyZW5jZXM6IHtcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcbiAgICAgICAgY29tbWFuZE1hbmFnZXJcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHpvb21Ub29sLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3pvb21Ub29sYmFyJyk7XG5cbiAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XG4gICAgICB0YXJnZXQ6ICdbZGF0YS10b29sdGlwXScsXG4gICAgICBjb250ZW50KGVsKSB7XG4gICAgICAgIHJldHVybiBlbC5kYXRhc2V0LnRvb2x0aXA7XG4gICAgICB9LFxuICAgICAgdG9wOiAnLmpvaW50LXRvb2xiYXInLFxuICAgICAgcGFkZGluZzogMTAsXG4gICAgICBkaXJlY3Rpb246ICd0b3AnXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXG4gICAgc3RlbmNpbFxuICAgICAgLmdldEdyYXBoKClcbiAgICAgIC5nZXQoJ2NlbGxzJylcbiAgICAgIC5lYWNoKChjZWxsKSA9PiB7XG4gICAgICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcbiAgICAgICAgICB0YXJnZXQ6IGAuam9pbnQtc3RlbmNpbCBbbW9kZWwtaWQ9XCIke2NlbGwuaWR9XCJdYCxcbiAgICAgICAgICBjb250ZW50OiBjZWxsLmdldCgndHlwZScpLnNwbGl0KCcuJylbMV0sXG4gICAgICAgICAgYm90dG9tOiAnLmpvaW50LXN0ZW5jaWwnLFxuICAgICAgICAgIGRpcmVjdGlvbjogJ2JvdHRvbScsXG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgLyogTG9hZCAgcHJvY2VzcyBkaWdyYW0gKi9cbiAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudCk7XG4gICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xuICAgIHBhcGVyU2Nyb2xsZXIucG9zaXRpb25Db250ZW50KCd0b3AtbGVmdCcsIHsgcGFkZGluZzogNTAsIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUgfSk7XG5cbiAgICAvKiBTZXQgZyByYXBoIG9iamVjdCAqL1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5KT0lOVF0gPSBqb2ludDtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuR1JBUEhdID0gZ3JhcGg7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl0gPSBwYXBlclNjcm9sbGVyO1xuICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ESUFHUkFNX0xPQURFRCwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICB9XG5cbiAgbG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50Pzogc3RyaW5nKSB7XG4gICAgaWYgKCFqc29uQ29udGVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBncmFwaC5mcm9tSlNPTihqc29uQ29udGVudCk7XG4gIH1cblxuICBhZGRJdGVtVGVtcGxhdGUoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcsIGRpYWdyYW1UZW1wbGF0ZT86IGFueSkge1xuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgIGNvbnRlbnQ6IGRpYWdyYW1UZW1wbGF0ZS50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgZmxvd0NoYXJ0SWQsXG4gICAgICAgICAgbmFtZTogZGlhZ3JhbVRlbXBsYXRlLm5hbWUsXG4gICAgICAgICAganNvbkNvbnRlbnQ6IGRpYWdyYW1UZW1wbGF0ZS5qc29uQ29udGVudCxcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4geC5jb250ZW50ID09PSBvcHRpb24uY29udGVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlU2VsZWN0SXRlbShmbG93Q2hhcnRJZD86IHN0cmluZykge1xuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKFxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGkuZmxvd0NoYXJ0SWQgPT09IGZsb3dDaGFydElkO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIDFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUZW1wR3JhcGgoKSB7XG4gICAgaWYgKHRoaXMuanNvblRlbXBDb250ZW50KSB7XG4gICAgICB0aGlzLmxvYWRQcm9jZXNzRGlhZ3JhbShKU09OLnBhcnNlKHRoaXMuanNvblRlbXBDb250ZW50KSk7XG4gICAgfVxuICAgIHRoaXMuaXNUZW1wID0gdHJ1ZTtcbiAgICB0aGlzLmlzUmVzZXQgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSBmYWxzZTtcbiAgfVxuXG4gIGdldE9yaWdpbkZvclNlbGYoKSB7XG4gICAgcmV0dXJuICcqJztcbiAgfVxuXG4gIHNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCkge1xuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcbiAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uaW5uZXJIVE1MID0gRmxvd0NoYXJ0Q29uc3QuU0VMRUNUX1RFTVBMQVRFO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldEl0ZW1GbG93Q2hhcnRJZChmbG93Q2hhcnRJZD86IHN0cmluZykge1xuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QgJiYgYXJyU2VsZWN0WzBdLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLmZvckVhY2goKHgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHguZmxvd0NoYXJ0SWQgPT09IGZsb3dDaGFydElkKSB7XG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xuICAgICAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IHguY29udGVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTaG93Q29uZmlybU1lc3NhZ2UoKSB7XG4gICAgY29uc3QgbXlHcmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XG4gICAgY29uc3QganNvbiA9IG15R3JhcGgudG9KU09OKCk7XG4gICAgaWYgKGpzb24uY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfTk9UX1NIT1dfQUdBSU5dID0gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfTk9UX1NIT1dfQUdBSU5dKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXRUcmFuc2l0aW9uUG9pbnQoanNvbkNvbnRlbnQ6IG9iamVjdCwgcGFwZXJTY3JvbGxlcjogYW55KSB7XG4gICAgaWYgKGpzb25Db250ZW50KSB7XG4gICAgICBjb25zdCBjZWxscyA9IGpzb25Db250ZW50W2BjZWxsc2BdO1xuICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgbGV0IHkgPSAwO1xuICAgICAgICBjZWxscy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgaWYgKGUucG9zaXRpb24gJiYgZS5wb3NpdGlvbikge1xuICAgICAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkge1xuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUucG9zaXRpb24ueCA8IHgpIHtcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnkgPCB5KSB7XG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoeCAhPT0gMCAmJiB5ICE9PSAwKSB7XG4gICAgICAgICAgeCA9IHggPiAyMCA/IHggLSAyMCA6IHg7XG4gICAgICAgICAgeSA9IHkgPiAyMCA/IHkgLSAyMCA6IHk7XG4gICAgICAgICAgcGFwZXJTY3JvbGxlci50cmFuc2l0aW9uVG9Qb2ludCh4LCB5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9wZW5TaGFwZUZ1bmN0aW9uYWxpdHkoTEFORzogYW55KSB7XG4gICAgY29uc3QgbXlDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xuICAgIGlmICghIW15Q2VsbFZpZXcpIHtcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jbG9zZSgpO1xuICAgICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORywgbnVsbCk7XG4gICAgICBjb25zdCBjZWxsID0gbXlDZWxsVmlldy5tb2RlbDtcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XG4gICAgICAgIGNlbGwsXG4gICAgICAgIGlucHV0czogaW5wdXRzW3R5cGVdLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxuICAgICAgICAgIGRlZmF1bHRzOiB7IGluZGV4OiAyIH0sXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcbiAgICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0Wm9vbVRvRml0KGVkaXRNb2RlOiBudW1iZXIpIHtcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xuICAgICAgcGFwZXJTY3JvbGxlci56b29tVG9GaXQoeyBwYWRkaW5nOiAyMCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhcGVyQ2VudGVyKGVkaXRNb2RlOiBudW1iZXIpIHtcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xuICAgICAgcGFwZXJTY3JvbGxlci5jb250ZW50VG9DZW50ZXIoeyBwYWRkaW5nOiAyMCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2Nyb2xsVG9Db250ZW50KCkge1xuICAgIGNvbnN0IGdyYXBoID0gd2luZG93W2BncmFwaGBdO1xuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xuICAgIGlmIChncmFwaCAmJiBwYXBlclNjcm9sbGVyKSB7XG4gICAgICBjb25zdCBqc29uQ29udGVudE9iaiA9IGdyYXBoLnRvSlNPTigpO1xuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCkge1xuICAgICAgICBwYXBlclNjcm9sbGVyLnNjcm9sbFRvQ29udGVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFwZXJTY3JvbGxlci5jZW50ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZVRleHRJbnNpZGUoY2VsbDogYW55KSB7XG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5FdmVudCcpIHtcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ21pZGRsZSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzIwJSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICcyMCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSB7XG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzcwJSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICc3MCUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuR2F0ZXdheScgfHxcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5Db252ZXJzYXRpb24nIHx8XG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YU9iamVjdCcgfHxcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhU3RvcmUnXG4gICAgKSB7XG4gICAgICBpZiAoY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLnRleHQuc3R5bGVbJ3RleHQtaW5zaWRlJ10pIHtcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSB7XG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbFsndGV4dFdyYXAnXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcbiAgICBpZiAoY2VsbC5pc0xpbmsoKSkge1xuICAgICAgbGV0IHNpemUgPSBkZWZTaXplO1xuICAgICAgbGV0IHJlZlBvcyA9IDA7XG4gICAgICBjb25zdCBsaW5rSWQgPSBjZWxsLmlkO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGxpbmtJZCA9PT0gZS5pZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZWZQb3MgKz0gMTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChcbiAgICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5hdHRyaWJ1dGVzLmF0dHJzLnRleHQgJiZcbiAgICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5hdHRyaWJ1dGVzLmF0dHJzLnRleHRbJ2ZvbnQtc2l6ZSddXG4gICAgICApIHtcbiAgICAgICAgc2l6ZSA9IGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXTtcbiAgICAgIH1cbiAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8ucHJvcCgnbGFiZWxzLzAvYXR0cnMvbGFiZWwvZm9udFNpemUnLCBzaXplKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUFsbGlnbWVudChjZWxsOiBhbnksIG9wdDogYW55KSB7XG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb3B0LmRpcmVjdGlvbiAmJlxuICAgICAgKG9wdC5kaXJlY3Rpb24gPT09ICd0b3AtcmlnaHQnIHx8XG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICd0b3AtcmlnaHQnIHx8XG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tcmlnaHQnIHx8XG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tbGVmdCcpXG4gICAgKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XG4gICAgICBjb25zdCBoZWFkZXJMYWJlbEFuY2hvciA9IGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbFsndGV4dC1hbmNob3InXTtcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIGhlYWRlckxhYmVsQW5jaG9yLCBoZWlnaHQpO1xuXG4gICAgICAvLyB1cGRhdGUgbGFzdCBsYW5lIHZhbHVlXG4gICAgICBpZiAoIXRoaXMuaXNVbmRlZmluZWRTaXplKGNlbGwuYXR0cmlidXRlcykpIHtcbiAgICAgICAgY29uc3QgaCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGNlbGwuYXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IGIgPSBoIC0gdDtcbiAgICAgICAgaWYgKGIgPiAwKSB7XG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xuXG4gICAgICAgICAgY29uc3QgbGFuZSA9IGBsYW5lc18ke2luZGV4fWA7XG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xuXG4gICAgICAgICAgY29uc3QgbGFuZSA9IGBsYW5lc18ke2luZGV4fWA7XG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aCA9PT0gJ2F0dHJzL2hlYWRlckxhYmVsL3RleHQtYW5jaG9yJykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xuICAgICAgY29uc3QgdGV4dEFuY2hvciA9IG9wdC5wcm9wZXJ0eVZhbHVlO1xuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgdGV4dEFuY2hvciwgaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICBzZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbDogYW55LCB0ZXh0QW5jaG9yOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0ZXh0QW5jaG9yKSB7XG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IDg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLSA4O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaXNVbmRlZmluZWRTaXplKGF0dHJpYnV0ZXMpIHtcbiAgICBsZXQgYlJlc3VsdCA9IGZhbHNlO1xuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoKSB7XG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmV2ZXJ5KChlKSA9PiB7XG4gICAgICAgIGlmICghZS5zaXplKSB7XG4gICAgICAgICAgYlJlc3VsdCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBiUmVzdWx0O1xuICB9XG5cbiAgZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoKSB7XG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgaWYgKGUuc2l6ZSkge1xuICAgICAgICAgIHRvdGFsICs9IGUuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0b3RhbDtcbiAgfVxuXG4gIHNldERpYWdyYW1UZW1wbGF0ZXMoZGlhZ3JhbVRlbXBsYXRlczogRGlhZ3JhbVRlbXBsYXRlc1tdKSB7XG4gICAgaWYgKHRvb2xiYXJDb25maWcgJiYgdG9vbGJhckNvbmZpZy50b29scykge1xuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgICAgICAgIGluZGV4OiAxLFxuICAgICAgICAgICAgY29udGVudDogeC50ZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgICBmbG93Q2hhcnRJZDogeC5mbG93Q2hhcnRJZCxcbiAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcbiAgICAgICAgICAgIGpzb25Db250ZW50OiB4Lmpzb25Db250ZW50LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguY29udGVudC50b0xvd2VyQ2FzZSgpID09PSBvcHRpb24uY29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0Q2VsbFZpZXcoKSB7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvb2xUb29scyhwb29sVmlldywgY29vcmRpbmF0ZXMpIHtcbiAgdmFyIHBvb2wgPSBwb29sVmlldy5tb2RlbDtcblxuICAvLyBJZiB0aGVyZSBpcyBhIGxhbmUgdW5kZXIgdGhlIHBvaW50ZXIgKG1vdXNlL3RvdWNoKSxcbiAgLy8gYWRkIHRoZSBzd2ltbGFuZSB0b29scyBhbmQgcmVtb3ZlIHRoZSBGcmVlVHJhbnNmb3JtIGZyb20gdGhlIGNlbGxcbiAgdmFyIGxhbmVzSWRzID0gcG9vbC5nZXRMYW5lc0Zyb21Qb2ludChjb29yZGluYXRlcyk7XG4gIGlmIChsYW5lc0lkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgdmFyIGxhbmVJZCA9IGxhbmVzSWRzWzBdO1xuXG4gIHZhciBib3VuZGFyeVRvb2wgPSBuZXcgam9pbnQuZWxlbWVudFRvb2xzLlN3aW1sYW5lQm91bmRhcnkoe1xuICAgIGxhbmVJZDogbGFuZUlkLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgJ2ZpbGwnOiAnbm9uZScsXG4gICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcbiAgICAgICdzdHJva2UnOiAnIzM0OThkYidcbiAgICB9XG4gIH0pO1xuICB2YXIgdHJhbnNmb3JtVG9vbCA9IG5ldyBqb2ludC5lbGVtZW50VG9vbHMuU3dpbWxhbmVUcmFuc2Zvcm0oe1xuICAgIGxhbmVJZDogbGFuZUlkLFxuICAgIG1pblNpemU6IDYwLFxuICAgIHBhZGRpbmc6IDAsXG4gIH0pO1xuICB2YXIgZWxlbWVudFRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcbiAgICB0b29sczogW2JvdW5kYXJ5VG9vbCwgdHJhbnNmb3JtVG9vbF1cbiAgfSk7XG4gIHBvb2xWaWV3LmFkZFRvb2xzKGVsZW1lbnRUb29sc1ZpZXcpO1xuICBqb2ludC51aS5GcmVlVHJhbnNmb3JtLmNsZWFyKHBhcGVyKTtcbn1cbiJdfQ==
|
1468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvcW1zLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLGlCQUFpQixNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sZUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNyRyxPQUFPLFVBQVUsTUFBTSxxREFBcUQsQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQy9GLE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7OztBQUs3RSxJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksS0FBVSxDQUFDO0FBQ2YsSUFBSSxTQUFjLENBQUM7QUFDbkIsSUFBSSxhQUFrQixDQUFDO0FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FB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QUNILElBQUksZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUM3QyxLQUFLLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO0tBQ3JDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2VudW1zL3NoYXBlLWZsb3ctY2hhcnQtY29ubmVjdGlvbi10eXBlJztcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vam9pbnRKUy9icG1uL2luc3BlY3Rvci5mdW5jdGlvbic7XG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gJy4uL2NvbW1vbi9qb2ludEpTL2JwbW4vdG9vbGJhci5mdW5jdGlvbic7XG5pbXBvcnQgeyBGbG93Q2hhcnRDb25zdCB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3QnO1xuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vZW51bXMvZmxvd2NoYXJ0LXZpZXctbW9kZS5lbnVtJztcbmltcG9ydCBndWlkSGVscGVyIGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlcic7XG5pbXBvcnQgeyBEaWFncmFtVGVtcGxhdGVzIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvbW9kZWxzL2RpYWdyYW0tdGVtcGxhdGUubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XG5pbXBvcnQgeyBSZWxhdGVkSXRlbVR5cGUgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vZW51bXMvcmVsYXRlZC10by1pdGVtLXR5cGUnO1xuaW1wb3J0IEJQTU5DdXN0b21GdW5jdGlvbiBmcm9tICcuLi9jb21tb24vam9pbnRKUy9icG1uL2JwbW4uY3VzdG9tLmZ1bmN0aW9uJztcblxuLyogRGVjbGFyZSBqb2ludGpzIG9iamVjdCAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZhclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcbmxldCBncmFwaDogYW55O1xubGV0IHBhcGVyOiBhbnk7XG5sZXQgc2VsZWN0aW9uOiBhbnk7XG5sZXQgdG9vbGJhckNvbmZpZzogYW55O1xuY29uc3QgYnBtbjIgPSBqb2ludC5zaGFwZXMuYnBtbjI7XG5jb25zdCBzdGFuZGFyZCA9IGpvaW50LnNoYXBlcy5zdGFuZGFyZDtcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJwbW5TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIGlzU2F2ZUFzVGVtcGxhdGUgPSBmYWxzZTtcbiAgcHVibGljIGlzRGVsZXRlVGVtcGxhdGUgPSBmYWxzZTtcbiAgcHVibGljIGlzRGlzYWJsZVRvb2xiYXIgPSBmYWxzZTtcbiAgcHVibGljIGlzVGVtcCA9IHRydWU7XG4gIHB1YmxpYyBqc29uVGVtcENvbnRlbnQgPSAnJztcbiAgcHVibGljIGlzUmVzZXQgPSBmYWxzZTtcbiAgcHVibGljIGlzU2VsZWN0ZWRUZW1wbGF0ZSA9IGZhbHNlO1xuICBwdWJsaWMganNvbk9yaWdpbmFsQ29udGVudCA9ICcnO1xuICBwdWJsaWMgaXNGdWxsU2NyZWVuID0gdHJ1ZTtcbiAgcHVibGljIGlzRXhwYW5kZWRQYW5lbCA9IHRydWU7XG4gIExBTkc6IGFueTtcbiAgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICApIHtcblxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBidWlsZERpYWdyYW0oXG4gICAgZGlhZ3JhbVRlbXBsYXRlczogYW55LFxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxuICAgIGpzb25Db250ZW50OiBhbnksXG4gICAgZWRpdE1vZGU6IGFueSxcbiAgICBzaGFwZUltYWdlcz86IGFueSxcbiAgICB0b29sYmFyQ29uZmlndXJhdGlvbj86IGFueSxcbiAgICBsYW5ndWFnZT86IHN0cmluZ1xuICApIHtcbiAgICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKCdlbicpO1xuICAgIH1cbiAgICBlbHNlIHsgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhsYW5ndWFnZSkgfVxuICAgIHRoaXMuZXhjdXRlZEJ1aWxkRGlhZ3JhbShcbiAgICAgIGRpYWdyYW1UZW1wbGF0ZXMsXG4gICAgICBkaWFncmFtVGVtcGxhdGUsXG4gICAgICBicG1uVGhlbWUsXG4gICAgICBqc29uQ29udGVudCxcbiAgICAgIGVkaXRNb2RlLFxuICAgICAgdGhpcy5MQU5HLFxuICAgICAgc2hhcGVJbWFnZXMsXG4gICAgICB0b29sYmFyQ29uZmlndXJhdGlvblxuICAgICk7XG4gIH1cblxuICBleGN1dGVkQnVpbGREaWFncmFtKFxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcbiAgICBkaWFncmFtVGVtcGxhdGU6IGFueSxcbiAgICBicG1uVGhlbWU6IHN0cmluZyxcbiAgICBqc29uQ29udGVudDogYW55LFxuICAgIGVkaXRNb2RlOiBhbnksXG4gICAgTEFORzogYW55LFxuICAgIHNoYXBlSW1hZ2VzPzogYW55LFxuICAgIHRvb2xiYXJDb25maWd1cmF0aW9uPzogYW55XG4gICkge1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSBmYWxzZTtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuRURJVF9NT0RFXSA9IGVkaXRNb2RlO1xuICAgIGpvaW50LnNldFRoZW1lKGJwbW5UaGVtZSk7XG5cbiAgICBqc29uQ29udGVudCA/IGpzb25Db250ZW50ID0gSlNPTi5wYXJzZShqc29uQ29udGVudCkgOiBqc29uQ29udGVudCA9ICcnO1xuXG4gICAgY29uc3QgZ2RBdXRoID0gd2luZG93W2BnZEF1dGhgXTtcbiAgICBjb25zdCBnZExvYWQgPSB3aW5kb3dbYGdkTG9hZGBdO1xuICAgIGNvbnN0IGdkU2F2ZSA9IHdpbmRvd1tgZ2RTYXZlYF07XG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORywgc2hhcGVJbWFnZXMpO1xuXG4gICAgbGV0IGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xuXG4gICAgaWYgKCF0b29sYmFyQ29uZmlndXJhdGlvbilcbiAgICAgIHRvb2xiYXJDb25maWcgPSBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24oTEFORyk7XG4gICAgZWxzZVxuICAgICAgdG9vbGJhckNvbmZpZyA9IHRvb2xiYXJDb25maWd1cmF0aW9uO1xuICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uOiBBZGQgdGVtcGxhdGUgbGlzdCAqL1xuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzICYmIGRpYWdyYW1UZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBkaWFncmFtVGVtcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0udGVtcGxhdGVOYW1lLFxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IGl0ZW0uZmxvd0NoYXJ0SWQsXG4gICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICBqc29uQ29udGVudDogaXRlbS5qc29uQ29udGVudCxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmluZGV4ID09PSBvcHRpb24uaW5kZXg7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ3JhcGggPSBuZXcgam9pbnQuZGlhLkdyYXBoKHsgdHlwZTogJ2JwbW4nIH0pO1xuXG4gICAgLy8gb3ZlcndyaXRlIGN1c3RvbSBmdW5jdGlvblxuICAgIEJQTU5DdXN0b21GdW5jdGlvbi5jdXN0b21Kb2ludEpTQlBNTigpO1xuXG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XG4gICAgY29uc3Qga2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSBuZXcgam9pbnQudWkuQ2xpcGJvYXJkKCk7XG5cbiAgICBwYXBlciA9IG5ldyBqb2ludC5kaWEuUGFwZXIoe1xuICAgICAgd2lkdGg6IDgwMCxcbiAgICAgIGhlaWdodDogNjAwLFxuICAgICAgbW9kZWw6IGdyYXBoLFxuICAgICAgZ3JpZFNpemU6IGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3ID8gNSA6IDEwLFxuICAgICAgZHJhd0dyaWQ6IGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3LFxuICAgICAgYXN5bmM6IHRydWUsXG4gICAgICBzb3J0aW5nOiBqb2ludC5kaWEuUGFwZXIuc29ydGluZy5BUFBST1gsXG4gICAgICBpbnRlcmFjdGl2ZTogeyBsaW5rTW92ZTogZmFsc2UgfSxcbiAgICAgIHNuYXBMYWJlbHM6IHRydWUsXG4gICAgICAvLyBDb25uZWN0aW9uc1xuICAgICAgZGVmYXVsdExpbmsoZWxlbWVudFZpZXcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcbiAgICAgICAgICB6OiBlbGVtZW50Vmlldy5tb2RlbC5nZXQoJ3onKSAtIDEsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGxpbmU6IHtcbiAgICAgICAgICAgICAgZmxvd1R5cGU6ICdzZXF1ZW5jZSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNlbGxWaWV3Uy5tb2RlbDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gY2VsbFZpZXdULm1vZGVsO1xuICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXG4gICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsaW5rIHRvIGxpbmsgY29ubmVjdGlvblxuICAgICAgICBpZiAoc291cmNlLmlzTGluaygpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaXNMaW5rKCkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgZ3JvdXAgY29ubmVjdGlvbnNcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdicG1uMi5Hcm91cCcgfHwgdGFyZ2V0VHlwZSA9PT0gJ2JwbW4yLkdyb3VwJykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0QW5jaG9yOiB7XG4gICAgICAgIG5hbWU6ICdwZXJwZW5kaWN1bGFyJ1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IHtcbiAgICAgICAgbmFtZTogJ2JvdW5kYXJ5JyxcbiAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxuICAgICAgfSxcbiAgICAgIC8vIEVtYmVkZGluZ1xuICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcbiAgICAgIGZyb250UGFyZW50T25seTogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xuICAgICAgICBjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Vmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgY29uc3QgY2hpbGRUeXBlID0gY2hpbGRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAvLyBIaWdobGlnaHRpbmdcbiAgICAgIGhpZ2hsaWdodGluZzoge1xuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgbmFtZTogJ21hc2snLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHN0cm9rZTogJyMzNDk4ZGInLFxuICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcbiAgICAgICAgICAgICAgJ3N0cm9rZS1saW5lam9pbic6ICdyb3VuZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS5vbih7XG4gICAgICAnYmxhbms6cG9pbnRlcmRvd24nOiAoZXZ0LCB4LCB5KSA9PiB7XG4gICAgICAgIGNsb3NlVG9vbHMoKTtcbiAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XG4gICAgICAgIC8vIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xuICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xuICAgICAgICAgIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xuICAgICAgfSxcblxuICAgICAgJ2NlbGw6cG9pbnRlcnVwJzogKGNlbGxWaWV3KSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcbiAgICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSBzZWxlY3Rpb247XG4gICAgICAgIGlmIChjb2xsZWN0aW9uLmluY2x1ZGVzKGNlbGwpKSB7IHJldHVybjsgfVxuICAgICAgICBjb2xsZWN0aW9uLnJlc2V0KFtjZWxsXSk7XG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgbnVsbCk7XG4gICAgICB9LFxuXG4gICAgICAnbGluazptb3VzZWVudGVyJzogKGxpbmtWaWV3KSA9PiB7XG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcbiAgICAgICAgICBuYW1lOiAnbGluay1ob3ZlcicsXG4gICAgICAgICAgdG9vbHM6IFtcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQXJyb3doZWFkKCksXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcbiAgICAgICAgICBdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XG4gICAgICB9LFxuXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCdsaW5rLWhvdmVyJykpIHtcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnbGluazpjb25uZWN0JzogKGxpbmtWaWV3KSA9PiB7XG4gICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBsaW5rLmdldFNvdXJjZUNlbGwoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xuICAgICAgICBjb25zdCBsaW5rVHlwZSA9IGxpbmsuZ2V0KCd0eXBlJyk7XG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Db252ZXJzYXRpb25MaW5rKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFPYmplY3QnKSA+IC0xKSB7XG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5GbG93KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdlbGVtZW50Om1vdXNlb3Zlcic6IChjZWxsVmlldykgPT4ge1xuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcsIG51bGwpO1xuICAgICAgfSxcbiAgICAgICdlbGVtZW50Om1vdXNlb3V0JzogKGNlbGxWaWV3KSA9PiB7XG4gICAgICAgIGlmIChlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgbnVsbCk7XG4gICAgICB9LFxuICAgICAgJ2VsZW1lbnQ6cG9pbnRlcmRvd24nOiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkgPT4ge1xuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ2N0cmwgbWV0YScsIGV2dCkpIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uY29sbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBjZWxsLmlzTGluaygpIH0pKSB7XG4gICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBtaXhpbmcgbGlua3MgYW5kIGVsZW1lbnRzIGluIHRoZSBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW2NlbGxWaWV3Lm1vZGVsXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5hZGQoY2VsbFZpZXcubW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjbG9zZVRvb2xzKCk7XG4gICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XG4gICAgICAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICdjZWxsOnBvaW50ZXJjbGljayc6IGZ1bmN0aW9uIChjZWxsVmlldywgZXZ0LCB4LCB5KSB7XG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcgPyBqb2ludC5nLlBvaW50KHgsIHkpIDogbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzbmFwbGluZXMgPSBuZXcgam9pbnQudWkuU25hcGxpbmVzKHsgcGFwZXIgfSk7XG5cbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gbmV3IGpvaW50LnVpLlBhcGVyU2Nyb2xsZXIoe1xuICAgICAgcGFwZXIsXG4gICAgICBhdXRvUmVzaXplUGFwZXI6IHRydWUsXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxuICAgICAgY3Vyc29yOiAnZ3JhYidcbiAgICB9KTtcblxuICAgICQoJyNwYXBlci1jb250YWluZXInKS5odG1sKCcnKTtcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xuICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XG4gICAgcGFwZXJTY3JvbGxlci5yZW5kZXIoKS5jZW50ZXIoKTtcblxuICAgIHBhcGVyLm9uKCdibGFuazptb3VzZXdoZWVsJywgXy5wYXJ0aWFsKG9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xuICAgIHBhcGVyLm9uKCdjZWxsOm1vdXNld2hlZWwnLCBvbk1vdXNld2hlZWwsIHRoaXMpO1xuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xuICAgICAgcGFwZXJTY3JvbGxlci56b29tKGRlbHRhICogMC4xLCB7IG1pbjogMC4yLCBtYXg6IDUsIGdyaWQ6IDAuMSwgb3g6IHgsIG95OiB5IH0pO1xuICAgIH1cblxuICAgIC8qIFNFTEVDVElPTiAqL1xuICAgIHNlbGVjdGlvbiA9IG5ldyBqb2ludC51aS5TZWxlY3Rpb24oe1xuICAgICAgcGFwZXIsXG4gICAgICBncmFwaCxcbiAgICAgIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUsXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxuICAgIH0pO1xuXG4gICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ub24oJ3Jlc2V0IGFkZCByZW1vdmUnLCBvblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICBzZWxlY3Rpb24ub24oJ3NlbGVjdGlvbi1ib3g6cG9pbnRlcmRvd24nLCAoY2VsbFZpZXc6IGFueSwgZXZ0OiBhbnkpID0+IHtcbiAgICAgIC8vIFVuc2VsZWN0IGFuIGVsZW1lbnQgaWYgdGhlIENUUkwvTWV0YSBrZXkgaXMgcHJlc3NlZCB3aGlsZSBhIHNlbGVjdGVkIGVsZW1lbnQgaXMgY2xpY2tlZC5cbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVtb3ZlKGNlbGxWaWV3Lm1vZGVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKiBTVEVOQ0lMICovXG5cbiAgICBjb25zdCBzdGVuY2lsID0gbmV3IGpvaW50LnVpLlN0ZW5jaWwoe1xuICAgICAgZ3JhcGgsXG4gICAgICBwYXBlcixcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gY2VsbC5jbG9uZSgpO1xuICAgICAgICBjb25zdCB0eXBlID0gY2xvbmUuZ2V0KCd0eXBlJyk7XG5cbiAgICAgICAgLy8gc29tZSB0eXBlcyBvZiB0aGUgZWxlbWVudHMgbmVlZCByZXNpemluZyBhZnRlciB0aGV5IGFyZSBkcm9wcGVkXG4gICAgICAgIGNvbnN0IHNpemVNdWx0aXBsaWVyID0geyAnYnBtbjIuSGVhZGVyZWRQb29sJzogOCwgJ2JwbW4uQ2hvcmVvZ3JhcGh5JzogMiB9W3R5cGVdO1xuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNpemUgPSBjbG9uZS5nZXQoJ3NpemUnKTtcbiAgICAgICAgICBjbG9uZS5zZXQoJ3NpemUnLCB7XG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXG4gICAgICAgICAgICBoZWlnaHQ6IG9yaWdpbmFsU2l6ZS5oZWlnaHQgKiBzaXplTXVsdGlwbGllclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xuICAgICAgICAgICAgY2xvbmUuc2V0KCdwYWRkaW5nJywgeyB0b3A6IDAsIGxlZnQ6IDMwLCByaWdodDogMCwgYm90dG9tOiAwIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGVuY2lsLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3N0ZW5jaWwtY29udGFpbmVyJyk7XG5cbiAgICB2YXIgc3RlbmNpbFNoYXBlcyA9IFtcbiAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5FdmVudCh7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgbGFiZWw6IHtcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5ldyBicG1uMi5Hcm91cCh7XG4gICAgICAgIHNpemU6IHtcbiAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgaGVpZ2h0OiA4MFxuICAgICAgICB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGxhYmVsOiB7XG4gICAgICAgICAgICB0ZXh0OiAnR3JvdXAnLFxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICAvLyBMZWdhY3kgQlBNTiBTaGFwZXNcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2JwbW4yLkhlYWRlcmVkUG9vbCcsXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxuICAgICAgICBzaXplOiB7IHdpZHRoOiA5MCwgaGVpZ2h0OiA1MCB9LFxuICAgICAgICBsYW5lczogW3tcbiAgICAgICAgICBsYWJlbDogJ0xhbmUgMSdcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxhYmVsOiAnTGFuZSAyJ1xuICAgICAgICB9XSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBib2R5OiB7IGZpbGw6ICcjZmZmZmZmJyB9LFxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH0sXG4gICAgICAgICAgbGFuZUxhYmVsczogeyBmb250U2l6ZTogMTMgfSxcbiAgICAgICAgICBtaWxlc3RvbmVMYWJlbHM6IHsgZm9udFNpemU6IDEzIH1cbiAgICAgICAgfVxuICAgICAgfSwgbmV3IGpvaW50LnNoYXBlcy5icG1uLkNob3Jlb2dyYXBoeSh7XG4gICAgICAgIHBhcnRpY2lwYW50czogWydQYXJ0aWNpcGFudCAxJywgJ1BhcnRpY2lwYW50IDInXSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5NZXNzYWdlKHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KV07XG4gICAgLy8gTG9hZCBzaGFwZSBpbWFnZSBvciBub3RcbiAgICBpZiAoc2hhcGVJbWFnZXMgJiYgc2hhcGVJbWFnZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpZHggPSBzaGFwZUltYWdlcy5maW5kSW5kZXgoKGltZykgPT4ge1xuICAgICAgICByZXR1cm4gaW1nWydpc0RlZmF1bHQnXSA9PT0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaW1hZ2UgPSBzaGFwZUltYWdlc1tpZHhdO1xuICAgICAgc3RlbmNpbFNoYXBlcy5wdXNoKG5ldyBzdGFuZGFyZC5JbWFnZSh7XG4gICAgICAgIHR5cGU6ICdzdGFuZGFyZC5JbWFnZScsXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDgwIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaW1hZ2U6IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgeGxpbmtIcmVmOiBpbWFnZVxuICAgICAgICAgICAgICA/IGltYWdlWydpbWFnZVR5cGUnXSA9PT0gJ3N2ZydcbiAgICAgICAgICAgICAgICA/IGBkYXRhOmltYWdlLyR7aW1hZ2VbJ2ltYWdlVHlwZSddfSt4bWw7YmFzZTY0LCR7aW1hZ2VbJ2ltYWdlU3RyaW5nJ119YFxuICAgICAgICAgICAgICAgIDogYGRhdGE6aW1hZ2UvJHtpbWFnZVsnaW1hZ2VUeXBlJ119O2Jhc2U2NCwke2ltYWdlWydpbWFnZVN0cmluZyddfWBcbiAgICAgICAgICAgICAgOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejQ4SVVSUFExUlpVRVVnYzNabklGQlZRa3hKUXlBaUxTOHZWek5ETHk5RVZFUWdVMVpISURFdU1TOHZSVTRpSUNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk5SGNtRndhR2xqY3k5VFZrY3ZNUzR4TDBSVVJDOXpkbWN4TVM1a2RHUWlQanh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTWlJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lJSGRwWkhSb1BTSTFNM0I0SWlCb1pXbG5hSFE5SWpReWNIZ2lJSFpwWlhkQ2IzZzlJakFnTUNBMU15QTBNaUlnWlc1aFlteGxMV0poWTJ0bmNtOTFibVE5SW01bGR5QXdJREFnTlRNZ05ESWlJSGh0YkRwemNHRmpaVDBpY0hKbGMyVnlkbVVpUGp4blBqeG5JRzl3WVdOcGRIazlJakF1TkRraVBqeHdZWFJvSUdacGJHdzlJaU15TWpJeE16Z2lJR1E5SWswME9TNHpORFFzTTJNd0xqVTBNaXd3TERFdU1qVXRNQzR3TkRJc01TNHlOU3d3TGpWMk16UmpNQ3d3TGpVME1pMHdMamN3T0N3eExqVXRNUzR5TlN3eExqVm9MVFEyWXkwd0xqVTBNaXd3TFRBdU56VXRNQzQ1TlRndE1DNDNOUzB4TGpVZ2RpMHpOR013TFRBdU5UUXlMREF1TWpBNExUQXVOU3d3TGpjMUxUQXVOV2cwTmk0eU5TQk5ORGt1TXpRMExERm9MVFEyWXkweExqWTFMREF0TWk0M05Td3dMamcxTFRJdU56VXNNaTQxZGpNMFl6QXNNUzQyTlN3eExqRXNNeTQxTERJdU56VXNNeTQxYURRMklHTXhMalkxTERBc015NHlOUzB4TGpnMUxETXVNalV0TXk0MWRpMHpORU0xTWk0MU9UUXNNUzQ0TlN3MU1DNDVPVFFzTVN3ME9TNHpORFFzTVV3ME9TNHpORFFzTVhvaUx6NDhZMmx5WTJ4bElHWnBiR3c5SWlNeU1qSXhNemdpSUdONFBTSXpPQzR3T1RRaUlHTjVQU0l4TWk0MU1ESWlJSEk5SWpRdU16azRJaTgrUEhCaGRHZ2dabWxzYkQwaUl6SXlNakV6T0NJZ1pEMGlUVFV3TGpVNU5Dd3lOaTQ1TnpKc0xUY3VNVE0xTFRVdU9URTRZeTB4TGpBM05pMHdMamc0T0MweUxqY3lOaTB3TGpnMU5DMHpMamMwT1N3d0xqQTROR3d0Tnk0eU1qUXNOaTQxT0RKTU1UZ3VNalV4TERFeUxqSXhJR010TVM0d056TXRNUzR4TnpNdE1pNDRNall0TVM0eE9EWXRNeTQ1TVRjdE1DNHdNalJNTVM0MU9UUXNNalV1T1RJeVZqUXdhRFE0TGprNU0yTXdMakV4TlN3d0xEQXVNREEzTFRBdU1ESXhMREF1TURBM0xUQXVNREk1VmpJMkxqazNNbm9pTHo0OEwyYytQR2MrUEdjK1BHYytQSEJoZEdnZ1ptbHNiRDBpSXpNeFJEQkROaUlnWkQwaVRUUTVMak0wTkN3eVl6QXVOVFF5TERBc01TNHlOUzB3TGpBME1pd3hMakkxTERBdU5YWXpOR013TERBdU5UUXlMVEF1TnpBNExERXVOUzB4TGpJMUxERXVOV2d0TkRaakxUQXVOVFF5TERBdE1DNDNOUzB3TGprMU9DMHdMamMxTFRFdU5TQjJMVE0wWXpBdE1DNDFORElzTUM0eU1EZ3RNQzQxTERBdU56VXRNQzQxYURRMkxqSTFJRTAwT1M0ek5EUXNNR2d0TkRaakxURXVOalVzTUMweUxqYzFMREF1T0RVdE1pNDNOU3d5TGpWMk16UmpNQ3d4TGpZMUxERXVNU3d6TGpVc01pNDNOU3d6TGpWb05EWWdZekV1TmpVc01Dd3pMakkxTFRFdU9EVXNNeTR5TlMwekxqVjJMVE0wUXpVeUxqVTVOQ3d3TGpnMUxEVXdMams1TkN3d0xEUTVMak0wTkN3d1REUTVMak0wTkN3d2VpSXZQand2Wno0OFkybHlZMnhsSUdacGJHdzlJaU16TVVRd1F6WWlJR040UFNJek9DNHdPVFFpSUdONVBTSXhNUzQxTURJaUlISTlJalF1TXprNElpOCtQSEJoZEdnZ1ptbHNiRDBpSXpNeFJEQkROaUlnWkQwaVRUVXdMalU1TkN3eU5TNDVOekpzTFRjdU1UTTFMVFV1T1RFNFl5MHhMakEzTmkwd0xqZzRPQzB5TGpjeU5pMHdMamcxTkMwekxqYzBPU3d3TGpBNE5Hd3ROeTR5TWpRc05pNDFPREpNTVRndU1qVXhMREV4TGpJeElHTXRNUzR3TnpNdE1TNHhOek10TWk0NE1qWXRNUzR4T0RZdE15NDVNVGN0TUM0d01qUk1NUzQxT1RRc01qUXVPVEl5VmpNNWFEUTRMams1TTJNd0xqRXhOU3d3TERBdU1EQTNMVEF1TURJeExEQXVNREEzTFRBdU1ESTVWakkxTGprM01ub2lMejQ4TDJjK1BDOW5Qand2Wno0OEwzTjJaejRnJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgIHN0cm9rZTogJyMzMWQwYzYnLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcwJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHN0ZW5jaWwubG9hZChzdGVuY2lsU2hhcGVzKTtcblxuICAgIGpvaW50LmxheW91dC5HcmlkTGF5b3V0LmxheW91dChzdGVuY2lsLmdldEdyYXBoKCksIHtcbiAgICAgIGNvbHVtbnM6IDEwMCxcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXG4gICAgICBtYXJnaW5YOiAyMCxcbiAgICAgIG1hcmdpblk6IDIwLFxuICAgICAgY29sdW1uR2FwOiA0MCxcbiAgICAgIHZlcnRpY2FsR2FwOiAyMCxcbiAgICAgIHJlc2l6ZVRvRml0OiBmYWxzZVxuICAgIH0pO1xuICAgIGNvbnN0IHJlc2V0Q2VsbFZpZXcgPSB0aGlzLnJlc2V0Q2VsbFZpZXc7XG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxuICAgIHN0ZW5jaWwub24oJ2VsZW1lbnQ6ZHJvcCcsIChlbGVtZW50VmlldykgPT4ge1xuICAgICAgLy8gb3BlbiBpbnNwZWN0b3IgYWZ0ZXIgYSBuZXcgZWxlbWVudCBkcm9wcGVkIGZyb20gc3RlbmNpbFxuICAgICAgb3BlblRvb2xzKGVsZW1lbnRWaWV3LCBudWxsKTtcbiAgICB9KTtcblxuICAgIC8qIEtFWUJPQVJEICovXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XG4gICAgICBpbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICBrZXlib2FyZC5vbihcbiAgICAgICAge1xuICAgICAgICAgICdjdHJsK2MnOiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDb3B5IGFsbCBzZWxlY3RlZCBlbGVtZW50cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBsaW5rcy5cbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhc3RlZENlbGxzID0gY2xpcGJvYXJkLnBhc3RlQ2VsbHMoZ3JhcGgsIHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRlOiB7IGR4OiAyMCwgZHk6IDIwIH0sXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjZWxsLmlzRWxlbWVudCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBwYXN0ZWQgZWxlbWVudHMgZ2V0IHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIG1ha2VzIHRoZSBVWCBiZXR0ZXIgYXNcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGNhbiBpbW1lZGlhdGVseSBtYW5pcHVsYXRlIHRoZSBwYXN0ZWQgZWxlbWVudHMuXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xuICAgICAgICAgICAgY2xpcGJvYXJkLmN1dEVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XG4gICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHZhciBjZWxscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIGxldCBhbGxvd0RlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAod2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF0pIHtcbiAgICAgICAgICAgICAgdmFyIHNoYXBlRmxvd0NoYXJ0ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF07XG4gICAgICAgICAgICAgIC8vIENsZWFyIGFsbCBieSBjbGljayByZW1vdmUgYnV0dG9uXG4gICAgICAgICAgICAgIGlmIChjZWxscykge1xuICAgICAgICAgICAgICAgIGNlbGxzLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgc2hhcGVJZCA9IGUuYXR0cmlidXRlcy5pZDtcbiAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNoYXBlRmxvd0NoYXJ0LmZpbmRJbmRleChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhbGxvd0RlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFsbG93RGVsZXRlKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5FWElTVF9EQVRBLCBudWxsKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncmFwaC5yZW1vdmVDZWxscyhzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkpO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCt5JzogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAnY3RybCthJzogKCkgPT4ge1xuICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZ3JhcGguZ2V0RWxlbWVudHMoKSk7XG4gICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgwLjIsIHsgbWF4OiA1LCBncmlkOiAwLjIgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgICdjdHJsK21pbnVzJzogKGV2dCkgPT4ge1xuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oLTAuMiwgeyBtaW46IDAuMiwgZ3JpZDogMC4yIH0pO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQpID0+IHtcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdjcm9zc2hhaXInKTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgJ2tleXVwOnNoaWZ0JzogKCkgPT4ge1xuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2UoKSB7XG4gICAgICBjb25zdCB7IGNvbGxlY3Rpb24gfSA9IHNlbGVjdGlvbjtcblxuICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IHByaW1hcnlDZWxsOiBhbnkgPSBjb2xsZWN0aW9uLmZpcnN0KCk7XG4gICAgICAgIHNlbGVjdGlvbi5kZXN0cm95U2VsZWN0aW9uQm94KHByaW1hcnlDZWxsKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbi5sZW5ndGggPj0gMikge1xuICAgICAgICByZXNldENlbGxWaWV3KCk7XG4gICAgICAgIGNsb3NlVG9vbHMoKTtcblxuICAgICAgICBjb2xsZWN0aW9uLmVhY2goZnVuY3Rpb24gKGNlbGw6IGFueSkge1xuICAgICAgICAgIHNlbGVjdGlvbi5jcmVhdGVTZWxlY3Rpb25Cb3goY2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9wZW5Ub29scyhjZWxsVmlldywgY29vcmRpbmF0ZXMpIHtcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2xvc2VUb29scygpO1xuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xuXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcbiAgICAgICAgY2VsbCxcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW10pO1xuICAgICAgLy8gQWRkIHRoZSBjZWxsIGludG8gdGhlIHNlbGVjdGlvbiBjb2xsZWN0aW9uIHNpbGVudGx5XG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsLCB7IHNpbGVudDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcbiAgICAgICAgbGV0IG1pblNpemU7XG5cbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcbiAgICAgICAgICBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IFwiYnBtbjIuSGVhZGVyZWRQb29sXCIgJiYgY29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICBjcmVhdGVQb29sVG9vbHMoY2VsbFZpZXcsIGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyZWVUcmFuc2Zvcm0gPSBuZXcgam9pbnQudWkuRnJlZVRyYW5zZm9ybSh7XG4gICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgYWxsb3dPcnRob2dvbmFsUmVzaXplOiBmYWxzZSxcbiAgICAgICAgICBhbGxvd1JvdGF0aW9uOiBmYWxzZSxcbiAgICAgICAgICBtaW5XaWR0aDogbWluU2l6ZS53aWR0aCxcbiAgICAgICAgICBtaW5IZWlnaHQ6IG1pblNpemUuaGVpZ2h0XG4gICAgICAgIH0pLnJlbmRlcigpO1xuXG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XG4gICAgICAgICAgY2VsbFZpZXcsXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICB0eXBlOiAndG9vbGJhcicsXG4gICAgICAgICAgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSxcbiAgICAgICAgICBib3hDb250ZW50OiAoY2VsbFZpZXcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjZWxsVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYWxvLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLmlzTGluaygpKSB7XG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XG4gICAgICAgICAgbmFtZTogJ2xpbmstcG9pbnRlcmRvd24nLFxuICAgICAgICAgIHRvb2xzOiBbXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoKSxcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBbmNob3IoKSxcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBbmNob3IoKSxcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKSxcbiAgICAgICAgICAgIG5ldyBucy5TZWdtZW50cygpLFxuICAgICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXG4gICAgICAgICAgICBuZXcgbnMuUmVtb3ZlKHsgb2Zmc2V0OiAtMjAsIGRpc3RhbmNlOiA0MCB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY2VsbFZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcbiAgICAgIH1cblxuICAgICAgLyogUU1TLTIzNjQ6IHNob3cgbGluayBhbmQgcG9pdGVyIGNoYW5nZSB0byBoYW5kICovXG4gICAgICBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW92ZXInICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBqb2ludC1lbGVtZW50YCk7XG4gICAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3Qgc2hhcGVJZCA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXN0W2ldLmF0dHJpYnV0ZXNbMF0ubm9kZVZhbHVlICE9PSBzaGFwZUlkKSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsTW9kZWwgPSB3aW5kb3dbYFNIQVBFX0RFVEFJTF9NT0RFTGBdO1xuICAgICAgICAgICAgaWYgKCFzaGFwZURldGFpbE1vZGVsKSB7XG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2hhcGVEZXRhaWxNb2RlbC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHguc2hhcGVJZCA9PT0gc2hhcGVJZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaGFwZURldGFpbCA9IHNoYXBlRGV0YWlsTW9kZWxbaW5kZXhdO1xuICAgICAgICAgICAgbGV0IGNvbm5lY3Rpb25OYW1lID0gJyc7XG4gICAgICAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19BQ1RJVklUWTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTks7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuICAgICAgICAgICAgICBzd2l0Y2ggKHNoYXBlRGV0YWlsLmRvY3VtZW50TW9kZWwucmVsYXRlZEl0ZW1zWzBdLml0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0RPQ1VNRU5UO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUucHJvY2VzczpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fUFJPQ0VTUztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmFyZWE6XG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0FSRUE7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5oYW5kYm9vazpcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fRk9MREVSO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19JTlRFUkNPTk5FQ1RFRF9QUk9DRVNTO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb24pIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19ERVZJQVRJT047XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0KSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQ0hFQ0tMSVNUO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNvbXBsaWFuY2UpIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19DT01QTElBTkNFX1JFUVVJUkVNRU5UO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XG4gICAgICAgICAgICAgIGNlbGxWaWV3LFxuICAgICAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICBib3hDb250ZW50OiBjb25uZWN0aW9uTmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBoYWxvLnJlbmRlcigpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xuICAgICAgICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpKSB7XG4gICAgICAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuYWRkKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3V0JyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xuICAgICAgICAgIGNlbGxWaWV3LFxuICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXG4gICAgICAgICAgYm94Q29udGVudDogJydcbiAgICAgICAgfSk7XG4gICAgICAgIGhhbG8ucmVuZGVyKCk7XG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XG4gICAgICAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XG4gICAgICAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIFFNUy0yMTI1OiBTaG93IHByb2Nlc3MgY29ubmVjdCB0eXBlICovXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMudHlwZTtcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uICovXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvc2VUb29scygpIHtcbiAgICAgIHBhcGVyLnJlbW92ZVRvb2xzKCk7XG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcbiAgICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xuICAgICAgZnJlZVRyYW5zZm9ybSA9IG51bGw7XG4gICAgICBqb2ludC51aS5IYWxvLmNsZWFyKHBhcGVyKTtcblxuICAgICAgY29uc3QgY2VsbHMgPSBncmFwaC5nZXRDZWxscygpO1xuICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbCkgPT4ge1xuICAgICAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgICAgICBjZWxsLnNldCgneicsIC0xKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCBtb2RlbHMgPSBzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkgfHwgW107XG4gICAgICBjb25zdCBzZWxlY3RlZFNoYXBlSWQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdO1xuICAgICAgcmV0dXJuICEhc2VsZWN0ZWRTaGFwZUlkICYmIG1vZGVscy5maWx0ZXIobW9kZWwgPT4gbW9kZWwuYXR0cmlidXRlcy5pZCA9PSBzZWxlY3RlZFNoYXBlSWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3dTdGF0dXMobWVzc2FnZSwgdHlwZSkge1xuICAgICAgJCgnLnN0YXR1cycpLnJlbW92ZUNsYXNzKCdpbmZvIGVycm9yIHN1Y2Nlc3MnKS5hZGRDbGFzcyh0eXBlKS5odG1sKG1lc3NhZ2UpO1xuICAgICAgJCgnI3N0YXR1c2Jhci1jb250YWluZXInKVxuICAgICAgICAuZGVxdWV1ZSgpXG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmRlbGF5KDMwMDApXG4gICAgICAgIC5xdWV1ZSgoKSA9PiB7XG4gICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBsaW5rQ29uc3RydWN0b3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICBjb25zdCBsaW5rMiA9IG5ldyBsaW5rQ29uc3RydWN0b3Ioe1xuICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlKCksXG4gICAgICAgIHRhcmdldDogbGluay50YXJnZXQoKSxcbiAgICAgICAgdmVydGljZXM6IGxpbmsudmVydGljZXMoKVxuICAgICAgfSk7XG4gICAgICBsaW5rLnJlbW92ZSh7IHJlcGxhY2VMaW5rOiB0cnVlIH0pO1xuICAgICAgbGluazIuc2V0KCd6JywgLTEpO1xuICAgICAgbGluazIuYWRkVG8oZ3JhcGgpO1xuICAgIH1cblxuICAgIGdyYXBoLm9uKCdjaGFuZ2UnLCAoY2VsbCwgb3B0KSA9PiB7XG4gICAgICB0aGlzLm9uQ2hhbmdlVGV4dEluc2lkZShjZWxsKTtcbiAgICAgIHRoaXMub25DaGFuZ2VMaW5rTGFiZWwoY2VsbCwgMTIpO1xuICAgICAgdGhpcy5vbkNoYW5nZUFsbGlnbWVudChjZWxsLCBvcHQpO1xuICAgICAgaWYgKCFvcHQuaW5zcGVjdG9yIHx8ICFmcmVlVHJhbnNmb3JtIHx8IGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XG4gICAgICBmcmVlVHJhbnNmb3JtLm9wdGlvbnMubWluV2lkdGggPSBtaW5TaXplLndpZHRoO1xuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbkhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xuICAgIH0pO1xuXG4gICAgLyogVE9PTEJBUiAqL1xuICAgIGNvbnN0IHRvb2xiYXIgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XG4gICAgICB0b29sczogdG9vbGJhckNvbmZpZy50b29scyxcbiAgICAgIHJlZmVyZW5jZXM6IHtcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcbiAgICAgICAgY29tbWFuZE1hbmFnZXJcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xiYXJDb21tYW5kcyA9IHtcbiAgICAgIHRvSlNPTjogKCkgPT4ge1xuICAgICAgICBjb25zdCB3aW5kb3dGZWF0dXJlcyA9ICdtZW51YmFyPW5vLGxvY2F0aW9uPW5vLHJlc2l6YWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMsc3RhdHVzPW5vJztcbiAgICAgICAgY29uc3Qgd2luZG93TmFtZSA9IF8udW5pcXVlSWQoJ2pzb25fb3V0cHV0Jyk7XG4gICAgICAgIGNvbnN0IGpzb25XaW5kb3cgPSB3aW5kb3cub3BlbignJywgd2luZG93TmFtZSwgd2luZG93RmVhdHVyZXMpO1xuXG4gICAgICAgIGpzb25XaW5kb3cuZG9jdW1lbnQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpKTtcbiAgICAgIH0sXG4gICAgICBsb2FkR3JhcGg6ICgpID0+IHtcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcbiAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkaW5nLi4nLCAnaW5mbycpO1xuICAgICAgICAgIGdkTG9hZCgobmFtZSwgY29udGVudCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgICAgICAgICAgIGdyYXBoLmZyb21KU09OKGpzb24pO1xuICAgICAgICAgICAgICBjb25zdCBlbEZpbGVOYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xuICAgICAgICAgICAgICBlbEZpbGVOYW1lLnZhbHVlID0gbmFtZS5yZXBsYWNlKC8uanNvbiQvLCAnJyk7XG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRlZC4nLCAnc3VjY2VzcycpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdmYWlsZWQuJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfSxcblxuICAgICAgc2F2ZUdyYXBoOiAoKSA9PiB7XG4gICAgICAgIGdkQXV0aCgoKSA9PiB7XG4gICAgICAgICAgc2hvd1N0YXR1cygnc2F2aW5nLi4nLCAnaW5mbycpO1xuICAgICAgICAgIC8vIGxldCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJykudmFsdWU7XG4gICAgICAgICAgY29uc3QgbmFtZSA9IDxIVE1MQnV0dG9uRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKTtcbiAgICAgICAgICBnZFNhdmUobmFtZS52YWx1ZSwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnc2F2ZWQuJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25TZWxlY3RlZDogKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xuICAgICAgICAgIHRoaXMuanNvblRlbXBDb250ZW50ID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xuICAgICAgICAgIHRoaXMuaXNUZW1wID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50Lmpzb25Db250ZW50KSB7XG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0ZMT1dDSEFSVF9JRF0gPSBldmVudC5mbG93Q2hhcnRJZDtcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXSA9IGV2ZW50Lmpzb25Db250ZW50O1xuICAgICAgICAgIGlmICh0aGlzLmlzU2hvd0NvbmZpcm1NZXNzYWdlKCkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5DSEFOR0lOR19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTkVYVF9DSEFOR0lOR19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgPSBldmVudC5mbG93Q2hhcnRJZDtcbiAgICAgIH0sXG4gICAgICBvbkNsZWFyOiAoKSA9PiB7XG4gICAgICAgIGdyYXBoLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xuICAgICAgfSxcbiAgICAgIG9uRGVsZXRlVGVtcGxhdGU6ICgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCAmJlxuICAgICAgICAgIGRpYWdyYW1UZW1wbGF0ZS5mbG93Q2hhcnRJZCAhPT0gJycgJiZcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09IGd1aWRIZWxwZXIuZW1wdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5pc0RlbGV0ZVRlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ERUxFVEVfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgb25TYXZlQXNUZW1wbGF0ZTogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2F2ZUFzVGVtcGxhdGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5pc1RlbXApIHtcbiAgICAgICAgICB0aGlzLmpzb25UZW1wQ29udGVudCA9IHRoaXMuanNvbk9yaWdpbmFsQ29udGVudDtcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5TQVZFX0FTX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICB9LFxuXG4gICAgICBvblJlc2V0VG9UZW1wVGVtcGxhdGU6ICgpID0+IHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICB0aGlzLmlzUmVzZXQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlJFU0VUX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNoYW5nZVNuYXBMaW5lcyhjaGVja2VkKSB7XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgc25hcGxpbmVzLnN0YXJ0TGlzdGVuaW5nKCk7XG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IHRoaXMuc25hcGxpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNuYXBsaW5lcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgICAgc3RlbmNpbC5vcHRpb25zLnNuYXBsaW5lcyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGFwcGx5T25TZWxlY3Rpb24obWV0aG9kKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09ICd0b0Zyb250Jykge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rpb24uY29sbGVjdGlvbi5tb2RlbHNbMF0uZ2V0KCd0eXBlJyk7XG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdyYXBoLnN0YXJ0QmF0Y2goJ3NlbGVjdGlvbicpO1xuICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5tb2RlbHMuZm9yRWFjaCgobW9kZWwpID0+IHtcbiAgICAgICAgICBtb2RlbFttZXRob2RdKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBncmFwaC5zdG9wQmF0Y2goJ3NlbGVjdGlvbicpO1xuICAgICAgfSxcbiAgICAgIHRvZ2dsZUZ1bGxzY3JlZW46ICgpID0+IHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0pXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcblxuICAgICAgICBpZiAodGhpcy5pc0Z1bGxTY3JlZW4pIHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0/LmNsYXNzTGlzdC5yZW1vdmUoJ2Nsb3NlLWZ1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX2Nkay1vdmVybGF5Jyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKVswXT8uY2xhc3NMaXN0LnJlbW92ZSgnanVzdGlmeS1jb250ZW50X2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZnRwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodHBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkUGFuZWwpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0/LmNsYXNzTGlzdC5hZGQoJ2Nsb3NlLWZ1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX2Nkay1vdmVybGF5Jyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKVswXT8uY2xhc3NMaXN0LmFkZCgnanVzdGlmeS1jb250ZW50X2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJyk7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZnRwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkUGFuZWwpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJykuc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNTAwcHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdG9vbGJhci5vbih7XG4gICAgICAndG8tanNvbjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMudG9KU09OLFxuICAgICAgJ2xvYWQ6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmxvYWRHcmFwaCxcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXG4gICAgICAnY2xlYXI6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uQ2xlYXIsXG4gICAgICAncHJpbnQ6cG9pbnRlcmNsaWNrJzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgam9pbnRUb29sc0VsID0gcGFwZXIuc3ZnPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqb2ludC10b29scycpO1xuICAgICAgICBpZiAoam9pbnRUb29sc0VsKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqb2ludFRvb2xzRWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGpvaW50VG9vbHNFbFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBqb2ludC5mb3JtYXQucHJpbnQocGFwZXIpO1xuICAgICAgfSxcbiAgICAgICdzYXZlQXNUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25TYXZlQXNUZW1wbGF0ZSxcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXG4gICAgICAnZGVsZXRlVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uRGVsZXRlVGVtcGxhdGUsXG4gICAgICAncmVzZXRUb1RlbXBUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25SZXNldFRvVGVtcFRlbXBsYXRlLFxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcbiAgICAgICd0by1iYWNrOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvQmFjaycpLFxuICAgICAgJ3NuYXBsaW5lOmNoYW5nZSc6IHRvb2xiYXJDb21tYW5kcy5jaGFuZ2VTbmFwTGluZXMuYmluZCh0aGlzKSxcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlciksXG4gICAgICAnZnVsbHNjcmVlbjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMudG9nZ2xlRnVsbHNjcmVlblxuICAgIH0pO1xuXG4gICAgJCgnI3Rvb2xiYXItY29udGFpbmVyJykuaHRtbCgnJyk7XG4gICAgdG9vbGJhci5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN0b29sYmFyLWNvbnRhaW5lcicpO1xuXG4gICAgY29uc3Qgem9vbVRvb2wgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XG4gICAgICAvLyBpbml0aSBhbGl6ZSB0b29scyB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICAgIHRvb2xzOiBbJ3pvb21Ub0ZpdCcsICd6b29tSW4nLCAnem9vbU91dCddLFxuICAgICAgcmVmZXJlbmNlczoge1xuICAgICAgICBwYXBlclNjcm9sbGVyLFxuICAgICAgICBjb21tYW5kTWFuYWdlclxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgem9vbVRvb2wucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjem9vbVRvb2xiYXInKTtcblxuICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcbiAgICAgIHRhcmdldDogJ1tkYXRhLXRvb2x0aXBdJyxcbiAgICAgIGNvbnRlbnQoZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsLmRhdGFzZXQudG9vbHRpcDtcbiAgICAgIH0sXG4gICAgICB0b3A6ICcuam9pbnQtdG9vbGJhcicsXG4gICAgICBwYWRkaW5nOiAxMCxcbiAgICAgIGRpcmVjdGlvbjogJ3RvcCdcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cbiAgICBzdGVuY2lsXG4gICAgICAuZ2V0R3JhcGgoKVxuICAgICAgLmdldCgnY2VsbHMnKVxuICAgICAgLmVhY2goKGNlbGwpID0+IHtcbiAgICAgICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xuICAgICAgICAgIHRhcmdldDogYC5qb2ludC1zdGVuY2lsIFttb2RlbC1pZD1cIiR7Y2VsbC5pZH1cIl1gLFxuICAgICAgICAgIGNvbnRlbnQ6IGNlbGwuZ2V0KCd0eXBlJykuc3BsaXQoJy4nKVsxXSxcbiAgICAgICAgICBib3R0b206ICcuam9pbnQtc3RlbmNpbCcsXG4gICAgICAgICAgZGlyZWN0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xuICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50KTtcbiAgICB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShncmFwaC50b0pTT04oKSk7XG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcblxuICAgIC8qIFNldCBnIHJhcGggb2JqZWN0ICovXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkpPSU5UXSA9IGpvaW50O1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF0gPSBncmFwaDtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXSA9IHBhcGVyU2Nyb2xsZXI7XG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRJQUdSQU1fTE9BREVELCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XG4gIH1cblxuICBsb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWpzb25Db250ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGdyYXBoLmZyb21KU09OKGpzb25Db250ZW50KTtcbiAgfVxuXG4gIGFkZEl0ZW1UZW1wbGF0ZShmbG93Q2hhcnRJZD86IHN0cmluZywgZGlhZ3JhbVRlbXBsYXRlPzogYW55KSB7XG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB7XG4gICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgY29udGVudDogZGlhZ3JhbVRlbXBsYXRlLnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICBmbG93Q2hhcnRJZCxcbiAgICAgICAgICBuYW1lOiBkaWFncmFtVGVtcGxhdGUubmFtZSxcbiAgICAgICAgICBqc29uQ29udGVudDogZGlhZ3JhbVRlbXBsYXRlLmpzb25Db250ZW50LFxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbmRleCA9IGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB4LmNvbnRlbnQgPT09IG9wdGlvbi5jb250ZW50O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3RJdGVtKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoXG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KChpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaS5mbG93Q2hhcnRJZCA9PT0gZmxvd0NoYXJ0SWQ7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRlbXBHcmFwaCgpIHtcbiAgICBpZiAodGhpcy5qc29uVGVtcENvbnRlbnQpIHtcbiAgICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKEpTT04ucGFyc2UodGhpcy5qc29uVGVtcENvbnRlbnQpKTtcbiAgICB9XG4gICAgdGhpcy5pc1RlbXAgPSB0cnVlO1xuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0T3JpZ2luRm9yU2VsZigpIHtcbiAgICByZXR1cm4gJyonO1xuICB9XG5cbiAgc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKSB7XG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCkge1xuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xuICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5pbm5lckhUTUwgPSBGbG93Q2hhcnRDb25zdC5TRUxFQ1RfVEVNUExBVEU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0SXRlbUZsb3dDaGFydElkKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyclNlbGVjdCAmJiBhcnJTZWxlY3RbMF0ub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZm9yRWFjaCgoeCwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoeC5mbG93Q2hhcnRJZCA9PT0gZmxvd0NoYXJ0SWQpIHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XG4gICAgICAgICAgICBsaXN0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtb3B0aW9uLWNvbnRlbnRgKVswXS5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uaW5uZXJIVE1MID0geC5jb250ZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1Nob3dDb25maXJtTWVzc2FnZSgpIHtcbiAgICBjb25zdCBteUdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcbiAgICBjb25zdCBqc29uID0gbXlHcmFwaC50b0pTT04oKTtcbiAgICBpZiAoanNvbi5jZWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldFRyYW5zaXRpb25Qb2ludChqc29uQ29udGVudDogb2JqZWN0LCBwYXBlclNjcm9sbGVyOiBhbnkpIHtcbiAgICBpZiAoanNvbkNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGNlbGxzID0ganNvbkNvbnRlbnRbYGNlbGxzYF07XG4gICAgICBpZiAoY2VsbHMpIHtcbiAgICAgICAgbGV0IHggPSAwO1xuICAgICAgICBsZXQgeSA9IDA7XG4gICAgICAgIGNlbGxzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5wb3NpdGlvbiAmJiBlLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XG4gICAgICAgICAgICAgIHggPSBlLnBvc2l0aW9uLng7XG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi54IDwgeCkge1xuICAgICAgICAgICAgICB4ID0gZS5wb3NpdGlvbi54O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUucG9zaXRpb24ueSA8IHkpIHtcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh4ICE9PSAwICYmIHkgIT09IDApIHtcbiAgICAgICAgICB4ID0geCA+IDIwID8geCAtIDIwIDogeDtcbiAgICAgICAgICB5ID0geSA+IDIwID8geSAtIDIwIDogeTtcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnRyYW5zaXRpb25Ub1BvaW50KHgsIHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlblNoYXBlRnVuY3Rpb25hbGl0eShMQU5HOiBhbnkpIHtcbiAgICBjb25zdCBteUNlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XG4gICAgaWYgKCEhbXlDZWxsVmlldykge1xuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XG4gICAgICBjb25zdCBpbnB1dHMgPSBJbnNwZWN0b3JGdW5jdGlvbi5nZXRJbnNwZWN0b3JDb25maWd1cmF0aW9uKGJwbW4yLCBMQU5HLCBudWxsKTtcbiAgICAgIGNvbnN0IGNlbGwgPSBteUNlbGxWaWV3Lm1vZGVsO1xuICAgICAgY29uc3QgdHlwZSA9IGNlbGwuZ2V0KCd0eXBlJyk7XG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcbiAgICAgICAgY2VsbCxcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcbiAgICAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFwZXJDZW50ZXIoZWRpdE1vZGU6IG51bWJlcikge1xuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XG4gICAgICBwYXBlclNjcm9sbGVyLmNvbnRlbnRUb0NlbnRlcih7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFwZXJUb3BMZWZ0KGVkaXRNb2RlOiBudW1iZXIpIHtcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xuICAgICAgcGFwZXJTY3JvbGxlci5jb250ZW50VG9Ub3BMZWZ0KHsgcGFkZGluZzogNTAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XG4gICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbYGdyYXBoYF07XG4gICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcbiAgICAgIGNvbnN0IGpzb25Db250ZW50T2JqID0gZ3JhcGgudG9KU09OKCk7XG4gICAgICBpZiAoanNvbkNvbnRlbnRPYmogJiYganNvbkNvbnRlbnRPYmouY2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc2Nyb2xsVG9Db250ZW50KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXBlclNjcm9sbGVyLmNlbnRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlVGV4dEluc2lkZShjZWxsOiBhbnkpIHtcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmV2lkdGggPSAnMjAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzIwJSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbFsndGV4dFdyYXAnXSA9IHtcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgZWxsaXBzaXM6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmV2lkdGggPSAnNzAlJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzcwJSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbFsndGV4dFdyYXAnXSA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5HYXRld2F5JyB8fFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbicgfHxcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhT2JqZWN0JyB8fFxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFTdG9yZSdcbiAgICApIHtcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ21pZGRsZSc7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbFsndGV4dFdyYXAnXSA9IHtcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgZWxsaXBzaXM6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUxpbmtMYWJlbChjZWxsOiBhbnksIGRlZlNpemU6IG51bWJlcikge1xuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XG4gICAgICBsZXQgc2l6ZSA9IGRlZlNpemU7XG4gICAgICBsZXQgcmVmUG9zID0gMDtcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgZ3JhcGguZ2V0TGlua3MoKS5ldmVyeShmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJlZlBvcyArPSAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dCAmJlxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ11cbiAgICAgICkge1xuICAgICAgICBzaXplID0gZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5hdHRyaWJ1dGVzLmF0dHJzLnRleHRbJ2ZvbnQtc2l6ZSddO1xuICAgICAgfVxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5wcm9wKCdsYWJlbHMvMC9hdHRycy9sYWJlbC9mb250U2l6ZScsIHNpemUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlQWxsaWdtZW50KGNlbGw6IGFueSwgb3B0OiBhbnkpIHtcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvcHQuZGlyZWN0aW9uICYmXG4gICAgICAob3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1yaWdodCcgfHxcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1sZWZ0JylcbiAgICApIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsQW5jaG9yID0gY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsWyd0ZXh0LWFuY2hvciddO1xuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgaGVhZGVyTGFiZWxBbmNob3IsIGhlaWdodCk7XG5cbiAgICAgIC8vIHVwZGF0ZSBsYXN0IGxhbmUgdmFsdWVcbiAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoY2VsbC5hdHRyaWJ1dGVzKSkge1xuICAgICAgICBjb25zdCBoID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoY2VsbC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgY29uc3QgYiA9IGggLSB0O1xuICAgICAgICBpZiAoYiA+IDApIHtcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgIGNlbGwuYXR0cmlidXRlcy5sYW5lc1tpbmRleF0uc2l6ZSA9IHM7XG5cbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0uc2l6ZSA9IHM7XG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgIGNlbGwuYXR0cmlidXRlcy5sYW5lc1tpbmRleF0uc2l6ZSA9IHM7XG5cbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0uc2l6ZSA9IHM7XG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0LnByb3BlcnR5UGF0aCAmJiBvcHQucHJvcGVydHlQYXRoID09PSAnYXR0cnMvaGVhZGVyTGFiZWwvdGV4dC1hbmNob3InKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XG4gICAgICBjb25zdCB0ZXh0QW5jaG9yID0gb3B0LnByb3BlcnR5VmFsdWU7XG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCB0ZXh0QW5jaG9yLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHNldEhlYWRlckF0dHJpYnV0ZShjZWxsOiBhbnksIHRleHRBbmNob3I6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKHRleHRBbmNob3IpIHtcbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gODtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAtIDg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpc1VuZGVmaW5lZFNpemUoYXR0cmlidXRlcykge1xuICAgIGxldCBiUmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGgpIHtcbiAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZXZlcnkoKGUpID0+IHtcbiAgICAgICAgaWYgKCFlLnNpemUpIHtcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGJSZXN1bHQ7XG4gIH1cblxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGgpIHtcbiAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBpZiAoZS5zaXplKSB7XG4gICAgICAgICAgdG90YWwgKz0gZS5zaXplO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG5cbiAgc2V0RGlhZ3JhbVRlbXBsYXRlcyhkaWFncmFtVGVtcGxhdGVzOiBEaWFncmFtVGVtcGxhdGVzW10pIHtcbiAgICBpZiAodG9vbGJhckNvbmZpZyAmJiB0b29sYmFyQ29uZmlnLnRvb2xzKSB7XG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XG4gICAgICB9KTtcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgICAgaW5kZXg6IDEsXG4gICAgICAgICAgICBjb250ZW50OiB4LnRlbXBsYXRlTmFtZSxcbiAgICAgICAgICAgIGZsb3dDaGFydElkOiB4LmZsb3dDaGFydElkLFxuICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IHguanNvbkNvbnRlbnQsXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5jb250ZW50LnRvTG93ZXJDYXNlKCkgPT09IG9wdGlvbi5jb250ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRDZWxsVmlldygpIHtcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9vbFRvb2xzKHBvb2xWaWV3LCBjb29yZGluYXRlcykge1xuICB2YXIgcG9vbCA9IHBvb2xWaWV3Lm1vZGVsO1xuXG4gIC8vIElmIHRoZXJlIGlzIGEgbGFuZSB1bmRlciB0aGUgcG9pbnRlciAobW91c2UvdG91Y2gpLFxuICAvLyBhZGQgdGhlIHN3aW1sYW5lIHRvb2xzIGFuZCByZW1vdmUgdGhlIEZyZWVUcmFuc2Zvcm0gZnJvbSB0aGUgY2VsbFxuICB2YXIgbGFuZXNJZHMgPSBwb29sLmdldExhbmVzRnJvbVBvaW50KGNvb3JkaW5hdGVzKTtcbiAgaWYgKGxhbmVzSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICB2YXIgbGFuZUlkID0gbGFuZXNJZHNbMF07XG5cbiAgdmFyIGJvdW5kYXJ5VG9vbCA9IG5ldyBqb2ludC5lbGVtZW50VG9vbHMuU3dpbWxhbmVCb3VuZGFyeSh7XG4gICAgbGFuZUlkOiBsYW5lSWQsXG4gICAgcGFkZGluZzogMCxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAnZmlsbCc6ICdub25lJyxcbiAgICAgICdzdHJva2Utd2lkdGgnOiAzLFxuICAgICAgJ3N0cm9rZSc6ICcjMzQ5OGRiJ1xuICAgIH1cbiAgfSk7XG4gIHZhciB0cmFuc2Zvcm1Ub29sID0gbmV3IGpvaW50LmVsZW1lbnRUb29scy5Td2ltbGFuZVRyYW5zZm9ybSh7XG4gICAgbGFuZUlkOiBsYW5lSWQsXG4gICAgbWluU2l6ZTogNjAsXG4gICAgcGFkZGluZzogMCxcbiAgfSk7XG4gIHZhciBlbGVtZW50VG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xuICAgIHRvb2xzOiBbYm91bmRhcnlUb29sLCB0cmFuc2Zvcm1Ub29sXVxuICB9KTtcbiAgcG9vbFZpZXcuYWRkVG9vbHMoZWxlbWVudFRvb2xzVmlldyk7XG4gIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xufVxuIl19
|