ms-data-grid 0.0.135 → 0.0.136
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.
|
@@ -1084,6 +1084,12 @@ export class DataGridComponent {
|
|
|
1084
1084
|
this.bodyTextFontsSize = this.defaultConfig.bodyTextFontsSize || 14;
|
|
1085
1085
|
this.globalSearchText = this.defaultConfig.globalSearch;
|
|
1086
1086
|
this.setTableLayout(this.selectedTableLayout);
|
|
1087
|
+
this.autoSizeColumnsByRatio();
|
|
1088
|
+
const groupedColumns = this.defaultConfig?.groupedColumns;
|
|
1089
|
+
if (groupedColumns?.length) {
|
|
1090
|
+
this.groupedColumns = structuredClone(groupedColumns);
|
|
1091
|
+
this.groupDataAsync(this.dataSet, this.groupedColumns);
|
|
1092
|
+
}
|
|
1087
1093
|
}
|
|
1088
1094
|
else {
|
|
1089
1095
|
this.rowShadingEnabled = false;
|
|
@@ -1697,7 +1703,8 @@ export class DataGridComponent {
|
|
|
1697
1703
|
containerWidth -= 29;
|
|
1698
1704
|
if (this.gridType == 'Assets' || this.gridType == 'Tasks')
|
|
1699
1705
|
containerWidth -= 30;
|
|
1700
|
-
|
|
1706
|
+
if (this.showCheckboxes)
|
|
1707
|
+
containerWidth -= 55;
|
|
1701
1708
|
const equalWidth = Math.max(Math.floor(containerWidth / visibleCount), 150);
|
|
1702
1709
|
// Update widths for all visible columns
|
|
1703
1710
|
visibleColumns.forEach((col) => {
|
|
@@ -2156,7 +2163,8 @@ export class DataGridComponent {
|
|
|
2156
2163
|
containerWidth -= 29;
|
|
2157
2164
|
if (this.gridType == 'Assets' || this.gridType == 'Tasks')
|
|
2158
2165
|
containerWidth -= 30;
|
|
2159
|
-
|
|
2166
|
+
if (this.showCheckboxes)
|
|
2167
|
+
containerWidth -= 55;
|
|
2160
2168
|
const totalOldWidth = visibleColumns.reduce((sum, col) => sum + (col.width || 0), 0);
|
|
2161
2169
|
if (totalOldWidth === 0)
|
|
2162
2170
|
return;
|
|
@@ -6043,4 +6051,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
6043
6051
|
type: ViewChild,
|
|
6044
6052
|
args: ['fullscreenImageTemplate']
|
|
6045
6053
|
}] } });
|
|
6046
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBSTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQm5ELE1BQU0sQ0FBTixJQUFZLGdCQVFYO0FBUkQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLDhDQUEwQixDQUFBO0lBQzFCLDhDQUEwQixDQUFBO0lBQzFCLGlEQUE2QixDQUFBO0lBQzdCLDBDQUFzQixDQUFBO0lBQ3RCLDBDQUFzQixDQUFBO0lBQ3RCLGlEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFSVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUTNCO0FBR0QsTUFBTSxDQUFDLE1BQU0s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QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgTmdab25lLFxuICBSZW5kZXJlcjIsXG4gIEFmdGVyVmlld0NoZWNrZWQsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgVGVtcGxhdGVSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxuICBJbmplY3RvclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNwbGl0Q29sdW1uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zcGxpdC1jb2x1bW5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgIFJvd0FjdGlvblNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Jvdy1hY3Rpb24uc2VydmljZSdcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBDZGtEcmFnLFxuICBDZGtEcmFnRHJvcCxcbiAgQ2RrRHJhZ0VuZCxcbiAgQ2RrRHJhZ0VudGVyLFxuICBDZGtEcmFnRXhpdCxcbiAgQ2RrRHJhZ01vdmUsXG4gIENka0RyYWdTb3J0RXZlbnQsXG4gIENka0RyYWdTdGFydCxcbiAgRHJhZ0Ryb3AsXG4gIG1vdmVJdGVtSW5BcnJheSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICB0cmlnZ2VyLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIGFuaW1hdGUsXG4gIHF1ZXJ5LFxuICBzdGFnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENka0Ryb3BMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBTVEFUVVNFU19CQURHRV9NQVAgfSBmcm9tICcuL3N0YXR1c2VzJztcbmltcG9ydCB7IENvcHlTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvcHktc2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2VsbEhvc3REaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2NlbGxIb3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtYXRDdXJyZW5jeVBpcGUgfSBmcm9tICcuLi9waXBlcy9mb3JtYXQtY3VycmVuY3kucGlwZSc7XG5pbXBvcnQgJ2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzJztcbmltcG9ydCB7IFZhbGlkYXRpb25zU2VydmljZSB9IGZyb20gJy4vLi4vc2VydmljZXMvdmFsaWRhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBIdG1sQ29udGVudFNhbml0aXplclNlcnZpY2UgfSBmcm9tICcuLy4uL3NlcnZpY2VzL2h0bWwtY29udGVudC1zYW5pdGl6ZXIuc2VydmljZSc7XG5cbmludGVyZmFjZSBDZWxsUG9zaXRpb24ge1xuICByb3dJbmRleDogbnVtYmVyO1xuICBjb2xJbmRleDogbnVtYmVyO1xuICBzdWJDb2xJbmRleDogbnVtYmVyO1xuICBmaWVsZDogc3RyaW5nO1xuICBrZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhR3JpZENvbmZpZyB7XG4gIGZvbnRGYWltbHk6IHN0cmluZztcbiAgYm9keVRleHRGb250c1NpemU6IG51bWJlcjtcbiAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogbnVtYmVyO1xuICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHNob3dWZXJ0aWNhbEJvcmRlcjogYm9vbGVhbjtcbiAgc2VsZWN0ZWRUYWJsZUxheW91dDogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJztcbiAgZ2xvYmFsU2VhcmNoOiBzdHJpbmc7XG4gIGZpbHRlck5hbWVzOiBzdHJpbmc7XG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgcm93U2hhZGluZ0VuYWJsZWQ6IGJvb2xlYW47XG4gIGFjdGl2ZUZpbHRlcnM6IGJvb2xlYW47XG59XG5cblxuZXhwb3J0IGVudW0gUm93QW5pbWF0aW9uVHlwZSB7XG4gIE5vbmUgPSAnbm9uZScsXG4gIFNwcmVhZCA9ICdzcHJlYWRBbmltYXRpb24nLFxuICBCb3VuY2UgPSAnYm91bmNlQW5pbWF0aW9uJyxcbiAgU2xpZGVVcCA9ICdzbGlkZVVwRnJvbUJvdHRvbScsXG4gIEZsaXAgPSAnZmxpcEFuaW1hdGlvbicsXG4gIFNrZXcgPSAnc2tld0FuaW1hdGlvbicsXG4gIFNsaWRlUmlnaHQgPSAnc2xpZGVGcm9tUmlnaHQnLFxufVxuXG5cbmV4cG9ydCBjb25zdCBzb3J0aW5nQW5pbWF0aW9uID0gdHJpZ2dlcignbGlzdFNvcnQnLCBbXG4gIHRyYW5zaXRpb24oJyogPT4gKicsIFtcbiAgICAvLyBRdWVyeSBhbGwgZWxlbWVudHMgZW50ZXJpbmcgb3IgbGVhdmluZ1xuICAgIHF1ZXJ5KCc6ZW50ZXIsIDpsZWF2ZScsIHN0eWxlKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIHdpZHRoOiAnMTAwJScgfSksIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAvLyBBbmltYXRlIGxlYXZpbmcgZWxlbWVudHMgdXB3YXJkIHdpdGggZmFkZSBvdXRcbiAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjBweCknLCBvcGFjaXR5OiAwIH0pKVxuICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAvLyBTdGFnZ2VyIHRoZSBlbnRlcmluZyBlbGVtZW50cyBmb3IgYSBzbW9vdGhlciBlZmZlY3RcbiAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDIwcHgpJywgb3BhY2l0eTogMCB9KSxcbiAgICAgIHN0YWdnZXIoNTAsIFtcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAxIH0pKVxuICAgICAgXSlcbiAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gIF0pXG5dKTtcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdhY2NvcmRpb25Ub2dnbGUnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ2NvbGxhcHNlZCcsXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3ZlcmZsb3c6ICd1bnNldCcgfSlcbiAgICAgICksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonLCBvdmVyZmxvdzogJ3Vuc2V0JyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPD0+IGV4cGFuZGVkJywgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicpKSxcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCdzbGlkZVRvZ2dsZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvcGFjaXR5OiAwLCBvdmVyZmxvdzogJ2hpZGRlbicgfSksXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3BhY2l0eTogMSB9KSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgICAgICBzdHlsZSh7IGhlaWdodDogJyonLCBvcGFjaXR5OiAxLCBvdmVyZmxvdzogJ2hpZGRlbicgfSksXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG9wYWNpdHk6IDAgfSkpXG4gICAgICBdKVxuICAgIF0pLFxuICAgIHRyaWdnZXIoJ3NsaWRlVXAnLCBbXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDAlKScsIG9wYWNpdHk6IDAgfSkpLFxuICAgICAgc3RhdGUoJyonLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAxIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIGFuaW1hdGUoJzMwMG1zIGVhc2Utb3V0JykpLFxuICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicpKSxcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCdyb3dEeW5hbWljJywgW1xuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBTUFJFQUQgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc3ByZWFkQW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVYKDAuNyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzM1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZVgoMSknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzIyMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlWCgwLjcpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBCT1VOQ0UgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gYm91bmNlQW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTBweCknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNDUsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgICAgICc1MDBtcyBjdWJpYy1iZXppZXIoLjY4LC0wLjU1LC4yNywxLjU1KScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjAwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gTkVXIDE6IEZMSVAgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gZmxpcEFuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3JvdGF0ZVgoLTgwZGVnKScgfSksXG4gICAgICAgICAgc3RhZ2dlcig3MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNDUwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3JvdGF0ZVgoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNTAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzI1MG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3JvdGF0ZVgoODBkZWcpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuXG4gICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBORVcgMjogU0tFVyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAgICAgdHJhbnNpdGlvbignKiA9PiBza2V3QW5pbWF0aW9uJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2tld1koNmRlZykgdHJhbnNsYXRlWSg4cHgpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczMjBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2tld1koMGRlZykgdHJhbnNsYXRlWSgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMjIwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2tld1koLTZkZWcpIHRyYW5zbGF0ZVkoLThweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNsaWRlVXBGcm9tQm90dG9tJywgW1xuICAgICAgICBxdWVyeSgnOmVudGVyJywgW1xuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgxMDB2aCknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNjAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzUwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgdHJhbnNpdGlvbignKiA9PiBzbGlkZUZyb21SaWdodCcsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMTAwdncpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc1MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCg1MHB4KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuXG5cbiAgICBdKVxuXG5cbiAgXSxcblxufSlcbmV4cG9ydCBjbGFzcyBEYXRhR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbiAgLy8gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbiAgLy8gKioqKioqKioqKiAgSW5wdXQgR29lcyBIZXJlICoqKioqKioqKioqIC8vXG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG5cblxuICBASW5wdXQoKSByb3dBbmltYXRpb246IFJvd0FuaW1hdGlvblR5cGUgPSBSb3dBbmltYXRpb25UeXBlLk5vbmU7XG5cbiAgLy8gUGFnaW5hdGlvbiBDb25maWcgU3RvcmUgSGVyZVxuICBASW5wdXQoKSBwYWdpbmF0aW9uQ29uZmlnOiBhbnkgPSBudWxsO1xuXG4gIC8vIFRoZSBkYXRhc2V0IHN0b3JlIGhlcmU7XG4gIEBJbnB1dCgpIGRhdGFTZXQ6IGFueVtdID0gW107XG5cbiAgLy8gVGhlIGNvbHVtbnMgU3RvcmUgSGVyZVxuICBASW5wdXQoKSBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gIC8vIFJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIHJvd0hlaWdodDogbnVtYmVyID0gNDQ7XG5cbiAgLy8gSGVhZGVyIFJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIGhlYWRlclJvd0hlaWdodDogbnVtYmVyID0gNTA7XG5cbiAgLy8gU2hvdyBWZXJ0aWNhbCBCb3JkZXJzO1xuICBASW5wdXQoKSBzaG93VmVydGljYWxCb3JkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBFdmVuIFJvd3MgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgZXZlblJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIEV2ZW4gUm93cyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2YyZjJmMic7XG5cbiAgLy8gSGVhZGVyIFJvd3MgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgaGVhZGVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gSGVhZGVyIFJvd3MgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgY2hlY2tib3hlc0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG4gIC8vIFNob3cgQ29sdW1ucyBHcm91cGluZztcbiAgQElucHV0KCkgc2hvd0NvbHVtbnNHcm91cGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFJvdyBIb3ZlcmVkIEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIHJvd0hvdmVyQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdyZ2JhKDAsIDEyMywgMjU1LCAwLjEpJztcblxuICAvLyBMZWZ0IFBpbm5lZEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIGxlZnRQaW5uZWRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGZmJztcblxuICAvLyBCb2R5IEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIGJvZHlCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGZmJztcblxuICAvLyBSaWdodCBQaW5uZWQgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgcmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGZmJztcblxuICAvLyBTaWRlIE1lbnUgQmFja2dyb3VuZCBjb2xvcjtcbiAgQElucHV0KCkgc2lkZW1lbnVCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGZmJztcblxuICAvLyBCb2R5IHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGJvZHlUZXh0Q29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMGMxMTJiJztcblxuICAvLyBIZWFkZXIgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgaGVhZGVyVGV4dENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzJhMWY3Myc7XG5cbiAgLy8gSGVhZGVyIHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrYm94ZXNDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMyYTFmNzMnO1xuXG4gIC8vIEhlYWRlciB0ZXh0IHNpemU7XG4gIEBJbnB1dCgpIGhlYWRlclRleHRGb250c1NpemU6IG51bWJlciB8IHVuZGVmaW5lZCA9IDE0O1xuXG4gIC8vIEJvZHkgdGV4dCBjb2xvcjtcbiAgQElucHV0KCkgYm9keVRleHRGb250c1NpemU6IG51bWJlciB8IHVuZGVmaW5lZCA9IDE0O1xuXG4gIC8vIEhlYWRlciBmb250IHdlaWdodDtcbiAgQElucHV0KCkgaGVhZGVyRm9udFdlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkID0gNTAwO1xuXG4gIC8vIEJvZHkgRm9udCBXZWlnaHQ7XG4gIEBJbnB1dCgpIGJvZHlGb250V2VpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQgPSA0MDA7XG5cbiAgLy8gQ2hlY2tlZCBSb3cgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgY2hlY2tlZFJvd0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ2FsaWNlYmx1ZSc7XG5cbiAgLy8gZHJvcGRvd25zIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGRyb3Bkb3duc0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmNmY4ZjgnO1xuXG5cbiAgQElucHV0KCkgZm9vdGVyUm93QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBGb290ZXIgcm93IEhlaWdodDtcbiAgQElucHV0KCkgZm9vdGVyUm93SGVpZ2h0OiBudW1iZXIgPSA0NjtcblxuICAvLyBGb290ZXIgcm93IEhlaWdodDtcbiAgQElucHV0KCkgdG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgc2hvd1Jvd3NHcm91cGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJSb3c6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBmb250RmFpbWx5OiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnc2Fucy1zZXJpZic7XG5cbiAgLy8gU2hvdyBTaWRlQ29sdW1uO1xuICBASW5wdXQoKSBzaG93U2lkZU1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBGb290ZXIgUGFkZGluZ1xuICBASW5wdXQoKSBmb290ZXJQYWRkaW5nOiBudW1iZXIgPSAzXG5cblxuICAvLyBGb290ZXIgUGFkZGluZ1xuICBASW5wdXQoKSB0b3BGaWx0ZXJSb3dIZWlnaHQ6IG51bWJlciA9IDUwO1xuXG4gIC8vIFNob3cgUm93cyBzaGFkaW5nXG4gIEBJbnB1dCgpIHJvd1NoYWRpbmdFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3dzIHNoYWRpbmdcbiAgQElucHV0KCkgc2hvd1NlcmlhbE51bWJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNpbmdsZSBTcGEgVXJsIEF0dGFjaCB0byBpY29uc1xuICBASW5wdXQoKSBzaW5nbGVTcGFBc3NldHNQYXRoOiBzdHJpbmcgPSAnYXNzZXRzLyc7XG5cblxuICAvLyBBcHBsaWVkIEZpbHRlcnNcbiAgQElucHV0KCkgZmlsdGVyc0NvbmZpZzogYW55W10gPSBbXTtcblxuXG4gIC8vIEFwcGxpZWQgRmlsdGVyc1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9WZXJ0aWNhbCBTY3JvbGxiYXIgc3R5bGVcbiAgQElucHV0KCkgdmVydGljYWxTY3JvbGxiYXJXaWR0aDogJ2F1dG8nIHwgJ3RoaW4nID0gJ2F1dG8nO1xuXG4gIC8vSG9yaXppbnRhbCBTY3JvbGxiYXIgc3R5bGVcbiAgQElucHV0KCkgaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoOiAnYXV0bycgfCAndGhpbicgPSAnYXV0byc7XG5cbiAgLy8gU2hvdyBDZWxsIGRldGFpbHMgYm94XG4gIEBJbnB1dCgpIHNob3dDZWxsRGV0YWlsc0JveDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vRGF0ZSBmb3JtYXRcblxuICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmcgPSAnJ1xuXG4gIC8vRGF0ZSBmb3JtYXRcbiAgQElucHV0KCkgdGFibGVTZWFyY2g6IHN0cmluZyA9ICcnO1xuXG5cbiAgLy9EYXRlIGZvcm1hdFxuICBASW5wdXQoKSBhY3Rpb25zOiBhbnlbXSA9IFsnZWRpdCcsICdkZWxldGUnXTtcblxuXG4gIC8vIFRhYmxlIENvbmZpZyBmb3IgcGFnaW5hdGlvbnMgaXMgaGVyZVxuICBASW5wdXQoKSBjb25maWc6IGFueTtcblxuICBASW5wdXQoKSBzZWxlY3RlZFRhYjogc3RyaW5nID0gJyc7XG5cbiAgLy8gU2VsZWN0aW9uIHRhc2sgYmFyXG4gIEBJbnB1dCgpIHNob3dUYXNrYmFyID0gZmFsc2VcblxuICAvLyBUYWJsZSBOYW1lIGZvciBzdGF0ZSBtYW5hZ2VcbiAgQElucHV0KCkgdGFibGVOYW1lID0gdHJ1ZVxuXG5cbiAgLy8gTGlzdGluZyB0eXBlXG4gIEBJbnB1dCgpIGxpc3RpbmdUeXBlOiBzdHJpbmcgfCBib29sZWFuID0gJyc7XG5cbiAgLy8gTGlzdGluZyB0eXBlXG5cbiAgQElucHV0KCkgY2hlY2tib3hTdGF0ZTogeyByZXNldDogYm9vbGVhbiB9ID0ge1xuICAgIHJlc2V0OiB0cnVlXG4gIH1cblxuICAvLyBUYXNrYmFyIGFjdGlvbnNcbiAgQElucHV0KCkgdGFza2JhckFjdGlvbnM6IGFueVtdID0gW11cblxuXG4gIC8vIFNvcnRpbmcgQ29uZmlnIHRvIHNob3cgc29ydCBpY29uc1xuICBASW5wdXQoKSBzb3J0aW5nQ29uZmlnOiB7IGZpZWxkOiBzdHJpbmcsIG9yZGVyX2J5OiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuXG5cbiAgQElucHV0KCkgdGFibGVGaWx0ZXJWaWV3SWQ6IGFueSA9ICcnO1xuXG5cbiAgQElucHV0KCkgc2VsZWN0ZWRUYWJsZUxheW91dDogYW55ID0gJ21lZGl1bSdcblxuICBASW5wdXQoKSBjbG9zZURyb3Bkb3duOiB7IHByZXNldDogeyBjbG9zZWQ6IGJvb2xlYW4sIGxvYWRpbmc6IGJvb2xlYW4gfSB9ID0geyBwcmVzZXQ6IHsgY2xvc2VkOiBmYWxzZSwgbG9hZGluZzogZmFsc2UgfSB9O1xuXG4gIC8vIFRhYmxlIFZpZXdcblxuICAvLyBHbG9iYWxTZWFyY2hcbiAgQElucHV0KCkgZ2xvYmFsU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgLy8gTmVzdGVkIFRhYmxlIFJvdyBGb250c2l6ZVxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZXJvd0ZvbnRzaXplID0gMTQ7XG5cbiAgLy8gTmVzdGVkIHRhYmxlIHJvdyBIZWFkZXIgcm93IEhlaWdodFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZUhlYWRlclJvd0hlaWdodCA9IDQwO1xuXG4gIC8vIE5lc3RlZCBUYWJsZSByb3cgaGVpZ2h0XG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlcm93SGVpZ2h0ID0gNDU7XG5cbiAgQElucHV0KCkgcGFja2FnZURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzaG93VW5MaW5rOiBhbnk7XG5cbiAgQElucHV0KCkgZ3JpZFR5cGU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGN1cnJlbmN5U3ltYm9sOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBjdXJyZW5jeUZvcm1hdDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgbGVmdFBpbm5lZEJveHNoYWRvdzogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgcmlnaHRQaW5uZWRCb3hzaGFkb3c6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEdsb2JhbFNlYXJjaFxuICBASW5wdXQoKSBzZWxlY3RlZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjOGFjNWZmJztcblxuICAvLyBHbG9iYWxTZWFyY2hcbiAgQElucHV0KCkgbmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlUm93QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2VhZWFlYSc7XG5cbiAgQElucHV0KCkgdGFibGVWaWV3OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIGJ1dHRvbnM6IHsgbmFtZTogc3RyaW5nOyBpc19zaG93SWNvbjogYm9vbGVhbjsgaWNvbjogc3RyaW5nLCBoYXNfcGVybWlzc2lvbjogYm9vbGVhbiB9W10gPSBbXTtcblxuICBASW5wdXQoKSBrZWVwTXVsdGlwbGVFeHBhbmRlZERldGFpbHMgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIHNob3dUb3RhbEFtb3VudFJvdyA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgZW5hYmxlR2xvYmFsU2VhcmNoID0gdHJ1ZTtcblxuXG4gIEBJbnB1dCgpIHRhYmxlVHlwZSA9ICcnO1xuXG5cbiAgQElucHV0KCkgZW5hYmxlRXhwb3J0ID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBzaG93RnVsbFNjcmVlbkJ1dHRvbiA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgZW5hYmxlQ3V0ID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSB0YWJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveGVzID0gdHJ1ZTtcblxuXG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9ucyA9IFsxMCwgMjUsIDUwLCA3NSwgMTAwLCAxNTAsIDIwMCwgMjUwLCAzMDAsIDUwMF07XG5cblxuICBASW5wdXQoKSByZXNldEFsbEZpbHRlcnMgPSB7IHJlc2V0QWxsOiBmYWxzZSB9O1xuXG4gIEBJbnB1dCgpIGRlZmF1bHRDb25maWc6IERhdGFHcmlkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG5cblxuICBASW5wdXQoKSBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnID0ge1xuICAgIHNob3dQaW5sZWZ0OiB0cnVlLFxuICAgIHNob3dQaW5yaWdodDogdHJ1ZSxcbiAgICBzaG93QXNjZW5kaW5nOiB0cnVlLFxuICAgIHNob3dEZXNjZW5kaW5nOiB0cnVlLFxuICAgIHNob3dGaWx0ZXI6IHRydWUsXG4gICAgc2hvd1Jvd3NHcm91cGluZzogdGhpcy5zaG93Um93c0dyb3VwaW5nLFxuICAgIHNob3dBdXRvc2l6ZUFsbENvbHVtbnM6IHRydWUsXG4gICAgc2hvd0F1dG9zaXplVGhpc0NvbHVtbjogZmFsc2UsXG4gICAgc2hvd0Nob3NlQ29sdW1uczogZmFsc2UsXG4gICAgc2hvd1Jlc2V0Q29sdW1uczogZmFsc2UsXG4gIH07XG5cbi8vIGZvciBhY3Rpb24gdmFsaWRhdGlvbjtcbiAgQElucHV0KCkgdmFsaWRhdGVJY29uIDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICAgICAgICAgICAgICAgICAgICAgICAgIE91dCBQdXQgRXZlbnRzXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5cblxuICAvL0NoYW5nZSBUYWJsZSBMYXlvdXRcbiAgQFZpZXdDaGlsZHJlbihDZWxsSG9zdERpcmVjdGl2ZSkgY2VsbEhvc3RzITogUXVlcnlMaXN0PENlbGxIb3N0RGlyZWN0aXZlPjtcblxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZUxheW91dCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY3VzdG9tQ2VsbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8gRmlsdGVyIEFwcGx5IGV2ZW50O1xuICBAT3V0cHV0KCkgcHVibGljIGZpbHRlck9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZ2VuZXJpY0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgdGFibGVQcmVzZXRDb25maWc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKSBzb3J0aW5nT3JkZXJPcHRpb25zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBjcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cblxuXG5cblxuICBzdG9yZVByZXNldE5hbWU6IHN0cmluZyA9ICcnO1xuICBpc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgYWN0aXZlVGFiOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgZ3JvdXBlZENvbHVtbnM6IGFueVtdID0gW107XG4gIGFjdGl2ZUNvbDogYW55ID0gbnVsbDtcbiAgYWN0aXZlRmlsdGVyQ2VsbDogYW55ID0gbnVsbDtcbiAgc2hvd0FjdGlvbnNEcm9wRG93biA9IGZhbHNlO1xuICBzaWRlTWVudVZpc2libGUgPSBmYWxzZTtcbiAgcGl2b3RNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbHVtblNlYXJjaDogc3RyaW5nID0gJyc7XG4gIGV4cGFuZEFsbEFjY29yZGlhbnMgPSB0cnVlO1xuICBjdXJyZW50T3BlbmVkU2lkZU1lbnVlOiAnY29scycgfCAnZmlsdHJzJyB8IG51bGwgPSBudWxsO1xuICBvcmlnaW5hbENvbHVtbnM6IGFueVtdID0gW107XG4gIG9yaWdpbmFsRGF0YVNldDogYW55W10gPSBbXTtcbiAgYWN0aXZlVG9wQnV0dG9uOiBzdHJpbmcgfCBudWxsID0gJyc7XG4gIGZpbHRlckNvbHVtbnNMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cEJveFBhZGRpbmcgPSAyMDA7XG4gIHByZXNldE5hbWU6IHN0cmluZyA9ICcnO1xuICBwcmVzZXRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VhcmNoVGV4dFByZXNldFRhYmxlID0gJyc7XG4gIGFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gIHNlYXJjaEluRHJvcGRvd24gPSAnJztcbiAgcHJpdmF0ZSBzZWNyZXRLZXkgPSAndGItc3VwZXItYWRtaW4nXG4gIGFkZEZpbHRlckRyb3Bkb3duU2VhcmNoID0gJydcbiAgdG9wU2hvd0hpZGVDb2x1bW5zID0gJyc7XG4gIGNob3NlQ29sdW1uc1NlYXJjaCA9ICcnXG4gIHNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2ggPSAnJ1xuICBlZGl0aW5Ecm9wZG93blNlYXJjaCA9ICcnO1xuICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgY29uZmlybURlbGV0ZSA9IGZhbHNlO1xuICBwcml2YXRlIG9yaWdpbmFsQWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgZm9udEZhbWlsaWVzOiBzdHJpbmdbXSA9IFtcbiAgICAvLyBDb21tb24gRXhjZWwgZm9udHNcbiAgICAnQXJpYWwnLFxuICAgICdBcmlhbCBCbGFjaycsXG4gICAgJ0JhaG5zY2hyaWZ0JyxcbiAgICAnQ2FsaWJyaScsXG4gICAgJ0NhbWJyaWEnLFxuICAgICdDYW1icmlhIE1hdGgnLFxuICAgICdtYXRoJyxcbiAgICAnQ2FuZGFyYScsXG4gICAgJ0NvbWljIFNhbnMgTVMnLFxuICAgICdDb25zb2xhcycsXG4gICAgJ0NvbnN0YW50aWEnLFxuICAgICdDb3JiZWwnLFxuICAgICdDb3VyaWVyIE5ldycsXG4gICAgJ0VicmltYScsXG4gICAgJ0ZyYW5rbGluIEdvdGhpYyBNZWRpdW0nLFxuICAgICdHYWJyaW9sYScsXG4gICAgJ0dhZHVnaScsXG4gICAgJ0dlb3JnaWEnLFxuICAgICdJbXBhY3QnLFxuICAgICdJbmsgRnJlZScsXG4gICAgJ0phdmFuZXNlIFRleHQnLFxuICAgICdMZWVsYXdhZGVlIFVJJyxcbiAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICdMdWNpZGEgU2FucyBVbmljb2RlJyxcbiAgICAnTWFsZ3VuIEdvdGhpYycsXG4gICAgJ01pY3Jvc29mdCBIaW1hbGF5YScsXG4gICAgJ01pY3Jvc29mdCBKaGVuZ0hlaScsXG4gICAgJ01pY3Jvc29mdCBOZXcgVGFpIEx1ZScsXG4gICAgJ01pY3Jvc29mdCBQaGFnc1BhJyxcbiAgICAnTWljcm9zb2Z0IFNhbnMgU2VyaWYnLFxuICAgICdNaWNyb3NvZnQgVGFpIExlJyxcbiAgICAnTWljcm9zb2Z0IFlhSGVpJyxcbiAgICAnTWljcm9zb2Z0IFlpIEJhaXRpJyxcbiAgICAnTW9uZ29saWFuIEJhaXRpJyxcbiAgICAnTVMgR290aGljJyxcbiAgICAnTVMgUEdvdGhpYycsXG4gICAgJ01TIFVJIEdvdGhpYycsXG4gICAgJ01WIEJvbGknLFxuICAgICdOaXJtYWxhIFVJJyxcbiAgICAnUGFsYXRpbm8gTGlub3R5cGUnLFxuICAgICdTZWdvZSBQcmludCcsXG4gICAgJ1NlZ29lIFNjcmlwdCcsXG4gICAgJ1NlZ29lIFVJJyxcbiAgICAnU2Vnb2UgVUkgSGlzdG9yaWMnLFxuICAgICdTZWdvZSBVSSBFbW9qaScsXG4gICAgJ1NlZ29lIFVJIFN5bWJvbCcsXG4gICAgJ1NpbVN1bicsXG4gICAgJ1NpdGthIFNtYWxsJyxcbiAgICAnU3lsZmFlbicsXG4gICAgJ1N5bWJvbCcsXG4gICAgJ1RhaG9tYScsXG4gICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgJ1RyZWJ1Y2hldCBNUycsXG4gICAgJ1ZlcmRhbmEnLFxuICAgICdXZWJkaW5ncycsXG4gICAgJ1dpbmdkaW5ncycsXG4gICAgJ1l1IEdvdGhpYycsXG4gICAgJ3NhbnMtc2VyaWYnLFxuICAgICdzZXJpZicsXG4gICAgJ21vbm9zcGFjZScsXG4gICAgJ0ludGVyJ1xuICBdO1xuXG4gIGZvbnRTaXplczogc3RyaW5nW10gPSBbXG4gICAgJzgnLCAnOScsICcxMCcsICcxMScsICcxMicsICcxNCcsICcxNicsICcxOCcsICcyMCcsICcyNCdcbiAgXTtcblxuICBoYXNTY3JvbGwgPSBmYWxzZTtcblxuXG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbHVtblNlcnZpY2U6IFNwbGl0Q29sdW1uc1NlcnZpY2UsXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGNvbW1vblNldmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNvcHlTZXJ2aWNlOiBDb3B5U2VydmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZm9ybWF0Q3VycmVuY3k6IEZvcm1hdEN1cnJlbmN5UGlwZSxcbiAgICBwcml2YXRlIGFjdGlvblZhbGlkYXRvciA6IFJvd0FjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uc1NlcnZpY2UgOiBWYWxpZGF0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodG1sU2FuYXRpemVyU2VydmljZSA6IEh0bWxDb250ZW50U2FuaXRpemVyU2VydmljZSxcblxuICApIHsgfVxuXG4gIEBWaWV3Q2hpbGQoJ2NlbGxUZXh0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNlbGxUZXh0ITogYW55O1xuICBAVmlld0NoaWxkKCduZXN0ZWRIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgbmVzdGVkSGVhZGVyITogRWxlbWVudFJlZjtcbiAgXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgdGhpcy5jb21wdXRlVmlld3BvcnRSb3dzKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiBcbiAgICAgIGlmICh0aGlzLmNlbGxUZXh0KSB7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuY2VsbFRleHQubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5yZW5kZXJDdXN0b21DZWxscygpO1xuICAgIHRoaXMuYnVpbGRQYWdlU2l6ZUtleU1hcCgpO1xuICAgICB9LCAxMDAwKTtcbiBcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIGNyZWF0ZUNlbGxJbmplY3Rvcihyb3c6IGFueSwgY29sOiBhbnkpOiBJbmplY3RvciB7XG4gICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiAncm93RGF0YScsIHVzZVZhbHVlOiByb3cgfSxcbiAgICAgICAgeyBwcm92aWRlOiAnY29sRGF0YScsIHVzZVZhbHVlOiBjb2wgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvclxuICAgIH0pO1xuICB9XG5cblxuICBwcml2YXRlIHJlbmRlckN1c3RvbUNlbGxzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3RzID0gdGhpcy5jZWxsSG9zdHMudG9BcnJheSgpO1xuICAgIGxldCBob3N0SW5kZXggPSAwO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy52aXNpYmxlUm93cykge1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBob3N0c1tob3N0SW5kZXgrK107XG4gICAgICAgIGlmICghaG9zdCB8fCAhY29sLmNlbGxSZW5kZXJlcikgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lciA9IGhvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgICAgICAgdmlld0NvbnRhaW5lci5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSB2aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb2wuY2VsbFJlbmRlcmVyKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCksXG4gICAgICAgICAgYXBpOiB0aGlzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICgoY29tcFJlZi5pbnN0YW5jZSBhcyBhbnkpLmdyaWRJbml0KSB7XG4gICAgICAgICAgKGNvbXBSZWYuaW5zdGFuY2UgYXMgYW55KS5ncmlkSW5pdChwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuIHNob3VsZFJlc3RvcmVTY3JvbGwgPSBmYWxzZTtcbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgdGhpcy5hZGRTdHlsZXNUb0ltYWdlcygpO1xuICAgICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgaWYgKFxuICAgICAgdGhpcy5zaG91bGRSZXN0b3JlU2Nyb2xsICYmXG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50XG4gICAgKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCA9IGZhbHNlO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gIGlmICh0aGlzLnRhYnM/Lmxlbmd0aCkge1xuICAgIC8vICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYnNbMF07XG4gICAgLy8gfVxuICAgIC8vIHRoaXMuYXV0b3NpemVBbGxDb2x1bW5zKCk7XG4gICAgaWYgKCF0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkge1xuICAgICAgLy8gdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgdXNlciA9IHRoaXMuZ2V0RGVjcnlwdCgndXNlcicpO1xuICAgIC8vIHRoaXMuY3VycmVuY3lGb3JtYXQgPSB1c2VyPy5jdXJyZW5jeV9mb3JtYXQ7XG4gICAgLy8gdGhpcy5jdXJyZW5jeVN5bWJvbCA9IHVzZXI/LmN1cnJlbmN5X3N5bWJvbDtcbiAgICAvLyB0aGlzLmRhdGVGb3JtYXQgPSB1c2VyPy5kYXRlX2Zvcm1hdDtcbiAgICBpZiAoIXRoaXMuZGF0ZUZvcm1hdCkge1xuICAgICAgY29uc3Qgc3RvcmVkRGF0ZUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkYXRlZm9ybWF0Jyk7XG4gICAgICBpZiAoc3RvcmVkRGF0ZUZvcm1hdCkge1xuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSBzdG9yZWREYXRlRm9ybWF0ID8gSlNPTi5wYXJzZShzdG9yZWREYXRlRm9ybWF0KSA6ICdkZC9NTS95eXl5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VycmVuY3lGb3JtYXQpIHtcbiAgICAgIGNvbnN0IHN0b3JlZEN1cnJlbmN5Rm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbmN5Rm9ybWF0Jyk7XG4gICAgICBpZiAoc3RvcmVkQ3VycmVuY3lGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW5jeUZvcm1hdCA9IHN0b3JlZEN1cnJlbmN5Rm9ybWF0ID8gSlNPTi5wYXJzZShzdG9yZWRDdXJyZW5jeUZvcm1hdCkgOiAnMSwyMzQsNTY3Ljg5JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY3VycmVuY3lTeW1ib2wpIHtcbiAgICAgIGNvbnN0IHN0b3JlZEN1cnJlbmN5U3ltYm9sID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbmN5U3ltYm9sJyk7XG4gICAgICBpZiAoc3RvcmVkQ3VycmVuY3lTeW1ib2wpIHtcbiAgICAgICAgdGhpcy5jdXJyZW5jeVN5bWJvbCA9IHN0b3JlZEN1cnJlbmN5U3ltYm9sID8gSlNPTi5wYXJzZShzdG9yZWRDdXJyZW5jeVN5bWJvbCkgOiAnJCc7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICAvLyBwcml2YXRlIGdldERlY3J5cHQoa2V5OnN0cmluZyl7XG4gIC8vICAgICBjb25zdCB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSlcbiAgLy8gICAgIHRyeSB7XG4gIC8vICAgICAgIHJldHVybiBKU09OLnBhcnNlKENyeXB0b0pTLkFFUy5kZWNyeXB0KHZhbHVlIGFzIHN0cmluZywgdGhpcy5zZWNyZXRLZXkpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KSlcbiAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcbiAgLy8gICAgICAgcmV0dXJuIG51bGw7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIGRhdGFTZXRMb2FkaW5nID0gZmFsc2U7XG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpe1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIGF3YWl0IHRoaXMuc2V0Q29sdW1uc0NvbHVtbkRyb3Bkb3duVmFsdXMoKTtcblxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd0YWJzJ10pIHtcbiAgICAgIGlmIChjaGFuZ2VzWyd0YWJzJ10pIHtcbiAgICAgICAgY29uc3QgYWxsVGFicyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYnMnKSB8fCAne30nKTtcbiAgICAgICAgIGxldCBzYXZlZFRhYiBcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPyAoIHNhdmVkVGFiID0gdGhpcy5zZWxlY3RlZFRhYiApIDogKCBzYXZlZFRhYiA9IGFsbFRhYnNbdGhpcy50YWJsZVR5cGVdKVxuICAgICAgICAvLyBjb25zdCBzYXZlZFRhYiA9IGFsbFRhYnNbdGhpcy50YWJsZVR5cGVdO1xuICAgICAgICBpZiAodGhpcy50YWJzLmluY2x1ZGVzKCdDdXJyZW50IFBvbGljeScpKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYnM/LlsxXSB8fCAnQ3VycmVudCBQb2xpY3knO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gc2F2ZWRUYWIgfHwgdGhpcy50YWJzPy5bMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiAodGhpcy50YWJsZVR5cGUpIHtcbiAgICAgICAgLy8gICB0aGlzLnNldEFjdGl2ZVRhYih0aGlzLmFjdGl2ZVRhYik7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2ZpbHRlcnNDb25maWcnXSkge1xuICAgICAgdGhpcy5jaGVja0ZpbHRlckNoYW5nZXNFZmZlY3QoKTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXT8uY3VycmVudFZhbHVlPy5sZW5ndGgpIHtcblxuICAgICAgYXdhaXQgdGhpcy5hcHBseUZpbHRlcm9wdGlvbkxpc3QoKTtcblxuICAgICAgdGhpcy5vcmlnaW5hbENvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgICAgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlOiBjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgPyBbLi4uY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZV1cbiAgICAgICAgICA6IFtdLFxuICAgICAgfSkpO1xuXG5cbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCkge1xuICAgICAgICBhd2FpdCB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5zZXRTZWN0aW9uc1dpZHRoKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGFTZXQnXSkge1xuICAgICAgdGhpcy5kYXRhU2V0ID0gdGhpcy5kYXRhU2V0Py5tYXAoKHJvdywgaSkgPT4gKHtcbiAgICAgICAgLi4ucm93LFxuICAgICAgICBfX3ZpcnR1YWxJbmRleDogaSArIDEsXG4gICAgICB9KSk7XG4gICAgICB0aGlzLm9yaWdpbmFsRGF0YVNldCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmRhdGFTZXQpO1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbXB1dGVWaWV3cG9ydFJvd3MoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgIGlmKHRoaXMuY29tbW9uU2V2aWNlPy5tYWluQ29udGFpbmVyTGVmdCA+IDIwMClcbiAgICAgICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY2VudGVyUGlubmVkSGVhZGVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHZvaWQgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgICAgICB0aGlzLmRhdGFTZXRMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICAgICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGFTZXRMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFwcGx5Um93c1NlbGVjdGlvblN0YXRlKCk7XG5cbiAgICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMuZm9yRWFjaChncm91cGVkQ29sID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtDb2x1bW5Bc0dyb3VwZWQodGhpcy5jb2x1bW5zLCBncm91cGVkQ29sLmZpZWxkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG5cbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjaGVja2JveFN0YXRlJ10/LmN1cnJlbnRWYWx1ZT8ucmVzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdGUodGhpcy50YWJsZVR5cGUpO1xuXG4gICAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgICAgb2JqOiBpZHMsXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogJ29uU2VsZWN0Um93JyxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjbG9zZURyb3Bkb3duJ10gJiYgdGhpcy5jbG9zZURyb3Bkb3duLnByZXNldC5jbG9zZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gbnVsbDtcbiAgICAgIHRoaXMucHJlc2V0RmlsdGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnByZXNldE5hbWUgPSAnJztcbiAgICB9XG5cbiAgICAvLyBpZiAoY2hhbmdlc1snb2RkUm93c0JhY2tncm91bmRDb2xvciddKSB7XG4gICAgLy8gICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gISF0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I7XG4gICAgLy8gfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3Jlc2V0QWxsRmlsdGVycyddICYmIHRoaXMucmVzZXRBbGxGaWx0ZXJzLnJlc2V0QWxsKSB7XG4gICAgICB0aGlzLmNsZWFyQWxsRmlsdGVycygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWyd0YWJsZVZpZXcnXSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdWYWx1ZSA9IHRoaXMudGFibGVWaWV3O1xuICAgICAgICBsZXQgdGVtcHJvcnlTZWxlY3RlZCA9IEFycmF5LmlzQXJyYXkodmlld1ZhbHVlKVxuICAgICAgICAgID8gdmlld1ZhbHVlLmZpbmQoaXRlbSA9PiBpdGVtLmlzX3RlbXApXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmICghdGVtcHJvcnlTZWxlY3RlZCkge1xuICAgICAgICAgIHRlbXByb3J5U2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KHZpZXdWYWx1ZSlcbiAgICAgICAgICAgID8gdmlld1ZhbHVlLmZpbmQoaXRlbSA9PiBpdGVtLmlzX2RlZmF1bHQpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IHRlbXByb3J5U2VsZWN0ZWQgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5wcmVzZXROYW1lID0gdGVtcHJvcnlTZWxlY3RlZD8ubmFtZSB8fCAnJztcbiAgICAgICAgdGhpcy5zdG9yZVByZXNldE5hbWUgPSB0ZW1wcm9yeVNlbGVjdGVkPy5uYW1lIHx8ICcnO1xuICAgICAgICB0aGlzLnByZXNldEZpbHRlciA9IHRlbXByb3J5U2VsZWN0ZWQ/LmFjdGl2ZUZpbHRlcnMgfHwgZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkge1xuICAgICAgICAgIHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZDtcbiAgICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlcjtcbiAgICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5mb250RmFpbWx5O1xuICAgICAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmhlYWRlclRleHRGb250c1NpemU7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dDtcbiAgICAgICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuYm9keVRleHRGb250c1NpemU7XG4gICAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hUZXh0ID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuZ2xvYmFsU2VhcmNoO1xuICAgICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQodGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0KTtcbiAgICAgICAgICB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgPSB0ZW1wcm9yeVNlbGVjdGVkPy5jb25maWc/Lm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgfHwgJyNmMWYxZjEnO1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gdGVtcHJvcnlTZWxlY3RlZD8uY29uZmlnPy5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgICBpZihncm91cGVkQ29sdW1ucz8ubGVuZ3RoKXtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ3JvdXBlZENvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLmRhdGFTZXQsIHRoaXMuZ3JvdXBlZENvbHVtbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gIGVsc2UgaWYodGhpcy5kZWZhdWx0Q29uZmlnKXtcbiAgICAgICAgICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gdGhpcy5kZWZhdWx0Q29uZmlnLnJvd1NoYWRpbmdFbmFibGVkIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gdGhpcy5kZWZhdWx0Q29uZmlnLnNob3dWZXJ0aWNhbEJvcmRlciB8fCBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSB0aGlzLmRlZmF1bHRDb25maWcuZm9udEZhaW1seSB8fCAnSW50ZXInO1xuICAgICAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuZGVmYXVsdENvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE0O1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IHRoaXMuZGVmYXVsdENvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0IHx8ICdtZWRpdW0nO1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmRlZmF1bHRDb25maWcuYm9keVRleHRGb250c1NpemUgfHwgMTQ7XG4gICAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hUZXh0ID0gdGhpcy5kZWZhdWx0Q29uZmlnLmdsb2JhbFNlYXJjaDtcbiAgICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSAnbWVkaXVtJztcbiAgICAgICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gMTQ7XG4gICAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgICAgdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgICAgICAgIHRoaXMucHJlc2V0TmFtZSA9ICcnXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgaWYoY2hhbmdlc1sncGFnZVNpemVPcHRpb25zJ10gJiYgY2hhbmdlc1sncGFnZVNpemVPcHRpb25zJ10/LmN1cnJlbnRWYWx1ZSl7XG4gICAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgXG5cbiAgYXN5bmMgc2V0Q29sdW1uc0NvbHVtbkRyb3Bkb3duVmFsdXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnMpIHJldHVybjtcbiAgICAvLyBKdXN0IHJlbW92ZWQgdGVtcG9yYXJ5IGZvciBzdXBlciBhZG1pbiB3aWxsIHNldCBpdCBhZ2FpblxuICAgIC8vIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgIC8vICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoYyA9PiBjPy5maWVsZD8udHJpbSgpICE9PSAnaXNfZGVsZXRlZCcpXG4gICAgLy8gfVxuICAgIHRoaXMuY29sdW1ucyA9IGF3YWl0IHRoaXMuY29tbW9uU2V2aWNlLmNvcHlEcm9wZG93bkRhdGFSZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICB9XG5cblxuXG5cbiAgYXBwbHlSb3dzU2VsZWN0aW9uU3RhdGUoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNGcm9tU3RhdGUgPSB0aGlzLnJlc3RvcmVTZWxlY3Rpb24odGhpcy50YWJsZVR5cGUpO1xuICAgIGlmIChzZWxlY3RlZElkc0Zyb21TdGF0ZS5zaXplID4gMCkge1xuICAgICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICAgIG9iajogaWRzXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgICAgfVxuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb25TdGF0ZSh0YWJsZVR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JlZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RhdGF0YWJsZVNlbGVjdGlvbnMnKSB8fCAne1wic2VsZWN0ZWRSb3dzXCI6IHt9fScpO1xuICAgIGlmIChzdG9yZWQuc2VsZWN0ZWRSb3dzICYmIHN0b3JlZC5zZWxlY3RlZFJvd3NbdGFibGVUeXBlXSkge1xuICAgICAgZGVsZXRlIHN0b3JlZC5zZWxlY3RlZFJvd3NbdGFibGVUeXBlXTtcbiAgICB9XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAnZGF0YXRhYmxlU2VsZWN0aW9ucycsXG4gICAgICBKU09OLnN0cmluZ2lmeShzdG9yZWQpXG4gICAgKTtcbiAgfVxuXG5cblxuICBhc3luYyBhcHBseUZpbHRlcm9wdGlvbkxpc3QoKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbnMgPSBhd2FpdCB0aGlzLmNvbW1vblNldmljZS5hcHBseUZpbHRlcnNUb0NvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIHRoaXMuY29sdW1ucyA9IFsuLi51cGRhdGVkQ29sdW1uc107XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGxlZnRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBjZW50ZXJDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICByaWdodFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG5cbiAgcHJldmlld0xlZnRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBwcmV2aWV3Q2VudGVyQ29sdW1uczogYW55W10gPSBbXTtcbiAgcHJldmlld1JpZ2h0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcblxuICAvLyBNYWluIENvbnRhaW5lciBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2RhdGFHcmlkQ29udGFpbmVyJylcbiAgZGF0YUdyaWRDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGFza01hbmFnZW1lbnRDb250YWluZXInKVxuICB0YXNrTWFuYWdlbWVudENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCduZXN0ZWRUYWJsZUNvbnRhaW5lcicpXG4gIG5lc3RlZFRhYmxlQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gQm9keSBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2xlZnRQaW5uZWRCb2R5JylcbiAgbGVmdFBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2VudGVyUGlubmVkQm9keScpXG4gIGNlbnRlclBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncmlnaHRQaW5uZWRCb2R5JylcbiAgcmlnaHRQaW5uZWRCb2R5ITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgLy8gSGVhZGVycyBUZW1wbGF0ZSBSZWZlcmVuY2VzXG4gIEBWaWV3Q2hpbGQoJ2xlZnRQaW5uZWRIZWFkZXInKVxuICBsZWZ0UGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclBpbm5lZEhlYWRlcicpXG4gIGNlbnRlclBpbm5lZEhlYWRlciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdyaWdodFBpbm5lZEhlYWRlcicpXG4gIHJpZ2h0UGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2dsb2JhbFNlYXJjaElucHV0JylcbiAgZ2xvYmFsU2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbHVtbnNHcm91cGVkQm94JylcbiAgY29sdW1uc0dyb3VwZWRCb3ghOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBDZW50ZXIgRmFrZSBzY3JvbGxiYXJkXG4gIEBWaWV3Q2hpbGQoJ2NlbnRlckZha2VTY3JvbGxiYXInKVxuICBjZW50ZXJGYWtlU2Nyb2xsYmFyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIGFzeW5jIHVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3Vwcyhjb2x1bW5zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29udGFpbmVyKSByZXR1cm47XG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgLy8gV3JhcCBpbiBhIHByb21pc2Ugc28gd2UgY2FuIGF3YWl0XG4gICAgY29uc3QgeyBsZWZ0LCBjZW50ZXIsIHJpZ2h0IH06IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0aGlzLmNvbHVtblNlcnZpY2UucHJlcGFyZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMgPyBjb2x1bW5zIDogdGhpcy5jb2x1bW5zLFxuICAgICAgICBjb250YWluZXJXaWR0aFxuICAgICAgKTtcbiAgICAgIHJlc29sdmUocHJlcGFyZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5sZWZ0UGlubmVkQ29sdW1ucyA9IGxlZnQ7XG4gICAgdGhpcy5jZW50ZXJDb2x1bW5zID0gY2VudGVyO1xuICAgIHRoaXMucmlnaHRQaW5uZWRDb2x1bW5zID0gcmlnaHQ7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoUHJldmlld0NvbHVtbnMoY29sdW1uczogYW55ID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAvLyBXcmFwIHByZXBhcmVDb2x1bW5zIGluIGEgUHJvbWlzZSB0byBtYWtlIGl0IGF3YWl0YWJsZVxuICAgIGNvbnN0IHsgbGVmdCwgY2VudGVyLCByaWdodCB9OiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHByZXBhcmVkID0gdGhpcy5jb2x1bW5TZXJ2aWNlLnByZXBhcmVDb2x1bW5zKFxuICAgICAgICBjb2x1bW5zID8gY29sdW1ucyA6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgY29udGFpbmVyV2lkdGhcbiAgICAgICk7XG4gICAgICByZXNvbHZlKHByZXBhcmVkKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJldmlld0xlZnRQaW5uZWRDb2x1bW5zID0gbGVmdDtcbiAgICB0aGlzLnByZXZpZXdDZW50ZXJDb2x1bW5zID0gY2VudGVyO1xuICAgIHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyA9IHJpZ2h0O1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXN5bmMgU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICAvLyBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIC8vIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIC8vIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIC8vIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgLy8gaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAvLyBjb250YWluZXJXaWR0aCAtPSA1O1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1uU2VydmljZS5hc3NpZ25EZWZhdWx0V2lkdGhzKFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgY29udGFpbmVyV2lkdGhcbiAgICApO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBzZXRTZWN0aW9uc1dpZHRoKCkge1xuICAgIGNvbnN0IGxlZnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGVmdC1waW5uZWQtYm9keScpIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGNlbnRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnLmNlbnRlci1zY3JvbGxhYmxlLWJvZHknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yaWdodC1waW5uZWQtYm9keScpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChsZWZ0KSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5sZWZ0UGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gICAgaWYgKGNlbnRlcikge1xuICAgICAgbGVmdC5zdHlsZS5taW5XaWR0aCA9IGAke3RoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5yaWdodFBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofWA7XG4gICAgfVxuICB9XG5cbiAgLy8gb25DZW50ZXJCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuICAvLyAgIC8vIFN5bmMgdmVydGljYWwgc2Nyb2xsIHdpdGggbGVmdCAmIHJpZ2h0IHBpbm5lZCBib2RpZXNcbiAgLy8gICB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuXG4gIC8vICAgLy8gU3luYyBob3Jpem9udGFsIHNjcm9sbCB3aXRoIGNlbnRlciBoZWFkZXJcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyRmFrZVNjcm9sbGJhci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAvLyB9XG5cbiAgLy8gb25MZWZ0Qm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gfVxuICAvLyBvblJpZ2h0Qm9keVNjcm9sbCgpOiB2b2lkIHtcbiAgLy8gICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnJpZ2h0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5sZWZ0UGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gfVxuXG4gIGZha2VTY3JvbGxiYXJTY3JvbGxMZWZ0ID0gMDtcbiAgLy8gb25GYWtlU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgLy8gICB0aGlzLmZha2VTY3JvbGxiYXJTY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAvLyB9XG5cblxuXG5cbiAgLy8gZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICAvLyAgIHJldHVybiBmaWVsZD8uc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgcGFydCkgPT4gYWNjICYmIGFjY1twYXJ0XSwgb2JqKTtcbiAgLy8gfVxuZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICBpZiAoIW9iaiB8fCAhZmllbGQpIHJldHVybiBudWxsO1xuICBcbiAgLy8gR2V0IHRoZSByYXcgdmFsdWVcbiAgY29uc3QgdmFsdWUgPSBmaWVsZC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xuICBcbiAgLy8g4pyFIElmIGl0J3MgYSBzdGF0dXMgZmllbGQsIGNhcGl0YWxpemUgdGhlIHZhbHVlXG4gIGlmICh0aGlzLmlzU3RhdHVzRmllbGQoZmllbGQpICYmIHZhbHVlKSB7XG4gICAgLy8gSGFuZGxlIG9iamVjdCB3aXRoIHZhbHVlL25hbWUgcHJvcGVydGllc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSA/IHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZS52YWx1ZSkgOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgbmFtZTogdmFsdWUubmFtZSA/IHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZS5uYW1lKSA6IHZhbHVlLm5hbWVcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIC8vIEhhbmRsZSBwbGFpbiBzdHJpbmcvbnVtYmVyIHZhbHVlc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhcGl0YWxpemVTdGF0dXModmFsdWUpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHZhbHVlO1xufVxuICBpc05lc3RlZFZhbHVlQXJyYXkob2JqOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIW9iaiB8fCAhZmllbGQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiAoYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkID8gYWNjW3BhcnRdIDogdW5kZWZpbmVkKSwgb2JqKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBvblJlc2l6ZUdyb3VwKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2w6IGFueSwgaXNSaWdodFBpbm5lZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbC5jaGlsZHJlbiB8fCBbXTtcbiAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hpbGRXaWR0aHM6IHsgZmllbGQ6IHN0cmluZzsgd2lkdGg6IG51bWJlciB9W10gPSBjaGlsZHJlbi5tYXAoXG4gICAgICAoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgYFtmaWVsZD1cIiR7Y2hpbGQuZmllbGR9XCJdYFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkOiBjaGlsZC5maWVsZCxcbiAgICAgICAgICB3aWR0aDogZWw/Lm9mZnNldFdpZHRoIHx8IDAsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHRvdGFsSW5pdGlhbFdpZHRoID0gY2hpbGRXaWR0aHMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyBjb2wud2lkdGgsXG4gICAgICAwXG4gICAgKTtcblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgbGV0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICBpZiAoaXNSaWdodFBpbm5lZCkge1xuICAgICAgICBkZWx0YVggPSAtZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IHNocmlua2luZyB0b28gc21hbGxcbiAgICAgIGlmICh0b3RhbEluaXRpYWxXaWR0aCArIGRlbHRhWCA8IGNoaWxkcmVuLmxlbmd0aCAqIDgwKSByZXR1cm47XG5cbiAgICAgIGxldCB0b3RhbE5ld1dpZHRoID0gMDtcblxuICAgICAgY2hpbGRXaWR0aHMuZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgcmF0aW8gPSBjaGlsZC53aWR0aCAvIHRvdGFsSW5pdGlhbFdpZHRoO1xuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KGNoaWxkLndpZHRoICsgZGVsdGFYICogcmF0aW8sIDgwKTtcbiAgICAgICAgdG90YWxOZXdXaWR0aCArPSBuZXdXaWR0aDtcblxuICAgICAgICBjb25zdCBjaGlsZEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y2hpbGQuZmllbGR9XCJdYCk7XG4gICAgICAgIGNoaWxkRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxIdG1sID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgZWxIdG1sLnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICAgIGVsSHRtbC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjaGlsZC5maWVsZCwgbmV3V2lkdGgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIOKchSBVcGRhdGUgZ3JvdXAgaGVhZGVyIHdpZHRoIGluIERPTVxuICAgICAgY29uc3QgZ3JvdXBIZWFkZXJFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGBbZ3JvdXA9XCIke2NvbC5oZWFkZXJ9XCJdYFxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChncm91cEhlYWRlckVsKSB7XG4gICAgICAgIGdyb3VwSGVhZGVyRWwuc3R5bGUud2lkdGggPSBgJHt0b3RhbE5ld1dpZHRofXB4YDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHRhYmxlX2NvbmZpZzoge1xuICAgICAgICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgc2hvd1ZlcnRpY2FsQm9yZGVyOiB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciB8fCBmYWxzZSxcbiAgICAgICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5IHx8ICdJbnRlcicsXG4gICAgICAgICAgIGhlYWRlclRleHRGb250c1NpemU6IHRoaXMuaGVhZGVyVGV4dENvbG9yIHx8IDE0LFxuICAgICAgICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bWQnLFxuICAgICAgICAgICBib2R5VGV4dEZvbnRzU2l6ZTogdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNCxcbiAgICAgICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaFRleHQsXG4gICAgICAgICAgIGZpbHRlck5hbWVzOiAnJyxcbiAgICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICAgYWN0aXZlRmlsdGVyczogdHJ1ZSxcbiAgICAgICAgICAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogJyNmMWYxZjEnXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGUgPSAoY29sdW1uczogYW55W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdXBkYXRlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHVwZGF0ZSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBjcmVhdGVVcGRhdGVDb2x1bW5Db25maWcoKXtcbiAgICByZXR1cm4ge1xuICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHRhYmxlX2NvbmZpZzoge1xuICAgICAgICAgICAgICAgICAgcm93U2hhZGluZ0VuYWJsZWQ6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgZm9udEZhaW1seTogdGhpcy5mb250RmFpbWx5ICB8fCAnSW50ZXInLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogTnVtYmVyKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSkgfHwgMTQsXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhYmxlTGF5b3V0OiB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgfHwgJ21lZGl1bWQnLFxuICAgICAgICAgICAgICAgICAgYm9keVRleHRGb250c1NpemU6IE51bWJlcih0aGlzLmJvZHlUZXh0Rm9udHNTaXplKSB8fCAxNCxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbFNlYXJjaDogdGhpcy5nbG9iYWxTZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZXM6ICcnLFxuICAgICAgICAgICAgICAgICAgdG90YWxDb3VudDogMCxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcnM6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiAnI2YxZjFmMSdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9XG4gIH1cblxuICBjbGVhbkNvbHVtbnMoY29sdW1uczogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX190eXBlbmFtZSxcbiAgICAgICAgX2lkLFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWUsXG4gICAgICAgIGZpbHRlclZhbHVlLFxuICAgICAgICBleHBhbmRlZEZpbHRlcixcbiAgICAgICAgY2VsbFJlbmRlcmVyLFxuICAgICAgICBmaWx0ZXJSZW5kZXJlcixcbiAgICAgICAgY2VsbENvbXBvbmVudFJlZixcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGlzUm93R3JvdXBlZCxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IGNvbDtcblxuICAgICAgLy8gQ2xlYW4gZHJvcGRvd24gdmFsdWVzIChfX3R5cGVuYW1lIHJlbW92ZWQpXG4gICAgICBjb25zdCBjbGVhbmVkRHJvcGRvd24gPSBBcnJheS5pc0FycmF5KGNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgPyBjb2x1bW5fZHJvcGRvd25fdmFsdWUubWFwKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KVxuICAgICAgICA6IGNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgID8gKCh7IF9fdHlwZW5hbWUsIC4uLmRSZXN0IH0pID0+IGRSZXN0KShjb2x1bW5fZHJvcGRvd25fdmFsdWUpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAvLyBDbGVhbiBxdWVyeSAoX190eXBlbmFtZSByZW1vdmVkKVxuICAgICAgY29uc3QgY2xlYW5lZFF1ZXJ5ID0gQXJyYXkuaXNBcnJheShxdWVyeSlcbiAgICAgICAgPyBxdWVyeS5tYXAoKHsgX190eXBlbmFtZSwgLi4ucVJlc3QgfSkgPT4gcVJlc3QpXG4gICAgICAgIDogcXVlcnlcbiAgICAgICAgICA/ICgoeyBfX3R5cGVuYW1lLCBfaWRzLCAuLi5xUmVzdCB9KSA9PiBxUmVzdCkocXVlcnkpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBjb2x1bW5fZHJvcGRvd25fdmFsdWU6IGNsZWFuZWREcm9wZG93bixcbiAgICAgICAgcXVlcnk6IGNsZWFuZWRRdWVyeSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblJlc2l6ZUNvbHVtbihldmVudDogTW91c2VFdmVudCwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpbml0aWFsV2lkdGggPSB0YXJnZXRFbD8ub2Zmc2V0V2lkdGggfHwgMTUwO1xuXG4gICAgY29uc3QgbWF0Y2hpbmdFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKTtcblxuICAgIC8vIPCfkYkgQWRkIGhpZ2hsaWdodCB3aGlsZSByZXNpemluZ1xuICAgIGlmIChjb2w/LnBpbm5lZCA9PSAncmlnaHQnKSB7XG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nLWhpZ2hsaWdodC1yaWdodCcpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmctaGlnaGxpZ2h0Jyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGxldCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcblxuICAgICAgLy8g8J+RiSBSZXZlcnNlIGlmIHRoZSBjb2x1bW4gaXMgcGlubmVkIHRvIHRoZSByaWdodFxuICAgICAgaWYgKGNvbC5waW5uZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgZGVsdGFYID0gLWRlbHRhWDtcbiAgICAgIH1cblxuICAgICAgbGV0IG5ld1dpZHRoID0gaW5pdGlhbFdpZHRoICsgZGVsdGFYO1xuICAgICAgaWYgKG5ld1dpZHRoIDwgODApIHJldHVybjtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBlbGVtZW50LnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgICBjb2wud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICAgIHRoaXMuc2F2ZVByZXNldCgnbW91c2VVcCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQnKTtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZy1oaWdobGlnaHQtcmlnaHQnKTtcbiAgICAgIH0pO1xuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG5cblxuICBvblJlc2l6ZUdyb3VwQm94KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG5cbiAgICBjb25zdCB0YXJnZXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncm91cEJveEhlYWRlckRpdicpO1xuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRhcmdldEVsPy5vZmZzZXRXaWR0aCB8fCAxNTA7XG5cbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICBsZXQgbmV3V2lkdGggPSBpbml0aWFsV2lkdGggKyBkZWx0YVg7XG4gICAgICBpZiAobmV3V2lkdGggPCAxMDApIG5ld1dpZHRoID0gMTAwO1xuXG4gICAgICBpZiAodGFyZ2V0RWwpIHtcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIHRhcmdldEVsLnN0eWxlLm1pbldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IG5ld1dpZHRoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG4gIG9uUGFzdGVJbkZpbHRlclJvd1NlYXJjaChldmVudDogQ2xpcGJvYXJkRXZlbnQsIGNvbDogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm9uRmlsdGVyQ2hhbmdlKGNvbCk7XG4gICAgICB0aGlzLmFwcGx5RHJvcGRvd25GaWx0ZXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjb2wuZmlsdGVyVmFsdWU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcbiAgICBpZiAoIWNvbD8ucXVlcnkpIHtcbiAgICAgIGNvbC5xdWVyeSA9IHtcbiAgICAgICAgZmlyc3RfY29uZGl0aW9uOiBjb2wudHlwZSA9PSAnZGF0ZScgPyAnZXF1YWwnIDogJ2NvbnRhaW4nLFxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogbnVsbCxcbiAgICAgICAgc2Vjb25kX3ZhbHVlOiBudWxsLFxuICAgICAgICBjb25kaXRpb246IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgY29sLnF1ZXJ5LmZpcnN0X3ZhbHVlID0gZmlsdGVyVmFsdWU7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gZmlsdGVyVmFsdWU7XG4gIH1cblxuICAvLyBHZXQgQm9keSBIZWlnaHRcbiAgZ2V0IGJvZHlXcmFwcGVySGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyAmJiB0aGlzLnNob3dGaWx0ZXJSb3cgPyAzIDogKHRoaXMuc2hvd0NvbHVtbnNHcm91cGluZyB8fCB0aGlzLnNob3dGaWx0ZXJSb3cgPyAyIDogMSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5oZWFkZXJSb3dIZWlnaHQgKiByb3dzICsgKHRoaXMuaGFzU2Nyb2xsID8gMTcgOiAwKTtcbiAgICByZXR1cm4gYGNhbGMoMTAwJSAtICR7b2Zmc2V0fXB4KWA7XG4gIH1cblxuICAvLyBSb3cgSG92ZXIgTG9naWMgSGVyZVxuICBob3ZlcmVkUm93SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBvblJvd0hvdmVyKHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSByb3cuX2lkIHx8IHJvdy5pZDtcbiAgfVxuXG4gIG9uUm93TGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkUm93SWQgPSBudWxsO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5JbmRleCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaGFzUGFyZW50V2l0aENsYXNzKHRhcmdldCwgW1xuICAgICAgICAndGhyZWUtZG90cycsXG4gICAgICAgICdmaWx0ZXItaWNvbi13cmFwcGVyJyxcbiAgICAgICAgJ2NvbHVtbi1tZW51JyxcbiAgICAgICAgJ2ZpbHRlci1tZW51JyxcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbnNEcm9wRG93biA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpbnNpZGVUb3BGaWx0ZXJSb3cgPSB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci10YWdzJykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5hZGQtZmlsdGVyLWJ1dHRvbi1tZW51JykgfHxcbiAgICAgIHRhcmdldC5jbG9zZXN0KCcudGFibGUtcmlnaHQtdG9wLWFjdGlvbnMnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLnRhYmxlLWxheW91dCcpIHx8IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLXJvdy1maWx0ZXItd3JhcHBlcicpO1xuICAgIGNvbnN0IGlzQ2xpY2tlZEluc2lkZVRocmVlRG90c0ZpbHRlciA9IHRhcmdldC5jbG9zZXN0KCcudGhyZWUtZG90cy1maWx0ZXInKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmZpbHRlci1tZW51LWNvbnRhaW5lcicpO1xuICAgIGlmICghaXNDbGlja2VkSW5zaWRlVGhyZWVEb3RzRmlsdGVyKSB7XG4gICAgICB0aGlzLmNsb3NlVGhyZWVEb3RzTWVudUZpbHRlcigpO1xuICAgIH1cbiAgICBpZiAoIWluc2lkZVRvcEZpbHRlclJvdykge1xuICAgICAgdGhpcy5jbG9zZUZpbHRlckRyb3Bkb3ducyhldmVudCk7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5zZXQtZGVmYXVsdC1wcmVzZXQnKSkge1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNldC1kZWZhdWx0LXByZXNldCcpPy5jbGFzc0xpc3Q/LnJlbW92ZSgnc2hvdycpO1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoJy5mdWxsLXRleHQtYm94JykgJiYgIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLWhlYWRlci13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC10YWJsZS13cmFwcGVyJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgICB0aGlzLmFjdGl2ZUNlbGwgPSAnJztcbiAgICB9XG5cbiAgICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmRhdGEtZ3JpZC1ib2R5JykpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBjbG9zZVRocmVlRG90c01lbnVGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG5cbiAgY2xvc2VGaWx0ZXJEcm9wZG93bnMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNQYXJlbnRXaXRoQ2xhc3MoXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgY2xhc3NMaXN0OiBzdHJpbmdbXVxuICApOiBib29sZWFuIHtcbiAgICBsZXQgZWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgICB3aGlsZSAoZWwgIT09IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWwuY2xhc3NMaXN0ICYmXG4gICAgICAgIGNsYXNzTGlzdC5zb21lKChjbGFzc05hbWUpID0+IGVsIS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gIG9wZW5UaHJlZURvdHNNZW51KGV2ZW50OiBNb3VzZUV2ZW50LCBjaGlsZDogYW55LCBrZWVwT3JpZ2luYWxQb3NpdGlvbiA9IGZhbHNlKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzTWVudWVIaWRkZW4gPSB0cnVlO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGg7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBjaGlsZDtcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIGNvbnN0IHggPSBldmVudC5jbGllbnRYO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb2x1bW4tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHggPiAoY29udGFpbmVyV2lkdGggLyAyKSkge1xuICAgICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3ggLSAyNDB9cHhgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsZW1lbnQhLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc01lbnVlSGlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIENvbHVtbiBUaHJlZSBEb3RzIEFjdGlvbnNcbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgc29ydEFzYyhjb2w6IGFueSkge1xuICAgIGlmICghY29sLmlzX3NvcnRhYmxlKSByZXR1cm47XG4gICAgY29sIS5vcmRlcl9ieSA9ICdhc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgY29sdW1uOiBjb2xcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHNvcnREZXNjKGNvbDogYW55KSB7XG4gICAgaWYgKCFjb2wuaXNfc29ydGFibGUpIHJldHVybjtcbiAgICBjb2whLm9yZGVyX2J5ID0gJ2Rlc2MnO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb3JkZXI6ICdkZXNjJyxcbiAgICAgIGNvbHVtbjogY29sXG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNvcnRpbmdPcmRlck9wdGlvbnMuZW1pdChldmVudCk7XG4gIH1cblxuICByZXNldFNvcnQoY29sOiBhbnkpIHtcbiAgICB0aGlzLnNvcnRpbmdDb25maWcgPSB7IGZpZWxkOiAnJywgb3JkZXJfYnk6ICcnIH07XG4gICAgY29uc3QgZXZlbnQgPSB7IGZpZWxkOiBudWxsLCBvcmRlcl9ieTogbnVsbCB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG5cbiAgYXN5bmMgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgIGNvbHVtbjogYW55LFxuICAgIHBpbm5lZDogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGwsXG4gICAgaXNOZXN0ZWRUYWJsZTogYW55ID0gZmFsc2UsXG4gICAgY29sdW1ucz86IGFueVxuICApIHtcbiAgICBkZWJ1Z2dlclxuICAgIGlmIChpc05lc3RlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBpblVucGluQ29sdW0oY29sdW1uLCBwaW5uZWQsIGNvbHVtbnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGUgPSAoY29sdW1uczogYW55W10pID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgdXBkYXRlKGNvbC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICBjb2wucGlubmVkID0gcGlubmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdXBkYXRlKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSkge1xuICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGF1dG9zaXplQ29sdW1uKGNvbHM6IGFueSB8IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgLy8gTm9ybWFsaXplIGlucHV0IHRvIGFuIGFycmF5XG4gICAgY29uc3QgY29sdW1uc1RvUmVzaXplID0gQXJyYXkuaXNBcnJheShjb2xzKSA/IGNvbHMgOiBbY29sc107XG5cbiAgICAvLyBIZWxwZXI6IEZsYXR0ZW4gYWxsIHZpc2libGUgbGVhZiBjb2x1bW5zXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb25zdCBlcXVhbFdpZHRoID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIHZpc2libGVDb3VudCk7XG5cbiAgICAvLyBSZXNpemUgZWFjaCBwYXNzZWQgY29sdW1uXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1uc1RvUmVzaXplKSB7XG4gICAgICBpZiAoY29sICYmIGNvbC5maWVsZCkge1xuICAgICAgICBjb2wud2lkdGggPSBlcXVhbFdpZHRoO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNvbC5maWVsZCwgZXF1YWxXaWR0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICB9XG5cbiAgZ2V0R3JvdXBXaWR0aChncm91cDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgZ3JvdXA/LmNoaWxkcmVuXG4gICAgICAgID8uZmlsdGVyKChjb2w6IGFueSkgPT4gY29sPy5pc192aXNpYmxlKVxuICAgICAgICA/LnJlZHVjZSgoYWNjOiBudW1iZXIsIGNvbDogYW55KSA9PiBhY2MgKyAoY29sPy53aWR0aCB8fCAwKSwgMCkgfHwgMFxuICAgICk7XG4gIH1cblxuICBhdXRvc2l6ZUFsbENvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVDb2wgPSBudWxsO1xuXG4gICAgY29uc3QgZ2V0VmlzaWJsZUxlYWZDb2x1bW5zID0gKGNvbHVtbnM6IGFueVtdKTogYW55W10gPT4ge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2x1bW4uY2hpbGRyZW4pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBnZXRWaXNpYmxlTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG5cbiAgICBpZiAodmlzaWJsZUNvdW50ID09PSAwKSByZXR1cm47XG5cbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgY29uc3QgZXF1YWxXaWR0aCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyB2aXNpYmxlQ291bnQpLCAxNTApO1xuXG4gICAgLy8gVXBkYXRlIHdpZHRocyBmb3IgYWxsIHZpc2libGUgY29sdW1uc1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29sLndpZHRoID0gZXF1YWxXaWR0aDtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb2x1bW5Bc0dyb3VwZWQoY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICBjb2wuaXNSb3dHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZChjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBncm91cEJ5KGNvbDogYW55KSB7XG4gICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBpZiAoY29sPy5pc19ncm91cGFibGUpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgY29sLmZpZWxkKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0sIDEwKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdyb3VwRGF0YUFzeW5jKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JvdXBEYXRhKGRhdGEsIGdyb3VwRmllbGRzKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gIH1cblxuXG5cblxuICBjaG9vc2VDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB0aGlzLnNob3dDb2x1bW5QYW5lbCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIC8vIHRoaXMuY29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLm9yaWdpbmFsQ29sdW1ucyk7XG4gICAgLy8gRGVlcCBjb3B5IG5lc3RlZCBvYmplY3RzIGJ1dCBrZWVwIGNsYXNzIHJlZnMgc2FmZVxuICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIC8vIERlZXAgY29weSBuZXN0ZWQgb2JqZWN0cyBidXQga2VlcCBjbGFzcyByZWZzIHNhZmVcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgIH0pKTtcblxuICAgIHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbDogYW55KSB7XG4gICAgY29sLmZpcnN0VmFsdWUgPSAnJztcbiAgICBjb2wuc2Vjb25kVmFsdWUgPSAnJztcbiAgICBjb2wuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgY29sLnNlY29uZENvbmRpdGlvbiA9IG51bGw7XG4gICAgY29sLmxvZ2ljID0gJ0FORCc7XG4gICAgY29sLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGNvbC5zZWxlY3RlZE9wdGlvbnMgPSB7fTtcbiAgICBjb2wuc2VhcmNoVmFsdWUgPSAnJztcblxuICB9XG5cblxuICBhcHBseUZpbHRlcihjb2w6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ29sdW1uc0xpc3QucHVzaChjb2wpO1xuICB9XG5cbiAgLy8gUm93cyBTZWxlY3Rpb24gTG9naWMgR29lcyBIZXJlXG5cbiAgc2VsZWN0ZWRSb3dzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvKipcbiAgICogR2V0IG5vcm1hbGl6ZWQgSUQgZnJvbSByb3cuXG4gICAqL1xuICBwcml2YXRlIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93LmlkID8/IHJvdy5faWQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGEgc2luZ2xlIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuXG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIGNvbnN0IGFsbElkcyA9IGxlYWZSb3dzLm1hcChyID0+IHRoaXMuZ2V0Um93SWQocikpO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBhbGxJZHMuZXZlcnkoaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSk7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIGFsbElkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxJZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoZGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgcmV0dXJuIGxlYWZSb3dzLmxlbmd0aCA+IDAgJiYgbGVhZlJvd3MuZXZlcnkociA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyKSkpO1xuICB9XG5cblxuICBpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gbGVhZlJvd3MuZmlsdGVyKHIgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocikpKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCA8IGxlYWZSb3dzLmxlbmd0aDtcbiAgfVxuXG5cbiAgZ2V0QWxsTGVhZlJvd3MoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgbGVhZjogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWFmLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRhdGEuZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgcmV0dXJuIGxlYWY7XG4gIH1cblxuXG5cblxuICAvLyBTaWRlIE1lbnUgV29ya2luZyBHb2VzIEhlcmVcbiAgdG9nZ2xlU2lkZU1lbnUoY2xpY2tlZE9uOiAnY29scycgfCAnZmlsdHJzJykge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gY2xpY2tlZE9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSA9ICF0aGlzLnNpZGVNZW51VmlzaWJsZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgJiZcbiAgICAgIGNsaWNrZWRPbiAhPSB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWVcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgPSAhdGhpcy5zaWRlTWVudVZpc2libGU7XG4gICAgfVxuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBWaXNpYmlsaXR5KGNvbDogYW55KSB7XG4gICAgY29uc3QgYWxsVmlzaWJsZSA9IGNvbC5jaGlsZHJlbi5ldmVyeSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IChjaGlsZC5pc192aXNpYmxlID0gIWFsbFZpc2libGUpKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uczogYW55KSB7XG4gICAgaWYgKGNvbHVtbnM/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5jaGlsZHJlbi5ldmVyeSgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmlzX3Zpc2libGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zPy5pc192aXNpYmxlO1xuICB9XG5cbiAgLy8gYWxsQ29sdW1uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgcmV0dXJuIGZsYXR0ZW4uZXZlcnkoKGNvbCkgPT4gY29sLmlzX3Zpc2libGUpO1xuICAvLyB9XG5hbGxDb2x1bW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIGNvbnN0IG5vbkFsd2F5c1Zpc2libGUgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gIWNvbC5pc19hbHdheXNfdmlzaWJsZSk7XG4gIFxuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnMgYXJlIHZpc2libGVcbiAgcmV0dXJuIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoID4gMCAmJiBub25BbHdheXNWaXNpYmxlLmV2ZXJ5KGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG59XG5cbiAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlGaWVsZChmaWVsZDogc3RyaW5nLCBjb2xzOiBhbnlbXSk6IGFueSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbkJ5RmllbGQoZmllbGQsIGNvbC5jaGlsZHJlbik7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBhc3luYyB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbjogYW55LCBpc1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1ucygpPy5sZW5ndGggPD0gMiAmJiBjb2x1bW4uaXNfdmlzaWJsZSB8fCAoY29sdW1uPy5pc19hbHdheXNfdmlzaWJsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUZpZWxkKGNvbHVtbi5maWVsZCwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb2wuaXNfdmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gIH1cblxuYXN5bmMgdG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZmxhdHRlbi5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1ucyB0aGF0IGFyZSBub3QgYWx3YXlzIHZpc2libGVcbiAgICBjb25zdCBub25BbHdheXNWaXNpYmxlID0gZmxhdHRlbi5maWx0ZXIoY29sID0+ICFjb2wuaXNfYWx3YXlzX3Zpc2libGUpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1ucyBhcmUgY3VycmVudGx5IHZpc2libGVcbiAgICBjb25zdCBhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSA9IG5vbkFsd2F5c1Zpc2libGUuZXZlcnkoY29sID0+IGNvbC5pc192aXNpYmxlKTtcblxuICAgIGlmIChhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSkge1xuICAgICAgLy8gSElERSBBTEwgKGJ1dCBrZWVwIG1pbmltdW0gMiB2aXNpYmxlKVxuICAgICAgLy8gRmlyc3QsIGhpZGUgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zXG4gICAgICBub25BbHdheXNWaXNpYmxlLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29sLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGVuLCBtYWtlIHN1cmUgYXQgbGVhc3QgMiBjb2x1bW5zIGFyZSB2aXNpYmxlIChpbmNsdWRpbmcgYWx3YXlzLXZpc2libGUgb25lcylcbiAgICAgIGNvbnN0IGFsd2F5c1Zpc2libGVDb3VudCA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiBjb2wuaXNfYWx3YXlzX3Zpc2libGUpLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnNOZWVkZWQgPSBNYXRoLm1heCgwLCAyIC0gYWx3YXlzVmlzaWJsZUNvdW50KTtcbiAgICAgIFxuICAgICAgaWYgKGNvbHVtbnNOZWVkZWQgPiAwKSB7XG4gICAgICAgIC8vIFNob3cgdGhlIGZpcnN0ICdjb2x1bW5zTmVlZGVkJyBub24tYWx3YXlzLXZpc2libGUgY29sdW1uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGNvbHVtbnNOZWVkZWQsIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgbm9uQWx3YXlzVmlzaWJsZVtpXS5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTSE9XIEFMTCAtIG1ha2UgYWxsIGNvbHVtbnMgdmlzaWJsZVxuICAgICAgZmxhdHRlbi5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGNvbC5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICBcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIFxuICB9IGZpbmFsbHkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuXG4gIHByaXZhdGUgd2FpdChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG5cblxuXG4gIHZpc2libGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBmbGF0dGVuLmZpbHRlcigoYzogYW55KSA9PiBjLmlzX3Zpc2libGUpO1xuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGZsYXR0ZW5Db2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBjb2xzLnJlZHVjZSgoYWNjOiBhbnlbXSwgY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgZmxhdHRlbiBjaGlsZHJlblxuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVhZiBjb2x1bW5cbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY29sKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuXG4gIGZpbHRlcmVkQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmNvbHVtblNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBjb2xzXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlcmVkQ29sdW1ucyhjb2wuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbC5oZWFkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY29sLmhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgPyBjb2wgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGdldCBhY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWQpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIGdldCBmaWx0ZXJBY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWRGaWx0ZXIpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbGxlY3QgYWxsIGdyb3VwIGNvbHVtbnNcbiAgcHJpdmF0ZSBnZXRBbGxHcm91cENvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGdyb3VwczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBzLnB1c2goY29sKTtcbiAgICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdCh0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIC8vIFRvZ2dsZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gIHRvZ2dsZUFsbEFjY29yZGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5hY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCcgPyBmYWxzZSA6IHRydWU7XG4gICAgdGhpcy5zZXRBY2NvcmRpb25TdGF0ZSh0aGlzLmNvbHVtbnMsIG5leHRTdGF0ZSk7XG4gIH1cblxuICB0b2dnbGVBbGxGaWx0ZXJBY2NvcmRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnID8gZmFsc2UgOiB0cnVlO1xuICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUodGhpcy5jb2x1bW5zLCBuZXh0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY2NvcmRpb25TdGF0ZShjb2xzOiBhbnlbXSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbC5leHBhbmRlZCA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNldEFjY29yZGlvblN0YXRlKGNvbC5jaGlsZHJlbiwgc3RhdGUpOyAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwcml2YXRlIHNldEZpbHRlckFjY29yZGlvblN0YXRlKGNvbHM6IGFueVtdLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAobGV0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmV4cGFuZGVkRmlsdGVyID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUoY29sLmNoaWxkcmVuLCBzdGF0ZSk7IC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBuZXN0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcblxuICBjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbENvbHVtblBhbmVsKCk7XG4gIH1cblxuICAvLyBDaGVjayBJZiAgQW55IGNvbHVtbiBoYXZlIHJpZ2h0IHBpbm5lZFxuICBnZXQgaGFzUmlnaHRQaW5uZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNSaWdodFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNMZWZ0UGlubmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzTGVmdFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBkYXRhU2V0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRFeHBhbmRlZFJvd0NvdW50KHRoaXMuZGF0YVNldCk7XG4gIH1cblxuXG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkgdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgY29uc3QgaCA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgdGhpcy52aWV3cG9ydFJvd3MgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cyh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvcCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IH0sIDEwMCk7XG4gIH1cblxuICBhdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIGNvbnN0IGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sdW1uLmNoaWxkcmVuKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmdldFZpc2libGVMZWFmQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuXG4gICAgaWYgKHZpc2libGVDb2x1bW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuXG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpXG4gICAgICBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb25zdCB0b3RhbE9sZFdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyAoY29sLndpZHRoIHx8IDApLFxuICAgICAgMFxuICAgICk7XG4gICAgaWYgKHRvdGFsT2xkV2lkdGggPT09IDApIHJldHVybjtcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gY29sLndpZHRoIC8gdG90YWxPbGRXaWR0aDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAqIHJhdGlvKSwgMTAwKTtcbiAgICAgIGNvbC53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIG5ld1dpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgNDAwKTtcbiAgfVxuXG5cbiAgYXN5bmMgcmVmcmVzaEhlYWRlcnMoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDApKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoYXNBbnlWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNWaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGhhc0FueUluVmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzSW5WaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0VG90YWxDb2x1bW5zTGVuZ3RoKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICB0YWJsZUhlYWRlckFuZEJvZHlIZWlnaHQoKSB7XG4gICAgcmV0dXJuIGBjYWxjKDEwMCUgLSAke3RoaXMuZm9vdGVyUm93SGVpZ2h0fSlgO1xuICB9XG5cbiAgZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclNjcm9sbCcpIGNlbnRlclNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICB2aXNpYmxlUm93Q291bnQgPSAyNTtcbiAgc3RhcnRJbmRleCA9IDA7XG4gIHZpc2libGVSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgZmxhdHRlbkdyb3VwZWRSb3dzKFxuICAgIHJvd3M6IGFueVtdID0gW10sXG4gICAgbGV2ZWwgPSAwLFxuICAgIHJlc3VsdDogYW55W10gPSBbXVxuICApOiBhbnlbXSB7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgcmVzdWx0LnB1c2goeyAuLi5yb3csIF9fZGVwdGg6IGxldmVsIH0pO1xuICAgICAgaWYgKHJvdy5pc0dyb3VwICYmIHJvdy5pc0V4cGFuZCAmJiByb3cuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyhyb3cuY2hpbGRyZW4sIGxldmVsICsgMSwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzc2lnblZpcnR1YWxJbmRleGVzKHRoaXMudmlzaWJsZVJvd3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3NpZ25WaXJ0dWFsSW5kZXhlcyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMTtcbiAgICBjb25zdCB3YWxrID0gKGl0ZW1zOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGl0ZW0uX192aXJ0dWFsSW5kZXggPSBjdXJyZW50SW5kZXgrKztcbiAgICAgICAgaWYgKGl0ZW0/LmlzR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBncm91cCA9IGl0ZW07XG4gICAgICAgICAgaWYgKGdyb3VwLmlzRXhwYW5kICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICB3YWxrKGdyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsoZGF0YSk7XG4gICAgLy8gY29uc29sZS5sb2coJ1RoaXMgZGF0YXNldDogJywgdGhpcy52aXNpYmxlUm93cylcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG5cbiAgdXBkYXRlVmlzaWJsZVJvd3Moc2Nyb2xsVG9wOiBudW1iZXIpIHtcblxuICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmRhdGFTZXQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsYXREYXRhID0gdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3ModGhpcy5kYXRhU2V0KTtcblxuICAgIGlmICh0aGlzLmRhdGFTZXQ/Lmxlbmd0aCA8PSAxNSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IGZsYXREYXRhO1xuICAgICAgdGhpcy5maXJzdEluZGV4ID0gMDtcbiAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlbmRlclN0YXJ0ID0gMDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG90YWwgPSBmbGF0RGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heCgwLCB0b3RhbCAtIHRoaXMudmlld3BvcnRSb3dzKTtcbiAgICBjb25zdCBmaXJzdCA9IE1hdGgubWluKE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpLCBtYXhGaXJzdCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBmaXJzdCk7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4odG90YWwsIGZpcnN0ICsgdGhpcy52aWV3cG9ydFJvd3MpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3Q7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gZmlyc3Q7XG4gICAgdGhpcy5yZW5kZXJTdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmFzc2lnblZpcnR1YWxJbmRleGVzKHRoaXMudmlzaWJsZVJvd3MpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgdHJhY2tCeVJlbmRlcmVkSW5kZXggPSAoaTogbnVtYmVyLCBfcm93OiBhbnkpID0+IHRoaXMucmVuZGVyU3RhcnQgKyBpO1xuXG4gIHByaXZhdGUgaXNTeW5jaW5nRnJvbU1haW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N5bmNpbmdGcm9tRmFrZSA9IGZhbHNlO1xuICBwcml2YXRlIG1haW5TY3JvbGxSYWY6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5pZCB8fCBpdGVtLl9pZDtcbiAgfVxuXG4gIGZsYXR0ZW5lZERhdGE6IGFueVtdID0gW107XG5cbiAgdXBkYXRlRmxhdHRlbmVkRGF0YSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIElEc1xuICBwcml2YXRlIGZha2VTY3JvbGxSYWY6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG5cbiAgLy8gb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3Qgb3ZlcnNjYW4gPSB0aGlzLm92ZXJzY2FuICogMjtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCB0aGlzLnN0YXJ0SW5kZXggLSBvdmVyc2Nhbik7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLCB0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIG92ZXJzY2FuKTtcbiAgLy8gICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmZsYXR0ZW5lZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cbiAgdHJhbnNsYXRlWSA9IDA7XG5cbiAgbGFzdFNjcm9sbFRvcCA9IDA7XG4gIHBlbmRpbmdBbmltYXRpb25GcmFtZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgICBpZiAoTWF0aC5hYnMoc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKSA8ICgxMCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lKTtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsaW5nRG93biA9IHNjcm9sbFRvcCA+IHRoaXMubGFzdFNjcm9sbFRvcDtcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW4gPSA1O1xuICAgICAgY29uc3QgbmV3U3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAgICAgY29uc3QgZHluYW1pY092ZXJzY2FuID0gc2Nyb2xsaW5nRG93biA/IG92ZXJzY2FuIDogb3ZlcnNjYW47XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgbmV3U3RhcnRJbmRleCAtIGR5bmFtaWNPdmVyc2Nhbik7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCxcbiAgICAgICAgbmV3U3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgZHluYW1pY092ZXJzY2FuXG4gICAgICApO1xuICAgICAgdGhpcy50cmFuc2xhdGVZID0gc3RhcnQgKiB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggIT09IHN0YXJ0IHx8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoICE9PSBlbmQgLSBzdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydDtcbiAgICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZGF0YVNldC5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lID0gbnVsbDtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAvLyAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAvLyAgIGlmICh0aGlzLmlzU3luY2luZ0Zyb21GYWtlKSB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21GYWtlID0gZmFsc2U7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICBpZiAoTWF0aC5hYnMoc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKSA8IHRoaXMucm93SGVpZ2h0IC8gMikgcmV0dXJuO1xuICAvLyAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAvLyAgIGlmICh0aGlzLmZha2VTY3JvbGxSYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZmFrZVNjcm9sbFJhZik7XG5cbiAgLy8gICB0aGlzLmZha2VTY3JvbGxSYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAvLyAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG4gIC8vICAgICBjb25zdCB0b3RhbFJvd3MgPSBmbGF0RGF0YS5sZW5ndGg7XG4gIC8vICAgICBjb25zdCBuZXdTdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIG5ld1N0YXJ0SW5kZXggLSAodGhpcy5vdmVyc2NhbiAqIDIpKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsUm93cywgbmV3U3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgKHRoaXMub3ZlcnNjYW4gKiAyKSk7XG5cbiAgLy8gICAgIHRoaXMudHJhbnNsYXRlWSA9IHN0YXJ0ICogdGhpcy5yb3dIZWlnaHQ7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydDtcbiAgLy8gICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG5cbiAgZ2V0IGlzU2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWFpblNjcm9sbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVsID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbEhlaWdodCA+IGVsLmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZChyb3c6IGFueSkge1xuICAgIGlmIChyb3cuZGV0YWlscykge1xuICAgICAgcm93LmlzRGV0YWlsc0V4cGFuZCA9ICFyb3cuaXNEZXRhaWxzRXhwYW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cuaXNFeHBhbmQgPSAhcm93LmlzRXhwYW5kO1xuICAgIH1cbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB9LCAxMDApO1xuICB9XG5cbiAgLy8gb25NYWluRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tTWFpbikge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tTWFpbiA9IGZhbHNlO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAvLyAgIGlmICh0aGlzLm1haW5TY3JvbGxSYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMubWFpblNjcm9sbFJhZik7XG4gIC8vICAgdGhpcy5tYWluU2Nyb2xsUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbUZha2UgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgICAgY29uc3Qgb3ZlcnNjYW4gPSB0aGlzLm92ZXJzY2FuID8/IDA7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5zdGFydEluZGV4IC0gb3ZlcnNjYW4pO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXG4gIC8vICAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsXG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgb3ZlcnNjYW5cbiAgLy8gICAgICk7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5mbGF0dGVuZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cblxuXG5cblxuICB2aWV3cG9ydFJvd3MgPSAwOyAvLyBob3cgbWFueSByb3dzIGZpdCBpbiB2aWV3cG9ydCAoY29tcHV0ZWQpXG4gIGZpcnN0SW5kZXggPSAwOyAvLyBpbmRleCBvZiB0aGUgZmlyc3QgdmlzaWJsZSByb3cgKGNsYW1wZWQpXG4gIHJlbmRlclN0YXJ0ID0gMDsgLy8gd2hlcmUgdGhlIHNsaWNlIGFjdHVhbGx5IHN0YXJ0cyAoZmlyc3RJbmRleCAtIG92ZXJzY2FuLCBjbGFtcGVkKVxuXG4gIHByaXZhdGUgc2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nU2Nyb2xsVG9wID0gMDtcblxuICBAVmlld0NoaWxkKCdtYWluU2Nyb2xsJykgbWFpblNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdmYWtlU2Nyb2xsJykgZmFrZVNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdob3JpemludGFsRmFrZVNjcm9sbCcpXG4gIGhvcml6aW50YWxGYWtlU2Nyb2xsITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclNjcm9sbGFibGVCb2R5JylcbiAgY2VudGVyU2Nyb2xsYWJsZUJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgcHJpdmF0ZSBvdmVyc2NhbiA9IDEwOyAvLyBidWZmZXIgcm93cyBhYm92ZSBhbmQgYmVsb3dcblxuICBjb21wdXRlVmlld3BvcnRSb3dzKCkge1xuICAgIGlmICh0aGlzLmZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgPz8gMDtcblxuICAgICAgLy8gcm93cyB2aXNpYmxlIGluIHZpZXdwb3J0XG4gICAgICBjb25zdCByb3dzSW5WaWV3cG9ydCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChoIC8gdGhpcy5yb3dIZWlnaHQpKTtcblxuICAgICAgLy8gYWRkIGJ1ZmZlciByb3dzIChvdmVyc2NhbilcbiAgICAgIHRoaXMudmlld3BvcnRSb3dzID0gcm93c0luVmlld3BvcnQgKyB0aGlzLm92ZXJzY2FuO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkhvcml6b250YWxGYWtlU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cblxuICBvbkNlbnRlckJvZHlTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIpIHtcbiAgICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5ob3JpemludGFsRmFrZVNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5ob3JpemludGFsRmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uQ2VudGVySGVhZGVyU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5ob3JpemludGFsRmFrZVNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5ob3JpemludGFsRmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRHJhZ2dpbmcgTG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZVxuICAvLyBwcml2YXRlIGluaXRpYWxJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ2dpbmdDb2x1bW46IGFueTtcbiAgZHJhZ1N0YXJ0SW5kZXg6IGFueSA9IDA7XG4gIC8vIG9uRHJhZ1N0YXJ0KGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgLy8gICB0aGlzLmRyYWdTdGFydEluZGV4ID0gaW5kZXg7XG4gIC8vIH1cbiAgLy8gb25EcmFnTW92ZShkYXRhOiBhbnkpIHtcbiAgLy8gICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGRhdGEuZXZlbnQ7XG4gIC8vICAgY29uc3QgaGVhZGVycyA9IEFycmF5LmZyb20oXG4gIC8vICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub25lLXJvdy1oZWFkZXItY2VsbHMnKVxuICAvLyAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAvLyAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyRWwsIGlkeCkgPT4ge1xuICAvLyAgICAgY29uc3QgcmVjdCA9IGhlYWRlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBpZHggIT09IHRoaXMuZHJhZ1N0YXJ0SW5kZXggJiZcbiAgLy8gICAgICAgY2xpZW50WCA+IHJlY3QubGVmdCAmJlxuICAvLyAgICAgICBjbGllbnRYIDwgcmVjdC5yaWdodCAmJlxuICAvLyAgICAgICBjbGllbnRZID4gcmVjdC50b3AgJiZcbiAgLy8gICAgICAgY2xpZW50WSA8IHJlY3QuYm90dG9tXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29uc3Qgb3RoZXJJbmRleCA9IGlkeDtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5kcmFnU3RhcnRJbmRleH0gLS0+ICR7b3RoZXJJbmRleH1gKTtcbiAgLy8gICAgICAgdGhpcy5zd2FwQ29sdW1uKHRoaXMuZHJhZ1N0YXJ0SW5kZXgsIG90aGVySW5kZXgpO1xuICAvLyAgICAgICBjb25zb2xlLmxvZygnVXBkYXRlZCBDb2x1bW5zOiAnLCB0aGlzLmNvbHVtbnMpO1xuICAvLyAgICAgICB0aGlzLmRyYWdTdGFydEluZGV4ID0gb3RoZXJJbmRleDsgLy8gdXBkYXRlIGluZGV4XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBzd2FwQ29sdW1uKHByZXZpdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xuICAvLyAgIGNvbnN0IGNvbHVtbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5jb2x1bW5zKTtcbiAgLy8gICBjb25zdCBmbGF0dGVuQ29sdW1ucyA9IHRoaXMuZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG5cbiAgLy8gICBjb25zdCB2aXNpYmxlRmxhdHRlbkNvbHVtbnMgPSBmbGF0dGVuQ29sdW1ucy5maWx0ZXIoXG4gIC8vICAgICAoY29sKSA9PiBjb2wuaXNfdmlzaWJsZVxuICAvLyAgICk7XG4gIC8vICAgY29uc3QgcHJldml1c0NvbHVtbiA9IHZpc2libGVGbGF0dGVuQ29sdW1uc1twcmV2aXVzSW5kZXhdO1xuICAvLyAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB2aXNpYmxlRmxhdHRlbkNvbHVtbnNbY3VycmVudEluZGV4XTtcblxuICAvLyAgIGNvbnNvbGUubG9nKCdQcmV2aXVzIENvbHVtbjogJywgcHJldml1c0NvbHVtbik7XG4gIC8vICAgY29uc29sZS5sb2coJ2N1cnJlbnQgY2x1bW46ICcsIGN1cnJlbnRDb2x1bW4pO1xuICAvLyB9XG5cbiAgLy8gb25EcmFnRW5kKGRhdGE6IGFueSkge1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBudWxsO1xuICAvLyAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSBudWxsO1xuICAvLyB9XG5cbiAgLy8gQ0RLIERSQUcgRFJPUCBMT0dJQyBHT0VTIEhFUkVcblxuXG4gIGNhbkVudGVyVG9Sb3dzR3JvdXBpbmcgPSAoZHJhZzogQ2RrRHJhZzxhbnk+LCBkcm9wOiBDZGtEcm9wTGlzdDxhbnk+KSA9PiB7XG4gICAgLy8gRXhhbXBsZTogQmxvY2sgaWYgYWxyZWFkeSBwaW5uZWQgbGVmdFxuICAgIGNvbnN0IGRhdGEgPSBkcmFnLmRhdGE7XG4gICAgaWYgKGRhdGE/LmNoaWxkcmVuICYmIGRhdGE/LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEuY2hpbGRyZW4uc29tZShcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuaXNfdmlzaWJsZSAmJiBjb2wuaXNfZ3JvdXBhYmxlXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5pc192aXNpYmxlICYmIGRhdGEuaXNfZ3JvdXBhYmxlO1xuICB9O1xuXG4gIC8vIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZTxhbnk+KSB7XG4gIC8vICAgY29uc3QgcG9pbnRlclggPSBldmVudC5wb2ludGVyUG9zaXRpb24ueDtcbiAgLy8gICBjb25zdCBwb2ludGVyWSA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55O1xuXG4gIC8vICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAvLyAgICAgJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lcidcbiAgLy8gICApO1xuXG4gIC8vICAgaWYgKHRhcmdldEVsZW1lbnQpIHtcbiAgLy8gICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIC8vICAgICBjb25zdCBpc092ZXJUYXJnZXQgPVxuICAvLyAgICAgICBwb2ludGVyWCA+PSByZWN0LmxlZnQgJiZcbiAgLy8gICAgICAgcG9pbnRlclggPD0gcmVjdC5yaWdodCAmJlxuICAvLyAgICAgICBwb2ludGVyWSA+PSByZWN0LnRvcCAmJlxuICAvLyAgICAgICBwb2ludGVyWSA8PSByZWN0LmJvdHRvbTtcblxuICAvLyAgICAgaWYgKGlzT3ZlclRhcmdldCkge1xuICAvLyAgICAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSB0cnVlO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gZmFsc2U7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgZW50ZXJUb1RvcFJvd0dyb3VwaW5nKGRyb3BMaXN0OiBDZGtEcmFnRW50ZXI8YW55Pikge1xuICAgIGNvbnN0IGRyYWdnaW5nRGF0YSA9IGRyb3BMaXN0Lml0ZW0uZGF0YTtcbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSB0cnVlO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiRHJhZ2dpbmcgaW4gZ3JvdXAgYXJlYVwiKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRHcm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9ICEhbWF0Y2hpbmdDaGlsZC5pc19ncm91cGFibGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBUcnkgZmluZGluZyBpdCBpbiB0b3AtbGV2ZWwgY29sdW1ucyBmaXJzdFxuICAgICAgbGV0IHRhcmdldENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICApO1xuXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uKSB7XG4gICAgICAgIHRhcmdldENvbHVtbi5pc1Jvd0dyb3VwZWQgPSAhIXRhcmdldENvbHVtbi5pc19ncm91cGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSBncm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gISFtYXRjaGluZ0NoaWxkLmlzX2dyb3VwYWJsZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g4pyFIFJlZnJlc2ggVUlcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRHJvcExpc3RFbnRlcihcbiAgICBkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4sXG4gICAgc2VjdGlvbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnXG4gICkge1xuICAgIGNvbnN0IGRyYWdnaW5nRGF0YSA9IGRyb3BMaXN0Lml0ZW0uZGF0YTtcblxuICAgIGNvbnN0IHRhcmdldENvbHVtbjogYW55ID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09IGRyYWdnaW5nRGF0YS5oZWFkZXJcbiAgICApO1xuXG4gICAgaWYgKCF0YXJnZXRDb2x1bW4pIHJldHVybjtcblxuICAgIGlmIChcbiAgICAgIEFycmF5LmlzQXJyYXkoZHJhZ2dpbmdEYXRhPy5jaGlsZHJlbikgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0Q29sdW1uPy5jaGlsZHJlbilcbiAgICApIHtcbiAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0Q29sdW1uLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICBtYXRjaGluZ0NoaWxkLnBpbm5lZCA9IHNlY3Rpb24gPT09ICdjZW50ZXInID8gbnVsbCA6IHNlY3Rpb247XG4gICAgICAgICAgbWF0Y2hpbmdDaGlsZFsnaXNSb3dHcm91cGVkJ10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldENvbHVtbi5waW5uZWQgPSBzZWN0aW9uID09PSAnY2VudGVyJyA/IG51bGwgOiBzZWN0aW9uO1xuICAgICAgdGFyZ2V0Q29sdW1uWydpc1Jvd0dyb3VwZWQnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLy8gZW50ZXJUb1RvcEdyb3VwaW5nUm93KGRyb3BMaXN0OiBDZGtEcmFnRW50ZXI8YW55Pikge1xuICAvLyAgIHRoaXMuc2hvdWxkRGlzYWJsZURyb3BsaXN0U29ydGluZyA9IHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmc7XG4gIC8vICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIGNvbnN0IGluZGV4ID0gdGhpcy5ncm91cGVkQ29sdW1ucy5maW5kSW5kZXgoXG4gIC8vICAgKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgLy8gKTtcbiAgLy8gaWYgKGluZGV4ICE9PSAtMSkge1xuICAvLyAgIHRoaXMuZ3JvdXBlZENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgLy8gfVxuXG4gIC8vIC8vIDIuIFRyYXZlcnNlIHRoaXMuY29sdW1ucyB0byBmaW5kIGFuZCB1cGRhdGUgdGhlIG1hdGNoaW5nIGNvbHVtblxuICAvLyB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgLy8gICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gIC8vICAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAvLyAgICAgICBpZiAoY2hpbGQuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAvLyAgICAgICAgIGNoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9IGVsc2UgaWYgKGdyb3VwLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgLy8gICAgIGdyb3VwLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAvLyAgIH1cbiAgLy8gfSk7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG5cbiAgZXhpdGVkRnJvbVRoZVRvcFJvdyhkcm9wTGlzdDogQ2RrRHJhZ0V4aXQ8YW55Pikge1xuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZHJhZ2dpbmdEYXRhPy5jaGlsZHJlbikpIHtcbiAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGRyYWdnaW5nRGF0YS5oZWFkZXJcbiAgICAgICk7XG4gICAgICBpZiAodGFyZ2V0R3JvdXApIHtcbiAgICAgICAgZHJhZ2dpbmdEYXRhLmNoaWxkcmVuLmZvckVhY2goKGRyYWdnZWRDaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldEdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnZWRDaGlsZC5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhcmdldENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICApO1xuXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uKSB7XG4gICAgICAgIHRhcmdldENvbHVtbi5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGdyb3VwIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2hvdWxkRGlzYWJsZURyb3BsaXN0U29ydGluZyA9IGZhbHNlO1xuICBpc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGZhbHNlO1xuICBjaGVja0NvbHVtbkdyb3VwaW5nU3RhdHVzKGNvbDogYW55KSB7XG4gICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCBhbGxDaGlsZHJlbkRpc2FibGVkID0gY29sLmNoaWxkcmVuLmV2ZXJ5KFxuICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfZ3JvdXBhYmxlID09PSBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBhbGxDaGlsZHJlbkRpc2FibGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gY29sLmlzX2dyb3VwYWJsZSA9PT0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGN1cnJlbnREcmFnZ2luZ0NvbHVtbjogYW55ID0gbnVsbDtcbiAgZHJhZ1N0YXJ0T25Hcm91cChjb2w6IGFueSkge1xuICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gY29sO1xuICB9XG5cbiAgb25Tb3J0R3JvdXAgPSBhc3luYyAoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55Piwgc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29sdW1ucyA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl07XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkgcmV0dXJuO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiB7XG4gICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZC5pc192aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wuaXNfdmlzaWJsZTtcbiAgICB9KTtcbiAgICBjb25zdCBwcmV2aW91c0hlYWRlciA9IHZpc2libGVDb2x1bW5zW2V2ZW50LnByZXZpb3VzSW5kZXhdLmhlYWRlcjtcbiAgICBjb25zdCBjdXJyZW50SGVhZGVyID0gdmlzaWJsZUNvbHVtbnNbZXZlbnQuY3VycmVudEluZGV4XS5oZWFkZXI7XG4gICAgY29uc3QgdmlzaWJsZVByZXZJbmRleCA9IHZpc2libGVDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gcHJldmlvdXNIZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IHZpc2libGVDdXJySW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IGN1cnJlbnRIZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IGdldEZpZWxkcyA9IChpdGVtOiBhbnkpOiBzdHJpbmdbXSA9PiB7XG4gICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICByZXR1cm4gaXRlbS5jaGlsZHJlbi5tYXAoKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbaXRlbS5maWVsZF07XG4gICAgfTtcbiAgICBjb25zdCBwcmV2RmllbGRzID0gZ2V0RmllbGRzKHZpc2libGVDb2x1bW5zW3Zpc2libGVQcmV2SW5kZXhdKTtcbiAgICBjb25zdCBjdXJyRmllbGRzID0gZ2V0RmllbGRzKHZpc2libGVDb2x1bW5zW3Zpc2libGVDdXJySW5kZXhdKTtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSBbLi4ucHJldkZpZWxkcywgLi4uY3VyckZpZWxkc107XG4gICAgY29uc3QgY2VsbHMgPSBhbGxGaWVsZHMubGVuZ3RoXG4gICAgICA/IChbXSBhcyBIVE1MRWxlbWVudFtdKS5jb25jYXQoXG4gICAgICAgIC4uLmFsbEZpZWxkcy5tYXAoKGZpZWxkKSA9PlxuICAgICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGZpcnN0UG9zaXRpb25zID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgbnVtYmVyPigpO1xuICAgIGNlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoKHRoaXMgYXMgYW55KVtzZWN0aW9uXSwgdmlzaWJsZVByZXZJbmRleCwgdmlzaWJsZUN1cnJJbmRleCk7XG4gICAgY29uc3QgcHJldkNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBwcmV2aW91c0hlYWRlcik7XG4gICAgY29uc3QgY3VyckNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBjdXJyZW50SGVhZGVyKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBwcmV2Q29sSW5kZXhJbkNvbHVtbnMsIGN1cnJDb2xJbmRleEluQ29sdW1ucyk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKTtcbiAgICAgICAgICBpZiAob2xkTGVmdCA9PSBudWxsKSByZXR1cm47IFxuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyB9KTtcbiAgfVxuXG5cbiAgb25Ecm9wR3JvdXAoKSB7XG4gICAgdGhpcy5sZWZ0UGlubmVkQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyk7XG4gICAgdGhpcy5jZW50ZXJDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld0NlbnRlckNvbHVtbnMpO1xuICAgIHRoaXMucmlnaHRQaW5uZWRDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcENsb25lQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBjb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgICAgLy8gUmVjdXJzaXZlbHkgZGVlcCBjbG9uZSBjaGlsZHJlbiBpZiBwcmVzZW50XG4gICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gICAgICAgID8gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKGNvbC5jaGlsZHJlbilcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9XG5cblxuICBhc3luYyBvbkRyb3BUb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xuICAgIGlmICh0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBpZiAoZHJhZ2dlZERhdGE/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZHJhZ2dlZERhdGEuY2hpbGRyZW4pKSB7XG4gICAgICBkcmFnZ2VkRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZSkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRyYWdnZWREYXRhLmlzX3Zpc2libGUgJiYgZHJhZ2dlZERhdGEuaXNfZ3JvdXBhYmxlKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChkcmFnZ2VkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgb25Hcm91cFJlb3JkZXIoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwZWRDb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9LCAxMCk7XG4gIH1cblxuICBhc3luYyB1bmdyb3VwQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAgICAgICAoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgY2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIGdyb3VwLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDEwMDApO1xuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gdW5ncm91cENvbHVtbjpcIiwgZXJyKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHNob3VsZFRoZUdyb3VwSGVhZGVyU2hvdyhncm91cDogYW55KSB7XG4gICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBncm91cC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5zb21lKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5pc192aXNpYmxlICYmICFjb2w/LmlzUm93R3JvdXBlZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwPy5pc192aXNpYmxlICYmICFncm91cD8uaXNSb3dHcm91cGVkO1xuICB9XG5cblxuICAvLyBvbkNoaWxkRHJhZ1N0YXJ0KCkge1xuICAvLyAgIGRlYnVnZ2VyO1xuICAvLyB9XG5cbiAgLy8gZHJvcExpc3RJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gZ2VuZXJhdGVEcm9wTGlzdElkcygpIHtcbiAgLy8gICB0aGlzLmRyb3BMaXN0SWRzID0gW107XG5cbiAgLy8gICBjb25zdCBzZWN0aW9uS2V5cyA9IFtcbiAgLy8gICAgICdsZWZ0UGlubmVkQ29sdW1ucycsXG4gIC8vICAgICAnY2VudGVyQ29sdW1ucycsXG4gIC8vICAgICAncmlnaHRQaW5uZWRDb2x1bW5zJyxcbiAgLy8gICBdO1xuXG4gIC8vICAgc2VjdGlvbktleXMuZm9yRWFjaCgoc2VjdGlvbktleSkgPT4ge1xuICAvLyAgICAgY29uc3Qgc2VjdGlvbkNvbHMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25LZXldO1xuXG4gIC8vICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAvLyAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55LCBjaGlsZEluZGV4OiBudW1iZXIpID0+IHtcbiAgLy8gICAgICAgICAgIGlmIChjaGlsZD8uaXNfdmlzaWJsZSAmJiAhY2hpbGQuaXNSb3dHcm91cGVkKSB7XG4gIC8vICAgICAgICAgICAgIGNvbnN0IGlkID0gYCR7c2VjdGlvbktleX0ke2l9YDtcbiAgLy8gICAgICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcbiAgLy8gICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX3Zpc2libGUgJiYgIWNvbC5pc1Jvd0dyb3VwZWQpIHtcbiAgLy8gICAgICAgICBjb25zdCBpZCA9IGAke3NlY3Rpb25LZXl9JHtpfWA7XG4gIC8vICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBvbkNoaWxkRHJvcGxpc3RTb3J0ZWQgPSBhc3luYyAoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55Piwgc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGlubmVkID1cbiAgICAgIHNlY3Rpb24gPT0gJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucydcbiAgICAgICAgPyAnbGVmdCdcbiAgICAgICAgOiBzZWN0aW9uID09ICdwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICAgID8gJ3JpZ2h0J1xuICAgICAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IGNvbHVtbiA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBsZXQgZ3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGdyb3VwLmhlYWRlclxuICAgICk7XG4gICAgY29uc3QgZmlsdGVyZWRHcm91cCA9IGdyb3VwPy5jaGlsZHJlbi5maWx0ZXIoKGNvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpc1Bpbm5lZE1hdGNoID1cbiAgICAgICAgKHBpbm5lZCA9PT0gXCJcIiAmJiAoIWNvbD8ucGlubmVkIHx8IGNvbD8ucGlubmVkID09PSBcIlwiKSkgfHwgY29sPy5waW5uZWQgPT09IHBpbm5lZDtcbiAgICAgIHJldHVybiBpc1Bpbm5lZE1hdGNoICYmIGNvbD8uaXNfdmlzaWJsZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZXZpb3VzRmllbGQgPSBmaWx0ZXJlZEdyb3VwW2V2ZW50LnByZXZpb3VzSW5kZXhdLmZpZWxkO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcmVkR3JvdXBbZXZlbnQuY3VycmVudEluZGV4XS5maWVsZDtcbiAgICBjb25zdCB2aXNpYmxlUHJldkluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT0gcHJldmlvdXNGaWVsZFxuICAgICk7XG4gICAgY29uc3QgdmlzaWJsZUN1cnJJbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09IGN1cnJlbnRGaWVsZFxuICAgICk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gW3ByZXZpb3VzRmllbGQsIGN1cnJlbnRGaWVsZF07XG4gICAgY29uc3QgY2VsbHMgPSBhbGxGaWVsZHMubGVuZ3RoXG4gICAgICA/IChbXSBhcyBIVE1MRWxlbWVudFtdKS5jb25jYXQoXG4gICAgICAgIC4uLmFsbEZpZWxkcy5tYXAoKGZpZWxkKSA9PlxuICAgICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZ3JvdXBJblNlY3Rpb24gPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJHcm91cEluU2VjdGlvbiA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl0uZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IGdyb3VwSW5TZWN0aW9uSW5kZXggPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gZ3JvdXBJblNlY3Rpb24uaGVhZGVyXG4gICAgKTtcblxuICAgIGNvbnN0IGZpcnN0UG9zaXRpb25zID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgbnVtYmVyPigpO1xuICAgIGNlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICB0aGlzLmNvbHVtbnNbZ3JvdXBJbmRleF0/LmNoaWxkcmVuLFxuICAgICAgdmlzaWJsZVByZXZJbmRleCxcbiAgICAgIHZpc2libGVDdXJySW5kZXhcbiAgICApO1xuXG4gICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgKHRoaXMgYXMgYW55KVtzZWN0aW9uXT8uW2dyb3VwSW5TZWN0aW9uSW5kZXhdLmNoaWxkcmVuLFxuICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICk7XG5cbiAgICAvLyBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmdab25lLm9uU3RhYmxlKTtcbiAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkhO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcbiAgICAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG4gICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSc7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGFsbEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkQ2VsbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpO1xuICAgICAgICAgIGlmIChvbGRMZWZ0ID09IG51bGwpIHJldHVybjsgLy8gc2FmZXR5IGNoZWNrXG5cbiAgICAgICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuXG4gICAgICAgICAgICAvLyBGb3JjZSByZWZsb3dcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gY29uc29sZS5ncm91cCgnR3JvdXA6ICcsIGdyb3VwKTtcbiAgfVxuXG5cbiAgb25DaGlsZERyb3BsaXN0RHJvcGVkKGNka0RyYWdEcm9wZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyKTtcbiAgfVxuXG4gIC8vIFJvd3MgR3JvdXBpbmcgTG9naWMgR29lcyBIZXJlXG5cbiAgZ3JvdXBEYXRhKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgbGV0IGRhdGFTZXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XG4gICAgaWYgKCFncm91cEZpZWxkcy5sZW5ndGgpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IFtjdXJyZW50RmllbGQsIC4uLnJlc3RGaWVsZHNdID0gZ3JvdXBGaWVsZHM7XG4gICAgY29uc3QgZ3JvdXBlZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNldCkge1xuICAgICAgbGV0IGtleVZhbHVlID0gY3VycmVudEZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChvYmosIGspID0+IG9iaj8uW2tdLCBpdGVtKTtcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xuICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGlzX2RlbGV0ZWQgZmllbGRcbiAgICAgIGlmIChjdXJyZW50RmllbGQgPT09ICdpc19kZWxldGVkJyB8fCBjdXJyZW50RmllbGQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaXNfZGVsZXRlZCcpKSB7XG4gICAgICBpZiAoa2V5VmFsdWUgPT09IHRydWUgfHwga2V5VmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICBncm91cEtleSA9ICdBcmNoaXZlZCc7XG4gICAgICB9IGVsc2UgaWYgKGtleVZhbHVlID09PSBmYWxzZSB8fCBrZXlWYWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBncm91cEtleSA9ICdVbmFyY2hpdmVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0gXCJfQmxhbmtcIjtcbiAgICAgIH1cbiAgICAgICB9XG4gICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5VmFsdWUpKSB7XG4gICAgICAgIGlmIChrZXlWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleVZhbHVlWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcChvYmogPT4gKG9iaj8uZGVwYXJ0bWVudF9uYW1lIHx8IG9iai5yb2xlTmFtZSB8fCBvYmo/LmZ1bGxfbmFtZSB8fCAgb2JqPy52YWx1ZSB8fCBvYmo/Lm5hbWUpID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcCh2YWwgPT4gdmFsID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICAgLy8gQ2hlY2sgZm9yIERhdGUgb2JqZWN0IE9SIGRhdGUgc3RyaW5nXG4gICAgZWxzZSBpZiAoa2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpKSB7XG4gICAgICBjb25zdCBkYXRlT2JqID0ga2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlID8ga2V5VmFsdWUgOiBuZXcgRGF0ZShrZXlWYWx1ZSk7XG4gICAgICBncm91cEtleSA9IHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZShkYXRlT2JqLCB0aGlzLmRhdGVGb3JtYXQgfHwgJ2RkL01NL3l5eXknKTtcbiAgICB9IFxuICAgICAvLyAgSGFuZGxlIG9iamVjdHMgKGxpa2Uge2lkLCBuYW1lLCB2YWx1ZX0pXG4gICAgZWxzZSBpZiAodHlwZW9mIGtleVZhbHVlID09PSAnb2JqZWN0JyAmJiBrZXlWYWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShrZXlWYWx1ZSkpIHtcbiAgICAgIC8vIFRyeSBjb21tb24gcHJvcGVydHkgbmFtZXMgZm9yIG9iamVjdHNcbiAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWUudmFsdWUgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlLm5hbWUgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlLmlkID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5sYWJlbCA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWVbT2JqZWN0LmtleXMoa2V5VmFsdWUpWzBdXSA/PyBcbiAgICAgICAgICAgICAgICAgXCJfQmxhbmtcIjtcbiAgICAgIFxuICAgICAgLy8gSWYgaXQncyBzdGlsbCBhbiBvYmplY3QgYWZ0ZXIgZXh0cmFjdGlvbiwgY29udmVydCB0byBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgZ3JvdXBLZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGdyb3VwS2V5ID0gXCJfQmxhbmtcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0gdGhpcy50b1RpdGxlQ2FzZShTdHJpbmcoZ3JvdXBLZXkpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWUgPyB0aGlzLnRvVGl0bGVDYXNlKFN0cmluZyhrZXlWYWx1ZSkudHJpbSgpKSA6IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIGlmICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpIHtcbiAgICAgIC8vICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGtleVZhbHVlKTtcbiAgICAgIC8vICAgZ3JvdXBLZXkgPSB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUoZGF0ZU9iaiwgdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9NTS95eXl5Jyk7XG4gICAgICAvLyB9XG5cbiAgICAgIGlmICghZ3JvdXBlZE1hcC5oYXMoZ3JvdXBLZXkpKSBncm91cGVkTWFwLnNldChncm91cEtleSwgW10pO1xuICAgICAgZ3JvdXBlZE1hcC5nZXQoZ3JvdXBLZXkpIS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkTWFwLmVudHJpZXMoKSkubWFwKChbZ3JvdXBWYWx1ZSwgZ3JvdXBJdGVtc10pID0+ICh7XG4gICAgICBpc0dyb3VwOiB0cnVlLFxuICAgICAgZ3JvdXBGaWVsZDogY3VycmVudEZpZWxkLFxuICAgICAgZ3JvdXBWYWx1ZSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmdyb3VwRGF0YShncm91cEl0ZW1zLCByZXN0RmllbGRzKSxcbiAgICAgIGlzRXhwYW5kOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICA/LnNwbGl0KCcgJylcbiAgICAgID8ubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgICA/LmpvaW4oJyAnKTtcbiAgfVxuXG5cbiAgY291bnRMZWFmUm93cyhncm91cDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIWdyb3VwLmNoaWxkcmVuIHx8ICFncm91cC5jaGlsZHJlbi5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGdyb3VwLmNoaWxkcmVuLnJlZHVjZSgoY291bnQ6IG51bWJlciwgY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKGNoaWxkLmlzR3JvdXAgPyB0aGlzLmNvdW50TGVhZlJvd3MoY2hpbGQpIDogMSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgdG9nZ2xlQWN0aXZlRmlsdGVyKCkge1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gIXRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9ucyh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PT0gdGhpcy5hY3RpdmVUb3BCdXR0b24pIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICBlbHNlIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYWN0aXZlU3ViQnV0dG9uID0gJyc7XG4gIHRvZ2dsZVN1YkFjdGlvbnModHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/ICAodGhpcy5wcmVzZXROYW1lID0gJycpIDogKCB0aGlzLnByZXNldE5hbWUgPSAgdGhpcy5zdG9yZVByZXNldE5hbWUpXG4gICAgaWYgKHR5cGUgPT09IHRoaXMuYWN0aXZlU3ViQnV0dG9uKSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIGVsc2UgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSB0eXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvbnNEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dBY3Rpb25zRHJvcERvd24gPSAhdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuICBhc3luYyBjaGFuZ2VUYWJsZUxheW91dChldmVudDogRXZlbnQsIGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmICh0YXJnZXQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gbGF5b3V0VHlwZTtcbiAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQobGF5b3V0VHlwZSlcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3ModGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxUb3ApO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICAgIHRoaXMub25Gb250Q2hhbmdlKClcbiAgfVxuXG4gIHNldFRhYmxlTGF5b3V0KGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGlmICghbGF5b3V0VHlwZSkgcmV0dXJuO1xuICAgIGlmIChsYXlvdXRUeXBlID09PSAnc21hbGwnKSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDM2O1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA0MDtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDEwO1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDEwO1xuXG4gICAgfSBlbHNlIGlmIChsYXlvdXRUeXBlID09PSAnbWVkaXVtJykge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0NDtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNDQ7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDYwO1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA1MjtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgIH1cbiAgICAvLyB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3RhcnRJbmRleERhdGEoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpICogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0O1xuICB9XG5cbiAgZ2V0IGVuZEluZGV4KCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiAobnVtYmVyIHwgc3RyaW5nKVtdIHtcbiAgICBjb25zdCBwYWdlczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzOyBpKyspIHtcbiAgICAgICAgcGFnZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZXMucHVzaCgxKTtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA+IDMpIHtcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpO1xuICAgICAgbGV0IGVuZCA9IE1hdGgubWluKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMSwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKyAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA8IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMikge1xuICAgICAgICBwYWdlcy5wdXNoKCcuLi4nKTtcbiAgICAgIH1cbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG5cbiAgc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duID0gJyc7XG4gIHRvZ2dsZUNvbHVtbkluRmlsdGVyRHJvcGRvd24oY29sOiBhbnkpIHtcblxuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRnJvbUZpbHRlcihvcHRpb246IGFueSkge1xuXG4gIH1cblxuICBoYW5kbGVCYWNrc3BhY2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gSWYgc2VhcmNoIGlzIGVtcHR5LCByZW1vdmUgbGFzdCB0YWdcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duICYmIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW3RoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihsYXN0KTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51ZVNlYXJjaElucHV0JykgZmlsdGVyTWVudWVTZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCcpIGZpbHRlck1lbnVlVGV4dGNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG5cbiAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sOiBhbnkpIHtcbiAgICBpZiAoY29sLnR5cGUgPT0gJ2ltYWdlJyB8fCAhY29sPy50eXBlIHx8ICFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0KSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSBjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uID8gY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uID8gY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCl7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVRleHRjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI6IGFueTtcbiAgc2hvd0ZpbHRlcnMgPSB0aGlzLnNob3dTaWRlTWVudSA/IGZhbHNlIDogZmFsc2U7XG5cblxuICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjb2w6IGFueSkge1xuICAgIGlmIChjb2wudHlwZSAhPT0gJ2Ryb3Bkb3duJyAmJiBjb2wudHlwZSAhPT0gJ2FycmF5JyB8fCAhY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5vcGVuRmlsdGVyKGNvbCk7XG4gIH1cblxuICBvcGVuRmlsdGVyKGNvbDogYW55KSB7XG4gICAgaWYoIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IGNvbDtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGxcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gPSAnJztcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcblxuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPVxuICAgICAgICBjb2w/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24gPz9cbiAgICAgICAgKChjb2wudHlwZSA9PT0gJ251bWJlcicgfHwgY29sLnR5cGUgPT09ICd0aW1lJyB8fCBjb2wudHlwZSA9PT0gJ2RhdGUnKVxuICAgICAgICAgID8gJ2VxdWFsJ1xuICAgICAgICAgIDogJ2NvbnRhaW4nKTtcblxuICAgICAgdGhpcy5maXJzdFZhbHVlID0gY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgJyc7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LmNvbmRpdGlvbiB8fCAnbm9uZSc7XG4gICAgICB0aGlzLnNlY29uZENvbmRpdGlvbiA9XG4gICAgICAgICAgY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/P1xuICAgICAgICAgICgoY29sLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbC50eXBlID09PSAndGltZScgfHwgY29sLnR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICAgID8gJ2VxdWFsJ1xuICAgICAgICAgICAgOiAnY29udGFpbicpO1xuICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IGNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBmaXJzdFZhbHVlOiBhbnkgPSAnJztcbiAgZmlyc3RDb25kaXRpb24gPSAnJztcbiAgc2Vjb25kVmFsdWU6IGFueSA9ICcnO1xuICBzZWNvbmRDb25kaXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjb25kaXRpb246IHN0cmluZyB8IG51bGwgPSAnJztcblxuICByZXNldFRleHRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gJyc7XG4gICAgdGhpcy5jb25kaXRpb24gPSAnbm9uZSc7XG4gICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2Vjb25kVmFsdWUgPSAnJztcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgfVxuXG4gIHRvZ2dsZUFsbFZhbHVzU2VsZWN0aW9uSW5Ecm9wZG93bkZpbHRlcihjb2x1bW46IGFueSkge1xuXG4gIH1cblxuXG4gIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogYW55W10gPSBbXVxuXG4gIGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKG9wdGlvbjogYW55KSB7XG4gICAgZGVidWdnZXJcbiAgICBjb25zdCBpZCA9IG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbjtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWUuZmlsdGVyKChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbikpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyEubGVuZ3RoID0gMDtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gICAgLy8gY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJGaWx0ZXJlZCBDb2x1bW5zIEFyZTogXCIsIGZpbHRlcmVkQ29sdW1ucyk7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKCkge1xuICAgICAgICAgLy8gLS0tIFZBTElEQVRJT04gQkVGT1JFIEFOWVRISU5HIC0tLVxuICBjb25zdCBjb2x1bW5zcyA9IHRoaXMuZmluZENvbHVtbih0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIuZmllbGQpO1xuICBpZiAoIWNvbHVtbnNzKSByZXR1cm47XG5cbiAgaWYgKGNvbHVtbnNzLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uc3MudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgfHwgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sdW1uc3MudHlwZSkpIHtcbiAgICBjb25zdCBpc0VtcHR5ID1cbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5maXJzdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gJyc7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAgIHRoaXMuY2xvc2VBbGxGaWx0ZXJNZW51cygpO1xuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSBjb2x1bW4ucXVlcnkgfHwge307XG4gICAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gY29sdW1uLnF1ZXJ5Ll9pZHMgfHwgW107XG5cbiAgICAgICAgLy8gUmVtb3ZlIHN0YWxlIElEcyAobm90IHByZXNlbnQgaW4gU2V0KVxuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzLmZpbHRlcihcbiAgICAgICAgICAoaWQ6IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSAgIC8vIDwtLSB1c2UgLmhhcygpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIG5ldyBvbmVzIGlmIG1pc3NpbmdcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgaWYgKCFjb2x1bW4ucXVlcnkuX2lkcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5xdWVyeS5faWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiB0aGlzLmZpcnN0Q29uZGl0aW9uIHx8ICdjb250YWluJyxcbiAgICAgICAgICBmaXJzdF92YWx1ZTogdGhpcy5maXJzdFZhbHVlIHx8IG51bGwsXG4gICAgICAgICAgY29uZGl0aW9uOiB0aGlzLnNlY29uZFZhbHVlID8gdGhpcy5jb25kaXRpb24gOiAnbm9uZScsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuc2Vjb25kQ29uZGl0aW9uIDogbnVsbCxcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IHRoaXMuc2Vjb25kVmFsdWUgfHwgbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2x1bW4uc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbHVtbi5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbHVtbi50eXBlLFxuICAgICAgX2lkczogY29sdW1uLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5wcml2YXRlIGZpbmRDb2x1bW4oY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHJldHVybiBjb2w7XG4gICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbihjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiAgLy8gYXBwbHlGaWx0ZXJGcm9tRmlsdGVyUm93KGNvbHVtbjogYW55KSB7XG4gIC8vICAgY29uc3QgZmlsdGVyID0ge1xuICAvLyAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgLy8gICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgLy8gICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gIC8vICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgLy8gICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gIC8vICAgfTtcbiAgLy8gICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAvLyAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAvLyAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gIC8vICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAvLyAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gIC8vIH1cblxuICBpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2x1bW46IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnNDb25maWc/LnNvbWUoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgfVxuXG4gIC8vIFNpZGUgRmlsdGVycyBMb2dpYyBpcyBoZXJlXG5cbiAgdG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5tYXAoXG4gICAgICAgIChvcHQ6IGFueSkgPT4gb3B0LmlkIHx8IG9wdC5faWQgfHwgb3B0XG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oY29sLnF1ZXJ5Ll9pZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuXG4gIGlzQWxsU2lkZUZpbHRlck9wdGlvbnNTZWxlY3RlZChjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghY29sPy5xdWVyeT8uX2lkcyB8fCAhQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2wucXVlcnkuX2lkcy5sZW5ndGggPT09IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUubGVuZ3RoO1xuICB9XG5cbiAgb25PcHRpb25Ub2dnbGUoY29sOiBhbnksIG9wdGlvbjogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uSWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKCFjb2wucXVlcnkuX2lkcykge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgaWR4ID0gY29sLnF1ZXJ5Ll9pZHMuaW5kZXhPZihvcHRpb25JZCk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMucHVzaChvcHRpb25JZCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIHJlc2V0U2lkZUZpbHRlcihjb2w6IGFueSkge1xuICAgIGNvbnN0IHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gY29sLmZpZWxkKSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbj8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGlmIChyZXNldENvbHVtblJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmVzZXRDb2x1bW5SZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICBjbGVhckFsbEZpbHRlcnMoc2hvdWxkVXBkYXRlQ29uZmlnTGlzdGluZyA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcbiAgICBjb25zdCByZXNldEFsbFJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4ucXVlcnkpIHtcbiAgICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgICBfaWRzOiBbXSxcbiAgICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgICAgICAgIHNlY29uZF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIHNlY29uZF92YWx1ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uPy5jaGlsZHJlbikgJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmVzZXRBbGxSZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gW107XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIC8vIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgLy8gdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAvLyB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSAnbWVkaXVtZCc7XG4gICAgLy8gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgIC8vIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9ICcnO1xuICAgIGNvbnN0IGV2ZW50ID0geyBldmVudFR5cGU6ICdyZXNldCcsIGRhdGE6IHsgdGFibGVUeXBlOiB0aGlzLnRhYmxlVHlwZSB9IH07XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9LCAzMDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXBwbHlTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgYXBwbHlpbmcgc2lkZSBmaWx0ZXJcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzIHx8IFtdXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBuZXcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICByZW1vdmVTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgcmVtb3ZpbmcgZmlsdGVyXG4gICAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShleGlzdGluZ0luZGV4LCAxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCkge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkQ2VsbHM/LnNpemUgPiAwKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgdHJhY2tCeUZpZWxkKGluZGV4OiBudW1iZXIsIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sPy5maWVsZDtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJlZENvbHVtbnMoKTogYW55W10ge1xuICAgIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGNvbHVtbnM/LmZvckVhY2goY29sID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjb2xsZWN0RmlsdGVyZWQoY29sLmNoaWxkcmVuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0luRmlsdGVyc0NvbmZpZyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5zb21lKGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICAgICAgaWYgKGlzSW5GaWx0ZXJzQ29uZmlnKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBjb2xsZWN0RmlsdGVyZWQodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG5cblxuXG4gIHRvZ2dsZU9wZW5GaWx0ZXIoKSB7XG4gICAgdGhpcy5zaG93RmlsdGVycyA9ICF0aGlzLnNob3dGaWx0ZXJzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIC8vIENlbGwgRWRpdGluZyBXb3JrIHN0YXJ0IGhlcmVcblxuICBlZGl0aW5nS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQ2VsbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgc2V0QWN0aXZlQ2VsbChyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbHVtbi5maWVsZCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNBY3RpdmVDZWxsKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUNlbGwgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3RleHRBcmVhZElucHV0JykgdGV4dEFyZWFkSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xuICBtZW51UmVhZHkgPSBmYWxzZTtcbiAgZW5hYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNsaWNrZWRGcm9tRGV0YWlsc0JveCA9IGZhbHNlLCBjZWxsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmVkaXRpbkRyb3Bkb3duU2VhcmNoID0gJyc7XG4gICAgaWYgKHJvdz8uX192aXJ0dWFsSW5kZXggPT0gMCkgcmV0dXJuO1xuICAgIGlmICghY29sdW1uPy5pc19lZGl0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMubWVudVJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZWxsLWVkaXRpbmctZHJvcGRvd24tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZHJvcGRvd25NZW51KSB7XG4gICAgICAgICAgY29uc3QgcmVjdCA9IGRyb3Bkb3duTWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodDtcblxuICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgICAgICAgZHJvcGRvd25NZW51LnN0eWxlLnRvcCA9IGAtJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWVudS5zdHlsZS50b3AgPSAnMTAwJSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFjbGlja2VkRnJvbURldGFpbHNCb3ggJiYgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbi5maWVsZCk/Lmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KHJvdywgY29sdW1uLCB0aGlzLmNvbHVtbnMsIGZhbHNlKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjZWxsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlsZUlucHV0ID0gY2VsbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdpbnB1dFt0eXBlPVwiZmlsZVwiXSdcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICAgICAgICAvLyDinIUgSWYgZmlsZSBpbnB1dCBleGlzdHMg4oaSIG9wZW4gZmlsZSBkaWFsb2cgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKGZpbGVJbnB1dCkge1xuICAgICAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBPdGhlcndpc2UsIG5vcm1hbCBmb2N1cyBiZWhhdmlvclxuICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBjZWxsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJ2lucHV0Om5vdChbdHlwZT1cImZpbGVcIl0pLCB0ZXh0YXJlYSwgc2VsZWN0LCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAgIGZvY3VzYWJsZS5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvY3VzYWJsZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICAgIGZvY3VzYWJsZSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5zZWxlY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gaXNWYWx1ZVZhbGlkKHJvdzogYW55LCBjb2x1bW46IGFueSwgY29udHJvbDogYW55KXtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uc1NlcnZpY2UuaXNWYWx1ZVZhbGlkKHJvdywgY29sdW1uLCBjb250cm9sPy5jb250cm9sPy52YWx1ZSlcbiAgfVxuXG4gIGRpc2FibGVFZGl0KHJvdzogYW55LCBjb2x1bW46IGFueSwgY29udHJvbD86IGFueSkge1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgaWYgKCF0aGlzLmVkaXRpbmdLZXkpIHJldHVyblxuICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wucHJpc3RpbmUpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbD8uY29udHJvbD8udmFsdWU7XG4gICAgY29uc3QgdmlzaWJsZVJvdyA9IHRoaXMudmlzaWJsZVJvd3MuZmluZChyID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKSk7XG4gICAgaWYgKHZpc2libGVSb3cpIHtcbiAgICAgIHRoaXMuc2V0TmVzdGVkRmxhdFZhbHVlKHZpc2libGVSb3csIGNvbHVtbj8uZmllbGQsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChyb3csIGNvbHVtbiwgdmFsdWUpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhpcy5yb2xsQmFja0NlbGxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKHJvdywgY29sdW1uLCByb3dbY29sdW1uLmZpZWxkXSlcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbj8uZmllbGQpO1xuICAgIGlmICghY3VycmVudCB8fCAoY29sdW1uLnR5cGUgPT0gJ2VtYWlsJyAmJiAhdGhpcy52YWxpZGF0ZUVtYWlsKGN1cnJlbnQpKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsRGF0YVNldC5maW5kKGl0ZW0gPT4gKChpdGVtLmlkICYmIGl0ZW0uaWQgPT0gcm93LmlkKSB8fCAoaXRlbS5pZCAmJiBpdGVtLmlkID09IHJvdy5faWQpKSk7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbj8uZmllbGQpO1xuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgb3JpZ2luYWwpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW1hZ2VDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICghaW5wdXQuZmlsZXMgfHwgIWlucHV0LmZpbGVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuXG4gICAgLy8gT3B0aW9uYWwgdmFsaWRhdGlvblxuICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZpZXcgKGJhc2U2NClcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldE5lc3RlZEZsYXRWYWx1ZShyb3csIGNvbC5maWVsZCwgcmVhZGVyLnJlc3VsdCk7XG4gICAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3csIGNvbCwgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpO1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH1cblxuICBzZXROZXN0ZWRGbGF0VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm47XG5cbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpITtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmICghYWNjW2tleV0pIGFjY1trZXldID0ge307XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcblxuICAgIHBhcmVudFtsYXN0S2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcbiAgdmFsaWRhdGVFbWFpbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxSZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuICBhbGxvd09ubHlOdW1iZXJzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcbiAgICBpZiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlPzogYW55KSB7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsRGF0YVNldD8uZmluZChcbiAgICAgIChyOiBhbnkpID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKVxuICAgICk7XG4gICAgaWYgKCFvcmlnaW5hbFJvdykgcmV0dXJuO1xuICAgIC8vIGNvbnN0IGNsZWFuID0gKG9iajogYW55KSA9PiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgIC8vIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4uZmllbGQpO1xuICAgIC8vIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4uZmllbGQpO1xuICAgIGNvbnN0IG9yaWdpblZhbHVlID0gdGhpcy5kYXRhU2V0Py5maW5kKChyOiBhbnkpID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKSk7XG4gICAgY29uc3QgY2hhbmdlZFZhbHVlID0gb3JpZ2luVmFsdWUudmVyaWZpZWQgPT0gdmFsdWU7XG4gICAgLy8gaWYgKGNoYW5nZWRWYWx1ZSkgcmV0dXJuO1xuICAgIC8vIGNvbnN0IGhhc0NoYW5nZWQgPSB0aGlzLmNvbW1vblNldmljZS5oYXNGaWVsZENoYW5nZWQoY3VycmVudFZhbHVlLCBvcmlnaW5hbFZhbHVlLCBjb2x1bW4udHlwZSk7XG4gICAgLy8gaWYgKCFoYXNDaGFuZ2VkKSByZXR1cm47XG4gICAgLy8gdGhpcy5zZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLCB2YWx1ZSk7XG5cbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YTogeyAuLi5vcmlnaW5WYWx1ZSB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25DZWxsRWRpdCcsXG4gICAgICB2YWx1ZTogY29sdW1uLnR5cGUgIT09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB2YWx1ZXM6IGNvbHVtbi50eXBlID09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iailcbiAgICAvLyB9LCAxMDApO1xuICB9XG5cblxuICBpc0VkaXRpbmcocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ0tleSA9PT0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2wuZmllbGQpO1xuICB9XG5cbiAgc2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGNvbHVtbjogYW55LCBvcHRpb246IGFueSwgY2FsbGVkRnJvbUlucHV0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChvYmosIGNvbHVtbiwgb3B0aW9uKTtcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFZhbGlkYXRpb24gRXJyb3Igb24gZmllbGQgJHtjb2x1bW59YClcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IGNvbHVtbi5maWVsZDtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgb2JqKTtcblxuICAgIGlmIChwYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSBvcHRpb24ubWFwKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHR5cGVvZiBzZWxlY3RlZEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHNlbGVjdGVkSXRlbS5pZCA/PyBzZWxlY3RlZEl0ZW0uX2lkID8/IHNlbGVjdGVkSXRlbS52YWx1ZSA/PyBzZWxlY3RlZEl0ZW0ubmFtZSA/PyBzZWxlY3RlZEl0ZW1cbiAgICAgICAgICAgIDogc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+XG4gICAgICAgICAgICAob3B0Ll9pZCAmJiBvcHQuX2lkID09PSBzZWxlY3RlZElkKSB8fCAob3B0LmlkICYmIG9wdC5pZCA9PT0gc2VsZWN0ZWRJZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIG1hdGNoID8geyAuLi5tYXRjaCB9IDogeyBpZDogc2VsZWN0ZWRJZCwgdmFsdWU6IHNlbGVjdGVkSWQgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQgPz8gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/IG9wdGlvbjtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+IChvcHQuX2lkICYmIG9wdC5faWQgPT09IHNlbGVjdGVkSWQpIHx8IChvcHQuaWQgJiYgb3B0LmlkID09PSBzZWxlY3RlZElkKSk7XG5cbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gbWF0Y2ggPyB7IC4uLm1hdGNoIH0gOiB7IGlkOiBzZWxlY3RlZElkLCB2YWx1ZTogc2VsZWN0ZWRJZCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0geyBpZDogb3B0aW9uLCB2YWx1ZTogb3B0aW9uIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JpZ2luYWxEYXRhU2V0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcmlnaW5hbERhdGFTZXQpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJvd0luZGV4ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbmFsUm93SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gYWNjW2tleV0gPz89IHt9LCB0aGlzLm9yaWdpbmFsRGF0YVNldFtvcmlnaW5hbFJvd0luZGV4XSk7XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgb3JpZ2luYWxQYXJlbnRbbGFzdEtleV0gPSBwYXJlbnRbbGFzdEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gM++4j+KDoyBVcGRhdGUgY3VycmVudCBkYXRhc2V0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGlmICh0aGlzLmRhdGFTZXQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTZXQpKSB7XG4gICAgICBjb25zdCBkYXRhc2V0Um93SW5kZXggPSB0aGlzLmRhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKGRhdGFzZXRSb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgZGF0YXNldFBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgdGhpcy5kYXRhU2V0W2RhdGFzZXRSb3dJbmRleF0pO1xuICAgICAgICBpZiAoZGF0YXNldFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgZGF0YXNldFBhcmVudFtsYXN0S2V5XSA9IHBhcmVudFtsYXN0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYWxsZWRGcm9tSW5wdXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKG9iaiwgY29sdW1uLCBvcHRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJvbGxCYWNrQ2VsbFZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSk6IHZvaWQge1xuICAgIGlmICghcm93IHx8ICFjb2x1bW4pIHJldHVybjtcbiAgICBjb25zdCBvcmlnaW5hbFJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmICghb3JpZ2luYWxSb3cpIHJldHVybjtcblxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4uZmllbGQpO1xuXG4gICAgY29uc3QgdmlzaWJsZVJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLnZpc2libGVSb3dzLCByb3cuaWQgPz8gcm93Ll9pZCk7XG4gICAgaWYgKHZpc2libGVSb3cpIHZpc2libGVSb3dbY29sdW1uLmZpZWxkXSA9IG9yaWdpbmFsVmFsdWU7XG5cbiAgICBjb25zdCBkYXRhUm93ID0gdGhpcy52YWxpZGF0aW9uc1NlcnZpY2UuZmluZE9yaWdpbmFsUm93KHRoaXMuZGF0YVNldCwgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmIChkYXRhUm93KSBkYXRhUm93W2NvbHVtbi5maWVsZF0gPSBvcmlnaW5hbFZhbHVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXJyYXlUZW1wTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuXG4gIHByaXZhdGUgYXJyYXlLZXkocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cm93LmlkIHx8IHJvdy5faWR9XyR7Y29sLmZpZWxkfWA7XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbklkKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQ7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbkxhYmVsKG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbik7XG4gIH1cblxuICBnZXRBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYXJyYXlLZXkocm93LCBjb2wpO1xuXG4gICAgaWYgKCF0aGlzLmFycmF5VGVtcE1hcC5oYXMoa2V5KSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gQXJyYXkuaXNBcnJheShjdXJyZW50KVxuICAgICAgICA/IGN1cnJlbnQubWFwKHYgPT4gdGhpcy5nZXRBcnJheU9wdGlvbklkKHYpKVxuICAgICAgICA6IFtdO1xuXG4gICAgICB0aGlzLmFycmF5VGVtcE1hcC5zZXQoa2V5LCBub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheVRlbXBNYXAuZ2V0KGtleSkhO1xuICB9XG5cblxuICBpc0FycmF5U2VsZWN0ZWQocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKS5pbmNsdWRlcyhpZCk7XG4gIH1cblxuICB0b2dnbGVBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcblxuICAgIHRoaXMuYXJyYXlUZW1wTWFwLnNldChcbiAgICAgIHRoaXMuYXJyYXlLZXkocm93LCBjb2wpLFxuICAgICAgbGlzdC5pbmNsdWRlcyhpZCkgPyBsaXN0LmZpbHRlcih2ID0+IHYgIT09IGlkKSA6IFsuLi5saXN0LCBpZF1cbiAgICApO1xuICB9XG5cbiAgY29tbWl0QXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2wsIGlkcywgdHJ1ZSk7XG4gIH1cblxuXG4gIG9uQXJyYXlCbHVyKHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29tbWl0QXJyYXkocm93LCBjb2wpO1xuICB9XG5cblxuICBjbGVhbnVwQXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hcnJheVRlbXBNYXAuZGVsZXRlKHRoaXMuYXJyYXlLZXkocm93LCBjb2wpKTtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICB9XG5cblxuICBkaXNwbGF5QXJyYXlWYWx1ZXMoaWRzOiBhbnlbXSwgY29sPzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCkgcmV0dXJuIGlkcy5qb2luKCcsICcpO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXSkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcbiAgICAgIG1hcC5zZXQodGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdCksIG9wdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKGlkID0+IG1hcC5nZXQoaWQpPy52YWx1ZSA/PyBtYXAuZ2V0KGlkKT8ubmFtZSA/PyBpZClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZGlzcGxheUFycmF5TGFiZWxzKHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuXG4gICAgaWYgKCFpZHMubGVuZ3RoKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgIChjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdKS5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xuICAgICAgbWFwLnNldCh0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0KSwgb3B0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoaWQgPT4gbWFwLmdldChpZCk/LnZhbHVlID8/IG1hcC5nZXQoaWQpPy5uYW1lID8/IGlkKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuXG5cblxuXG4gIGdvVG9QYWdlKHBhZ2U6IGFueSkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWc/LnBhZ2UgPT0gcGFnZSkgcmV0dXJuO1xuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9IHBhZ2U7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdwYWdlQ2hhbmdlJyxcbiAgICB9O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPSAxO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgb2JqOiB7XG4gICAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAncGFnZUNoYW5nZScsXG4gICAgICB9O1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICB9LCA3MDApO1xuICB9XG5cbiAgYWN0aW9uUHJlc2V0KGRhdGE6IGFueSwgdHlwZTogYW55KSB7XG4gICAgZGF0YS5jb2x1bW5zID0gZGF0YT8uY29sdW1ucz8ubWFwKCh7IF9pZCwgZmlsdGVyVmFsdWUsIHNlYXJjaCwgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLCBxdWVyeSwgX190eXBlbmFtZSwgLi4ucmVzdCB9OiBhbnkpID0+IHJlc3QpO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcblxuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YT8uZmlsdGVycz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGVsZW1lbnQuX190eXBlbmFtZTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgfVxuICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgIGRlbGV0ZSBkYXRhPy5pc190ZW1wO1xuICAgIGRlbGV0ZSBkYXRhPy5jb25maWcuX190eXBlbmFtZTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0eXBlXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBjdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSAnJztcbiAgY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlOiBhbnk7XG4gIHRlbXBfc3RhdGUgPSB7XG4gICAgaWQ6ICcnLFxuICAgIGlzX3RlbXA6IGZhbHNlXG4gIH1cbiAgYXN5bmMgc2VsZWN0RmlsdGVyKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGVtcF9zdGF0ZSA9IHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgaXNfdGVtcDogdHJ1ZVxuICAgIH1cbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgdGhpcy50YWJsZVZpZXcgPSB0aGlzLnRhYmxlVmlldy5tYXAoaXRlbSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlzX3RlbXA6IGl0ZW0uaWQgPT0gZGF0YT8uaWRcbiAgICB9KSk7XG4gICAgdGhpcy5jb2x1bW5zID0gZGF0YS5jb2x1bW5zO1xuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YS5maWx0ZXJzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50Ll9fdHlwZW5hbWU7XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5nbG9iYWxTZWFyY2ggPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9IGRhdGE/Lm5hbWU7XG4gICAgICB0aGlzLnByZXNldEZpbHRlciA9IGRhdGE/LmFjdGl2ZUZpbHRlcnMgfHwgZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgZGF0YS5jb2x1bW5zID0gdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgICAgZGVsZXRlIGRhdGE/LmlzX3RlbXA7XG4gICAgICBkZWxldGUgZGF0YT8uY29uZmlnLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIGlmIChkYXRhPy5pc19kZWFmdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3Rpb25QcmVzZXQoZGF0YSwgJ3NldFByZXNldCcpXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWxlY3QnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBzYXZlUHJlc2V0KGNvbnRyb2w/OiBhbnkpIHtcbiAgICBpZiAoY29udHJvbD8uaW52YWxpZCkge1xuICAgICAgY29udHJvbD8uY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0RmlsdGVySGVhZGVycyh0aGlzLmZpbHRlcnNDb25maWcsIHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkID8gdHJ1ZSA6IHRoaXMucHJlc2V0RmlsdGVyO1xuICAgIGxldCBzZWxlY3RlZERhdGE6IGFueSA9IHRoaXMudGFibGVWaWV3LmZpbmQoKGVsZSkgPT4gZWxlLmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGxldCBjb25maWcgPSB7XG4gICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBib2R5VGV4dEZvbnRzU2l6ZTogKyh0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIGhlYWRlclRleHRGb250c1NpemU6ICsodGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB1bmRlZmluZWQsXG4gICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoLFxuICAgICAgZmlsdGVyTmFtZXM6IG5hbWVzLFxuICAgICAgdG90YWxDb3VudDogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyxcbiAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkXG5cbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogdGhpcy50YWJsZUZpbHRlclZpZXdJZCA/IHNlbGVjdGVkRGF0YT8ubmFtZSA6IHRoaXMucHJlc2V0TmFtZSxcbiAgICAgICAgYWN0aXZlRmlsdGVyczogdGhpcy5wcmVzZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMucHJlc2V0RmlsdGVyXG4gICAgICAgICAgPyB0aGlzLmZpbHRlcnNDb25maWc/Lm1hcCgoeyBfX3R5cGVuYW1lLCBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IF9fdHlwZW5hbWU6IF9faW5uZXIsIC4uLmNsZWFuUXVlcnkgfSA9IHF1ZXJ5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgcXVlcnk6IGNsZWFuUXVlcnkgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogW10sXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICBpZDogdGhpcy50YWJsZUZpbHRlclZpZXdJZCB8fCB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZT8uaWQsXG4gICAgICAgIGxvYWRpbmdDYWxsOiBjb250cm9sID09ICdtb3VzZVVwJyA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGVcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgfHwgIXRoaXMuaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyAndXBkYXRlUHJlc2V0JyA6ICdjcmVhdGVQcmVzZXQnXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgfSwgNTAwKTtcbiAgfVxuXG5cbiAgZ2V0RmlsdGVySGVhZGVycyhmaWx0ZXJzOiBhbnlbXSwgY29sdW1uczogYW55W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZWRIZWFkZXJzID0gZmlsdGVyc1xuICAgICAgLm1hcChmID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZi5maWVsZCk7XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyBjb2x1bW4uaGVhZGVyIDogbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGhlYWRlciA9PiAhIWhlYWRlcik7XG5cbiAgICByZXR1cm4gbWF0Y2hlZEhlYWRlcnMuam9pbignLCAnKTtcbiAgfVxuXG5cbiAgdG9nZ2xlUm93U2hhZGluZygpIHtcbiAgICB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gJyNmMWYxZjEnIDogdW5kZWZpbmVkO1xuICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gIH1cblxuICB0cmFja0J5VGFibGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIGFjdGl2ZVJvdzogYW55XG4gIGFjdGl2ZVJvd0NvbDogYW55O1xuXG4gIC8vIFRyYWNrIGV4cGFuZGVkIGNlbGxzIGFzIGEgU2V0IG9mIHVuaXF1ZSByb3crY29sIGlkZW50aWZpZXJzXG5cbiAgZ2V0Q2VsbEtleShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmdldFJvd0lkKHJvdyl9XyR7Y29sPy5maWVsZH1gO1xuICB9XG5cbiAgZXhwYW5kZWRDZWxscyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgekNvdW50ZXIgPSAyMTtcblxuICBzaG93RGV0YWlsc0JveCA9IGZhbHNlO1xuXG4gIHRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KFxuICAgIHJvdzogYW55LFxuICAgIGNvbDogYW55LFxuICAgIGNvbHVtbnM6IGFueVtdLFxuICAgIGV4cGFuZFdob2xlUm93ID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZXhwYW5kQ2VsbHMgPSAodGFyZ2V0Um93OiBhbnkpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0Um93W2MuZmllbGRdO1xuXG4gICAgICAgIGlmICgodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID4gNTApIHx8IChBcnJheS5pc0FycmF5KHRleHQpICYmIHRleHQ/Lmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRSb3dJZCh0YXJnZXRSb3cpICsgJy0nICsgYy5maWVsZDtcbiAgICAgICAgICB0aGlzLnpDb3VudGVyKys7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCBjb2xsZWN0S2V5c0ZvclJvdyA9ICh0YXJnZXRSb3c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRleHQgPSB0YXJnZXRSb3dbYy5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dC5sZW5ndGggPiA1MCB8fCAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Py5sZW5ndGggPiAxKSkge1xuICAgICAgICAgIGtleXMucHVzaCh0aGlzLmdldFJvd0lkKHRhcmdldFJvdykgKyAnLScgKyBjLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG4gICAgaWYgKGV4cGFuZFdob2xlUm93KSB7XG4gICAgICBsZXQgcm93S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sPy5maWVsZCk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcm93S2V5cyA9IGNvbGxlY3RLZXlzRm9yUm93KHJvdyk7XG4gICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICByb3dLZXlzLnB1c2goLi4uY29sbGVjdEtleXNGb3JSb3coY2hpbGQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dLZXlzID0gY29sbGVjdEtleXNGb3JSb3cocm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbEV4cGFuZGVkID0gcm93S2V5cy5ldmVyeShrID0+IHRoaXMuZXhwYW5kZWRDZWxscy5oYXMoaykpO1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICBpZiAoIWFsbEV4cGFuZGVkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdy5jaGlsZHJlbikgJiYgcm93LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBleHBhbmRDZWxscyhyb3cpO1xuICAgICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IGV4cGFuZENlbGxzKGNoaWxkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwYW5kQ2VsbHMocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQ7XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuekNvdW50ZXIrKztcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2hvd0RldGFpbHNCb3ggPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNPcGVuVG9Ub3Aocm93KVxuICAgIH0sIDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzT3BlblRvVG9wKHJvdzogYW55KSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhLWdyaWQtYm9keScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIChjb2wuaWQgfHwgY29sLl9pZCk7XG4gICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoIWJveCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgYm94UmVjdCA9IGJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdCb3R0b20gPSBib3hSZWN0LmJvdHRvbSA+IHdyYXBwZXJSZWN0LmJvdHRvbTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdUb3AgPSBib3hSZWN0LnRvcCA8IHdyYXBwZXJSZWN0LnRvcDtcbiAgICAgIGlmIChpc092ZXJmbG93aW5nQm90dG9tICYmICFpc092ZXJmbG93aW5nVG9wKSB7XG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IGJveC5vZmZzZXRIZWlnaHQgfHwgMDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm94SGVpZ2h0ICsgNDtcbiAgICAgICAgYm94LnN0eWxlLnRvcCA9IGAkey1vZmZzZXR9cHhgO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib3guc3R5bGUuYm90dG9tID0gYGF1dG9gO1xuICAgICAgICBib3guc3R5bGUudG9wID0gYDEwMCVgO1xuICAgICAgICBib3guc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoMClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pXG4gICAgdGhpcy5zaG93RGV0YWlsc0JveCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuXG5cblxuXG4gIGlzRXhwYW5kZWQocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDZWxscy5oYXModGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIGdldFpJbmRleChyb3c6IGFueSwgY29sOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2VsbHMuZ2V0KHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZCkgPz8gMjE7XG4gIH1cblxuICBpc092ZXJmbG93aW5nKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuXG5cbiAgLy8gUGljdHVyZSBjZWxsIExvZ2ljXG4gIGNvbG9yQ29tYmluYXRpb24gPSBbJ3BpYy1jb21iMScsICdwaWMtY29tYjInLCAncGljLWNvbWI0J107XG4gIGdldER5bmFtaWNDbGFzcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRoaXMuY29sb3JDb21iaW5hdGlvblswXTtcbiAgICBjb25zdCBoYXNoID0gQXJyYXkuZnJvbShuYW1lKS5yZWR1Y2UoKGFjYywgY2hhcikgPT4gYWNjICsgY2hhci5jaGFyQ29kZUF0KDApLCAwKTtcbiAgICBjb25zdCBpbmRleCA9IGhhc2ggJSB0aGlzLmNvbG9yQ29tYmluYXRpb24/Lmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5jb2xvckNvbWJpbmF0aW9uW2luZGV4XTtcbiAgfVxuXG4gIGdldEluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJ05BJztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgcmV0dXJuIChwYXJ0c1swXVswXSArIChwYXJ0c1sxXT8uWzBdIHx8ICcnKSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG5cbiAgYWN0aW9uSGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIHhQb3MgPSAwO1xuICB5UG9zID0gMDtcbiAgaXNWaXNpYmxlID0gZmFsc2U7XG4gIGRlYXRpbHNMaXN0OiBhbnk7XG4gIG9wZW5FeHBlbmRJbmRleDogYW55O1xuICBwb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG5cbiBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgYW55LCBkZWF0aWxzTGlzdDogYW55KTogYm9vbGVhbiB7XG4gICAgIC8vIFN0b3JlIG9yaWdpbmFsIGFjdGlvbnMgb24gZmlyc3QgaW5pdGlhbGl6YXRpb24gaWYgbm90IGFscmVhZHkgc3RvcmVkXG4gIGlmICh0aGlzLm9yaWdpbmFsQWN0aW9ucz8ubGVuZ3RoID09PSAwICYmIHRoaXMudmFsaWRhdGVJY29uKSB7XG4gICAgdGhpcy5vcmlnaW5hbEFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zXTsgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsXG4gIH1cbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnZhbGlkYXRlSWNvbiBcbiAgICAgID8gdGhpcy5nZXRWYWxpZEFjdGlvbnMoZGVhdGlsc0xpc3QpIFxuICAgICAgOiAoZGVhdGlsc0xpc3Q/LmFjdGlvbnM/Lmxlbmd0aCA/IGRlYXRpbHNMaXN0LmFjdGlvbnMgOiB0aGlzLmFjdGlvbnMpO1xuXG4gICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGRlYXRpbHNMaXN0Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIC8vIEdldCB0aGUgaW5pdGlhbCBjbGljayBwb3NpdGlvblxuICAgIGNvbnN0IGNsaWNrWCA9IChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICBjb25zdCBjbGlja1kgPSAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSA/IGV2ZW50LmNsaWVudFkgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgXG4gICAgdGhpcy54UG9zID0gY2xpY2tYO1xuICAgIHRoaXMueVBvcyA9IGNsaWNrWTtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG4gICAgdGhpcy5kZWF0aWxzTGlzdCA9IGRlYXRpbHNMaXN0O1xuICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbWVudUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGV4dC1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoIW1lbnVFbGVtZW50KSByZXR1cm47XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBcbiAgICAgIC8vIEdldCB0YWJsZSBjb250YWluZXIgYm91bmRzXG4gICAgICBjb25zdCB0YWJsZVJlY3QgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0YWJsZVRvcCA9IHRhYmxlUmVjdC50b3A7XG4gICAgICBjb25zdCB0YWJsZUJvdHRvbSA9IHRhYmxlUmVjdC5ib3R0b207XG4gICAgICBjb25zdCB0YWJsZUhlaWdodCA9IHRhYmxlUmVjdC5oZWlnaHQ7XG4gICAgICBcbiAgICAgIGxldCB4ID0gY2xpY2tYO1xuICAgICAgbGV0IHkgPSBjbGlja1k7XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBYIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIGhvcml6b250YWxseVxuICAgICAgaWYgKHggKyBtZW51V2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIHggPSB2aWV3cG9ydFdpZHRoIC0gbWVudVdpZHRoIC0gMTA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBZIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIHRhYmxlIHZlcnRpY2FsbHlcbiAgICAgIC8vIENoZWNrIGlmIG1lbnUgd291bGQgZ28gYmVsb3cgdGFibGUgYm90dG9tXG4gICAgICBpZiAoeSArIG1lbnVIZWlnaHQgPiB0YWJsZUJvdHRvbSkge1xuICAgICAgICAvLyBUcnkgdG8gcG9zaXRpb24gYWJvdmUgY2xpY2sgcG9pbnRcbiAgICAgICAgeSA9IGNsaWNrWSAtIG1lbnVIZWlnaHQ7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aGF0IGdvZXMgYWJvdmUgdGFibGUgdG9wLCBwb3NpdGlvbiBhdCB0YWJsZSBib3R0b21cbiAgICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICAgIHkgPSB0YWJsZUJvdHRvbSAtIG1lbnVIZWlnaHQgLSAxMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgbWVudSBkb2Vzbid0IGdvIGFib3ZlIHRhYmxlIHRvcFxuICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICB5ID0gdGFibGVUb3AgKyAxMDtcbiAgICAgIH1cbiAgICAgIHRoaXMueFBvcyA9IHg7XG4gICAgICB0aGlzLnlQb3MgPSB5O1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgb2JqOiB0aGlzLmRlYXRpbHNMaXN0LFxuICAgICAgZXZlbnRUeXBlOiBhY3Rpb24sXG4gICAgfTtcbiAgICB0aGlzLnBvc2l0aW9uZWRZZXQgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChzZW5kT2JqKTtcbiAgfVxuXG5cbiAgb25WZXJpZnlDbGljayh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gdHlwZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dCA9PSAnYXJjaGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGVsZXRlJyB8fCB0ZXh0ID09ICdyZXN0b3JlJyB8fCB0ZXh0ID09ICdyZW1vdmUnIHx8IHRleHQgPT0gJ2RlYWN0aXZhdGUnIHx8IHRleHQgPT0gJ2FjdGl2YXRlJyB8fCB0ZXh0ID09ICdibG9jaycgfHwgdGV4dCA9PSAndW5ibG9jaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VuYWJsZScgfHwgdGV4dCA9PSAnZGlzYWJsZScgfHwgdGV4dCA9PSAnYXBwcm92ZScgfHwgdGV4dCA9PSAncmVqZWN0JyB8fCB0ZXh0ID09ICdwdWJsaXNoJyB8fCB0ZXh0ID09ICd1bnB1Ymxpc2gnIHx8IHRleHQgPT0gJ2xvY2snIHx8IHRleHQgPT0gJ3VubG9jaycgfHwgdGV4dCA9PSAnY29tcGxldGUnIHx8IHRleHQgPT0gJ2luY29tcGxldGUnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdzZW5kIHRvIHJldmlldycgfHwgdGV4dCA9PSAnbWFyayBhcyBwYWlkJyB8fCB0ZXh0ID09ICdtYXJrIGFzIHVucGFpZCcgfHwgdGV4dCA9PSAnZnVsZmlsbCcgfHwgdGV4dCA9PSAndW5mdWxmaWxsJyB8fCB0ZXh0ID09ICdyZWZ1bmQnIHx8IHRleHQgPT0gJ2NhbmNlbCcgfHwgdGV4dCA9PSAncmVzZW5kJyB8fCB0ZXh0ID09ICdjaGFyZ2ViYWNrJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGlzcHV0ZScgfHwgdGV4dCA9PSAnZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2RlZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2ZsYWcnIHx8IHRleHQgPT0gJ3VuZmxhZycgfHwgdGV4dCA9PSAndmVyaWZ5JyB8fCB0ZXh0ID09ICd1bnZlcmlmeScgfHwgdGV4dCA9PSAnc3Vic2NyaWJlJyB8fCB0ZXh0ID09ICd1bnN1YnNjcmliZScgfHwgdGV4dCA9PSAnZm9sbG93JyB8fCB0ZXh0ID09ICd1bmZvbGxvdydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2xpa2UnIHx8IHRleHQgPT0gJ3VubGlrZScgfHwgdGV4dCA9PSAnc2hhcmUnIHx8IHRleHQgPT0gJ3Vuc2hhcmUnIHx8IHRleHQgPT0gJ2NvbW1lbnQnIHx8IHRleHQgPT0gJ3VuY29tbWVudCcgfHwgdGV4dCA9PSAndGFnJyB8fCB0ZXh0ID09ICd1bnRhZycgfHwgdGV4dCA9PSAnYXNzaWduJyB8fCB0ZXh0ID09ICd1bmFzc2lnbicgfHwgdGV4dCA9PSAnbGluaycgfHwgdGV4dCA9PSAndW5saW5rJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnc3luYycgfHwgdGV4dCA9PSAndW5zeW5jJyB8fCB0ZXh0ID09ICdiYWNrdXAnIHx8IHRleHQgPT0gJ3Jlc3RvcmUgYmFja3VwJyB8fCB0ZXh0ID09ICdtaWdyYXRlJyB8fCB0ZXh0ID09ICdpbXBvcnQnIHx8IHRleHQgPT0gJ2V4cG9ydCcgfHwgdGV4dCA9PSAnZ2VuZXJhdGUgcmVwb3J0JyB8fCB0ZXh0ID09ICdkb3dubG9hZCByZXBvcnQnIHx8IHRleHQgPT0gJ3ZpZXcgZGV0YWlscydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VkaXQgZGV0YWlscycgfHwgdGV4dCA9PSAndXBkYXRlIGRldGFpbHMnIHx8IHRleHQgPT0gJ2NoYW5nZSBzdGF0dXMnIHx8IHRleHQgPT0gJ3Jlc2V0IHBhc3N3b3JkJyB8fCB0ZXh0ID09ICdzZW5kIG5vdGlmaWNhdGlvbicgfHwgdGV4dCA9PSAnc2NoZWR1bGUnIHx8IHRleHQgPT0gJ3Jlc2NoZWR1bGUnIHx8IHRleHQgPT0gJ2NhbmNlbCBzY2hlZHVsZScgfHwgdGV4dCA9PSAnc3RhcnQnIHx8IHRleHQgPT0gJ3N0b3AnIHx8IHRleHQgPT0gJ3BhdXNlJyB8fCB0ZXh0ID09ICdyZXN1bWUnXG4gICAgKSB7XG4gICAgICAvLyB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdGUodGhpcy50YWJsZVR5cGUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICB9XG4gICAgY29uc3QgaWRzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICBjb25zdCBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGU6IGFueVtdID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuZm9yRWFjaChpZCA9PiB7XG4gICAgICBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGUucHVzaCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBvYmo6IGlkc0FycmF5LFxuICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gIH1cblxuXG4gIGdldENlbGxDbGFzc2VzKGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0Q2VsbENsYXNzZXMoY29sdW1uLCB2YWx1ZSk7XG4gIH1cblxuXG4gIHJlbW92ZUNvbHVtbkZpbHRlckZyb21Db2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoIWNvbHVtbikgcmV0dXJuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgY29sdW1uLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJ10uaW5jbHVkZXMoY29sdW1uLnR5cGUpKSB7XG4gICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgb25TaWRlTWVudUNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIGNsZWFuRmlsdGVyZENvbHVtbnMoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5lZEZpbHRlcmVkQ29sdW1ucztcbiAgfVxuXG4gIGRvd25sb2FkQ3N2KHR5cGU6ICdjc3YnIHwgJ3hsc3gnKSB7XG4gICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XG4gICAgICBoZWFkZXJCZ0NvbG9yOiB0aGlzLmhlYWRlckJhY2tncm91bmRDb2xvcixcbiAgICAgIGhlYWRlclRleHRDb2xvcjogdGhpcy5oZWFkZXJUZXh0Q29sb3IsXG4gICAgICBib2R5VGV4dENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICAgIHpvb21TY2FsZTogMTI1LFxuICAgICAgaGVhZGVyUm93SGVpZ2h0OiAzMFxuICAgIH1cbiAgICBpZiAodGhpcy5lbmFibGVFeHBvcnQpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBkZCA9IFN0cmluZyhub3cuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgbW0gPSBTdHJpbmcobm93LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgeXl5eSA9IG5vdy5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgSEggPSBTdHJpbmcobm93LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBNTSA9IFN0cmluZyhub3cuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkID1cbiAgICAgICAgYCR7dGhpcy50YWJsZVR5cGV9XyR7ZGR9LSR7bW19LSR7eXl5eX1fJHtISH0tJHtNTX1gO1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXR0ZWQpO1xuXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YVNldCwgZm9ybWF0dGVkLCB0eXBlLCB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcywgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxuICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ2Rvd25sb2FkQ3N2J1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSAneGxzeCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuXG4gIH1cblxuICBvbkZvbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBib2R5VGV4dEZvbnRzU2l6ZTogdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgIGhlYWRlclRleHRGb250c1NpemU6IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSxcbiAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB1bmRlZmluZWQsXG4gICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGNvbmZpZ1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ2NvbmZpZydcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcblxuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIG9uR2xvYmFsU2VhcmNoKCkge1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIHNlYXJjaGluZ1xuICB0aGlzLmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk7XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICB0YWJsZVNlYXJjaDogdGhpcy50YWJsZVNlYXJjaFxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ3NlYXJjaCdcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBvblNlYXJjaElucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZygnU2VhcmNoIHZhbHVlOicsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudGFibGVTZWFyY2ggPSAnJztcbiAgICAgIHRoaXMub25HbG9iYWxTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZpbHRlckNoYW5nZXNFZmZlY3QoKTogYW55IHtcbiAgICBpZiAoIXRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHJldHVybiB0cnVlXG4gICAgY29uc3QgZmluZERlZmF1bHRGaWx0ZXIgPSB0aGlzLnRhYmxlVmlldz8uZmluZCgoZWxlOiBhbnkpID0+IGVsZT8uaWQgPT0gdGhpcy50YWJsZUZpbHRlclZpZXdJZCk7XG4gICAgY29uc3Qgbm9ybWFsaXplRmlsdGVycyA9IChmaWx0ZXJzOiBhbnlbXSB8IHVuZGVmaW5lZCk6IGFueVtdID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkgcmV0dXJuIFtdO1xuICAgICAgY29uc3QgY2xvbmVkID0gZmlsdGVycy5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYgPz8ge30pKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0uX2lkcykpIGl0ZW0uX2lkcyA9IFtdO1xuICAgICAgICBpdGVtLl9pZHMgPSBpdGVtLl9pZHMuc2xpY2UoKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgcmV0dXJuICgnJyArIGEpLmxvY2FsZUNvbXBhcmUoJycgKyBiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGl0ZW0ucXVlcnkgPT09IG51bGwpIHtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbS5xdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbS5xdWVyeS5faWRzKSkgaXRlbS5xdWVyeS5faWRzID0gW107XG4gICAgICAgICAgaXRlbS5xdWVyeS5faWRzID0gaXRlbS5xdWVyeS5faWRzLnNsaWNlKCkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgICByZXR1cm4gKCcnICsgYSkubG9jYWxlQ29tcGFyZSgnJyArIGIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICAgIGNsb25lZC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmYSA9IChhLmZpZWxkIHx8ICcnKSArICd8JyArIChhLnR5cGUgfHwgJycpO1xuICAgICAgICBjb25zdCBmYiA9IChiLmZpZWxkIHx8ICcnKSArICd8JyArIChiLnR5cGUgfHwgJycpO1xuICAgICAgICByZXR1cm4gZmEubG9jYWxlQ29tcGFyZShmYik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVlcEVxdWFsID0gKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgYSA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gJ29iamVjdCcgfHwgYiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgICAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRBID0gbm9ybWFsaXplRmlsdGVycyhmaW5kRGVmYXVsdEZpbHRlcj8uZmlsdGVycyk7XG4gICAgY29uc3Qgbm9ybWFsaXplZEIgPSBub3JtYWxpemVGaWx0ZXJzKHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgaXNTYW1lID0gZGVlcEVxdWFsKG5vcm1hbGl6ZWRBLCBub3JtYWxpemVkQik7XG4gICAgcmV0dXJuIGlzU2FtZTtcbiAgfVxuXG5cblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIENlbGwgU2VsZWN0aW9uIEltcGxlbWVudGVkIEhlcmUgSW1wbGVtZW50ZWQgSGVyZVxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgc2VsZWN0ZWRDZWxsczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgc2VsZWN0aW9uU3RhcnQ6IGFueSA9IG51bGw7XG4gIGlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIHN0YXJ0U2VsZWN0aW9uKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtmaWVsZH1gO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleDogc2FmZVN1YiwgZmllbGQsIGtleSB9O1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW3RoaXMuc2VsZWN0aW9uU3RhcnRdO1xuICAgIGNvbnN0IG1vdXNlVXBIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5lbmRTZWxlY3Rpb24oKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpXG4gIH1cblxuXG4gIGV4dGVuZFNlbGVjdGlvbihcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW5nIHx8ICF0aGlzLnNlbGVjdGlvblN0YXJ0KSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3QgdGFyZ2V0U3ViQ29sSW5kZXggPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IG5ld0tleXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IG5ld0NlbGxzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IG1pblJvdyA9IE1hdGgubWluKHN0YXJ0LnJvd0luZGV4LCByb3dJbmRleCk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnQucm93SW5kZXgsIHJvd0luZGV4KTtcbiAgICBjb25zdCBjb2x1bW5zVG9TZWxlY3QgPSB0aGlzLmdldENvbHVtblNlbGVjdGlvblJhbmdlKHN0YXJ0LmNvbEluZGV4LCBjb2xJbmRleCwgc3RhcnQuc3ViQ29sSW5kZXgsIHRhcmdldFN1YkNvbEluZGV4KTtcblxuICAgIGZvciAobGV0IHIgPSBtaW5Sb3c7IHIgPD0gbWF4Um93OyByKyspIHtcbiAgICAgIGZvciAoY29uc3QgY29sSW5mbyBvZiBjb2x1bW5zVG9TZWxlY3QpIHtcbiAgICAgICAgY29uc3QgayA9IGAke3J9LSR7Y29sSW5mby5jb2xJbmRleH0tJHtjb2xJbmZvLnN1YkNvbEluZGV4fS0ke3NlY3Rpb259YDtcbiAgICAgICAgbmV3S2V5cy5hZGQoayk7XG4gICAgICAgIG5ld0NlbGxzLnB1c2goe1xuICAgICAgICAgIHJvd0luZGV4OiByLFxuICAgICAgICAgIGNvbEluZGV4OiBjb2xJbmZvLmNvbEluZGV4LFxuICAgICAgICAgIHN1YkNvbEluZGV4OiBjb2xJbmZvLnN1YkNvbEluZGV4LFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGtleToga1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IG5ld0tleXM7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gbmV3Q2VsbHM7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gQWRkIGF1dG8tc2Nyb2xsaW5nIGxvZ2ljXG4gICAgdGhpcy5oYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudCk7XG4gIH1cblxuXG5cblxuICBnZXRDb2x1bW5TZWxlY3Rpb25SYW5nZShcbiAgICBzdGFydENvbDogbnVtYmVyLFxuICAgIGVuZENvbDogbnVtYmVyLFxuICAgIHN0YXJ0U3ViOiBudW1iZXIsXG4gICAgZW5kU3ViOiBudW1iZXJcbiAgKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH1bXSB7XG4gICAgY29uc3QgcmVzdWx0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfVtdID0gW107XG4gICAgY29uc3QgbWluQ29sID0gTWF0aC5taW4oc3RhcnRDb2wsIGVuZENvbCk7XG4gICAgY29uc3QgbWF4Q29sID0gTWF0aC5tYXgoc3RhcnRDb2wsIGVuZENvbCk7XG5cbiAgICBjb25zdCBpc0xlZnRUb1JpZ2h0ID0gc3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgIGZvciAobGV0IGMgPSBtaW5Db2w7IGMgPD0gbWF4Q29sOyBjKyspIHtcbiAgICAgIGNvbnN0IHN1YkNvbENvdW50ID0gdGhpcy5nZXRTdWJDb2x1bW5Db3VudChjKTtcblxuICAgICAgaWYgKGMgPT09IHN0YXJ0Q29sICYmIGMgPT09IGVuZENvbCkge1xuICAgICAgICBjb25zdCBtaW5TdWIgPSBNYXRoLm1pbihzdGFydFN1YiwgZW5kU3ViKTtcbiAgICAgICAgY29uc3QgbWF4U3ViID0gTWF0aC5tYXgoc3RhcnRTdWIsIGVuZFN1Yik7XG4gICAgICAgIGZvciAobGV0IHMgPSBtaW5TdWI7IHMgPD0gbWF4U3ViICYmIHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IHN0YXJ0Q29sKSB7XG4gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0KSB7XG4gICAgICAgICAgZm9yIChsZXQgcyA9IHN0YXJ0U3ViOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IHN0YXJ0U3ViICYmIHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IGVuZENvbCkge1xuICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodCkge1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IGVuZFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IHMgPSBlbmRTdWI7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRTdWJDb2x1bW5Db3VudChjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuY29sdW1ucyB8fCBjb2xJbmRleCA8IDAgfHwgY29sSW5kZXggPj0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2xJbmRleF07XG4gICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gMTtcbiAgfVxuICBpc0dyb3VwQ29sdW1uKGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdWJDb2x1bW5Db3VudChjb2xJbmRleCkgPiAxO1xuICB9XG4gIGVuZFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdG9wQXV0b1Njcm9sbCgpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICB9XG4gIGlzU2VsZWN0ZWQoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoa2V5KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25Cb3VuZHM6IHtcbiAgICB0b3A6IG51bWJlciB8IG51bGw7XG4gICAgYm90dG9tOiBudW1iZXIgfCBudWxsO1xuICAgIGxlZnQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgICByaWdodDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsO1xuICB9ID0geyB0b3A6IG51bGwsIGJvdHRvbTogbnVsbCwgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwgfTtcblxuICB1cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcyA9IHsgdG9wOiBudWxsLCBib3R0b206IG51bGwsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCB1bmlxdWUgcm93IGluZGljZXMgYW5kIGZpbmQgbWluL21heFxuICAgIGNvbnN0IHJvd0luZGljZXMgPSBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5yb3dJbmRleCkpXTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3AgPSBNYXRoLm1pbiguLi5yb3dJbmRpY2VzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gPSBNYXRoLm1heCguLi5yb3dJbmRpY2VzKTtcblxuICAgIC8vIEZvciBsZWZ0L3JpZ2h0IGJvdW5kYXJpZXMsIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBjb2xJbmRleCBhbmQgc3ViQ29sSW5kZXhcbiAgICBjb25zdCBsZWZ0TW9zdCA9IHRoaXMuZmluZExlZnRNb3N0Q2VsbCgpO1xuICAgIGNvbnN0IHJpZ2h0TW9zdCA9IHRoaXMuZmluZFJpZ2h0TW9zdENlbGwoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQgPSBsZWZ0TW9zdDtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCA9IHJpZ2h0TW9zdDtcbiAgfVxuICBmaW5kTGVmdE1vc3RDZWxsKCk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWluQ29sSW5kZXggPSBNYXRoLm1pbiguLi50aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5jb2xJbmRleCkpO1xuICAgIGNvbnN0IGxlZnRDb2xDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoY2VsbCA9PiBjZWxsLmNvbEluZGV4ID09PSBtaW5Db2xJbmRleCk7XG4gICAgY29uc3QgbWluU3ViQ29sSW5kZXggPSBNYXRoLm1pbiguLi5sZWZ0Q29sQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5zdWJDb2xJbmRleCkpO1xuXG4gICAgcmV0dXJuIHsgY29sSW5kZXg6IG1pbkNvbEluZGV4LCBzdWJDb2xJbmRleDogbWluU3ViQ29sSW5kZXggfTtcbiAgfVxuICBmaW5kUmlnaHRNb3N0Q2VsbCgpOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1heENvbEluZGV4ID0gTWF0aC5tYXgoLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwuY29sSW5kZXgpKTtcbiAgICBjb25zdCByaWdodENvbENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzLmZpbHRlcihjZWxsID0+IGNlbGwuY29sSW5kZXggPT09IG1heENvbEluZGV4KTtcbiAgICBjb25zdCBtYXhTdWJDb2xJbmRleCA9IE1hdGgubWF4KC4uLnJpZ2h0Q29sQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5zdWJDb2xJbmRleCkpO1xuXG4gICAgcmV0dXJuIHsgY29sSW5kZXg6IG1heENvbEluZGV4LCBzdWJDb2xJbmRleDogbWF4U3ViQ29sSW5kZXggfTtcbiAgfVxuICBpc1RvcEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wICE9PSBudWxsICYmIHJvd0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3A7XG4gIH1cbiAgaXNCb3R0b21Cb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbSAhPT0gbnVsbCAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tO1xuICB9XG4gIGlzTGVmdEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdCAhPT0gbnVsbCAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQuY29sSW5kZXggJiZcbiAgICAgIHNhZmVTdWIgPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQuc3ViQ29sSW5kZXg7XG4gIH1cblxuICBpc1JpZ2h0Qm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCAhPT0gbnVsbCAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LmNvbEluZGV4ICYmXG4gICAgICBzYWZlU3ViID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodC5zdWJDb2xJbmRleDtcbiAgfVxuXG4gIGlzVG9wTGVmdENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc0xlZnRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuICBpc1RvcFJpZ2h0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvcEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzUmlnaHRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuICBpc0JvdHRvbUxlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNCb3R0b21SaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCb3R0b21Cb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cblxuICBjZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHNjcm9sbFNwZWVkID0gMTUwO1xuICBwcml2YXRlIHNjcm9sbE1hcmdpbiA9IDMwO1xuICBoYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGhvcml6b250YWxDb250YWluZXIgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdmVydGljYWxDb250YWluZXIgPSB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvcml6b250YWxDb250YWluZXIgfHwgIXZlcnRpY2FsQ29udGFpbmVyKSByZXR1cm47XG4gICAgY29uc3QgaG9yaXpvbnRhbFJlY3QgPSBob3Jpem9udGFsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1vdXNlWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgdmVydGljYWxSZWN0ID0gdmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VZID0gZXZlbnQuY2xpZW50WTtcbiAgICBjb25zdCBuZWFyVG9wID0gbW91c2VZIC0gdmVydGljYWxSZWN0LnRvcCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJCb3R0b20gPSB2ZXJ0aWNhbFJlY3QuYm90dG9tIC0gbW91c2VZIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgY29uc3QgbmVhckxlZnQgPSBtb3VzZVggLSBob3Jpem9udGFsUmVjdC5sZWZ0IDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgY29uc3QgbmVhclJpZ2h0ID0gaG9yaXpvbnRhbFJlY3QucmlnaHQgLSBtb3VzZVggPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBsZXQgc2Nyb2xsWCA9IDA7XG4gICAgbGV0IHNjcm9sbFkgPSAwO1xuICAgIGlmIChuZWFyVG9wKSBzY3JvbGxZID0gLXRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgaWYgKG5lYXJCb3R0b20pIHNjcm9sbFkgPSB0aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyTGVmdCkgc2Nyb2xsWCA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyUmlnaHQpIHNjcm9sbFggPSB0aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChzY3JvbGxYICE9PSAwIHx8IHNjcm9sbFkgIT09IDApIHtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFggIT09IDApIHtcbiAgICAgICAgICBob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHNjcm9sbFgsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxZICE9PSAwKSB7XG4gICAgICAgICAgdmVydGljYWxDb250YWluZXIuc2Nyb2xsQnkoMCwgc2Nyb2xsWSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDgpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BBdXRvU2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBSb3cgU2VsZWN0aW9uIGZyb20gdGhlIEluZGV4aW5nIEltcGxlbWVudGVkIEhlcmVcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIHJvd1NlbGVjdGVkSW5kZXhlczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG4gIHJvd1NlbGVjdGluZyA9IGZhbHNlO1xuICByb3dTZWxlY3Rpb25TdGFydEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgYXV0b1Njcm9sbEludGVydmFsOiBhbnkgPSBudWxsO1xuXG4gIGdldCBmaXJzdFNlbGVjdGVkUm93KCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gTWF0aC5taW4oLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMpO1xuICB9XG5cbiAgZ2V0IGxhc3RTZWxlY3RlZFJvdygpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzKTtcbiAgfVxuXG5cbiAgb25Sb3dNb3VzZURvd24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucm93U2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgIHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKGluZGV4KTtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSAnJztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBtb3VzZU1vdmVIYW5kbGVyID0gKGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuaGFuZGxlQXV0b1Njcm9sbChlKTtcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25Sb3dNb3VzZVVwKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gIH1cblxuICBvblJvd01vdXNlT3ZlcihpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5yb3dTZWxlY3RpbmcgfHwgdGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4ID09PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCwgaW5kZXgpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCwgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKGkpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhbLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXNdKTtcbiAgfVxuXG4gIG9uUm93TW91c2VVcCgpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9IG51bGw7XG4gIH1cbiAgaGFuZGxlQXV0b1Njcm9sbChlOiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVkZ2VTaXplID0gNDBcbiAgICBsZXQgc2Nyb2xsQW1vdW50ID0gMDtcblxuICAgIGlmIChlLmNsaWVudFkgPCByZWN0LnRvcCArIGVkZ2VTaXplKSB7XG4gICAgICBzY3JvbGxBbW91bnQgPSAtMTUwO1xuICAgIH0gZWxzZSBpZiAoZS5jbGllbnRZID4gcmVjdC5ib3R0b20gLSBlZGdlU2l6ZSkge1xuICAgICAgc2Nyb2xsQW1vdW50ID0gMTUwO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxBbW91bnQgIT09IDApIHtcbiAgICAgIGlmICghdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9ICgpID0+IHtcbiAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICs9IHNjcm9sbEFtb3VudDtcbiAgICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTogYW55W11bXSB7XG4gIC8vICAgY29uc3QgY29waWVkUm93czogYW55W11bXSA9IFtdO1xuICAvLyAgIGNvbnN0IGZpbmRSb3dCeVZpcnR1YWxJbmRleCA9ICh2SW5kZXg6IG51bWJlcikgPT5cbiAgLy8gICAgIHRoaXMuZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuX192aXJ0dWFsSW5kZXggPT09IHZJbmRleCk7XG4gIC8vICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzICYmIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPiAwKSB7XG4gIC8vICAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gWy4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIC8vICAgICBmb3IgKGNvbnN0IHZJbmRleCBvZiBzb3J0ZWRJbmRleGVzKSB7XG4gIC8vICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleCh2SW5kZXgpO1xuICAvLyAgICAgICBpZiAoIXJvdykgY29udGludWU7XG4gIC8vICAgICAgIGNvbnN0IHJvd1ZhbHVlcyA9IHRoaXMuY29sdW1ucy5mbGF0TWFwKGNvbCA9PlxuICAvLyAgICAgICAgIGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbilcbiAgLy8gICAgICAgICAgID8gY29sLmNoaWxkcmVuLm1hcCgoYzogeyBmaWVsZDogc3RyaW5nIH0pID0+XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGMuZmllbGQpID8/ICcnXG4gIC8vICAgICAgICAgICAgIClcbiAgLy8gICAgICAgICAgIDogdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgPz8gJydcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgY29waWVkUm93cy5wdXNoKHJvd1ZhbHVlcyk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscyAmJiB0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCkge1xuICAvLyAgICAgY29uc3Qgcm93c01hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcbiAgLy8gICAgIGZvciAoY29uc3QgY2VsbCBvZiB0aGlzLnNlbGVjdGVkQ2VsbHMpIHtcbiAgLy8gICAgICAgY29uc3Qgcm93ID0gZmluZFJvd0J5VmlydHVhbEluZGV4KGNlbGwucm93SW5kZXgpO1xuICAvLyAgICAgICBpZiAoIXJvdykgY29udGludWU7XG5cbiAgLy8gICAgICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zW2NlbGwuY29sSW5kZXhdO1xuICAvLyAgICAgICBsZXQgZmllbGROYW1lID0gY29sPy5maWVsZDtcbiAgLy8gICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdKSB7XG4gIC8vICAgICAgICAgZmllbGROYW1lID0gY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdLmZpZWxkO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgPz8gJyc7XG5cbiAgLy8gICAgICAgaWYgKCFyb3dzTWFwLmhhcyhjZWxsLnJvd0luZGV4KSkgcm93c01hcC5zZXQoY2VsbC5yb3dJbmRleCwgW10pO1xuICAvLyAgICAgICByb3dzTWFwLmdldChjZWxsLnJvd0luZGV4KSEucHVzaCh2YWx1ZSk7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGNvbnN0IHNvcnRlZENlbGxzID0gWy4uLnJvd3NNYXAuZW50cmllcygpXVxuICAvLyAgICAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEgLSBiKVxuICAvLyAgICAgICAubWFwKChbXywgdl0pID0+IHYpO1xuXG4gIC8vICAgICBjb3BpZWRSb3dzLnB1c2goLi4uc29ydGVkQ2VsbHMpO1xuICAvLyAgIH1cblxuICAvLyAgIGlmIChjb3BpZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAvLyAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3RpdmUtY2VsbCcpO1xuICAvLyAgICAgaWYgKGFjdGl2ZUNlbGwpIHJldHVybiBbW2FjdGl2ZUNlbGwudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJ11dO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBtYXhDb2xzID0gY29waWVkUm93cy5yZWR1Y2UoKG1heCwgcm93KSA9PiBNYXRoLm1heChtYXgsIHJvdy5sZW5ndGgpLCAwKTtcbiAgLy8gICBjb25zdCBub3JtYWxpemVkID0gY29waWVkUm93cy5tYXAocm93ID0+IHtcbiAgLy8gICAgIGNvbnN0IG5ld1JvdyA9IFsuLi5yb3ddO1xuICAvLyAgICAgd2hpbGUgKG5ld1Jvdy5sZW5ndGggPCBtYXhDb2xzKSBuZXdSb3cucHVzaCgnJyk7IFxuICAvLyAgICAgcmV0dXJuIG5ld1JvdztcbiAgLy8gICB9KTtcbiAgLy8gICByZXR1cm4gbm9ybWFsaXplZDtcbiAgLy8gfVxuXG5cbiAgdW5kb1N0YWNrOiBhbnlbXVtdID0gW107XG4gIHJlZG9TdGFjazogYW55W11bXSA9IFtdO1xuXG4gIHByaXZhdGUgY2xvbmVEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgfVxuXG4gIHBlcmZvcm1DdXQoc2VsZWN0ZWREYXRhOiBhbnlbXVtdKSB7XG4gICAgLy8gU2F2ZSBjdXJyZW50IHN0YXRlIGZvciB1bmRvXG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh0aGlzLmNsb25lRGF0YSh0aGlzLnZpc2libGVSb3dzKSk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTsgLy8gQ2xlYXIgcmVkbyBzdGFjayBvbiBuZXcgYWN0aW9uXG5cbiAgICAvLyBQZXJmb3JtIGN1dFxuICAgIHRoaXMuY29weVNlcnZpY2UuY3V0V2l0aEFuaW1hdGlvbihzZWxlY3RlZERhdGEpO1xuICAgIGNvbnN0IHsgdXBkYXRlZFJvd3MgfSA9IHRoaXMuY29weVNlcnZpY2UuY3V0U2VsZWN0ZWRTZWxlY3RlZERhdGEoXG4gICAgICB0aGlzLnZpc2libGVSb3dzLFxuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMsXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLnNldE5lc3RlZFZhbHVlLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgUm93czogJywgdXBkYXRlZFJvd3MpO1xuICB9XG5cblxuXG4gIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTogYW55W11bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29weVNlcnZpY2UuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weShcbiAgICAgIHRoaXMuZGF0YVNldCxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLFxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzLFxuICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgKTtcbiAgfVxuXG5cbiAgcGFnZVNpemVLZXlNYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgcHJpdmF0ZSBidWlsZFBhZ2VTaXplS2V5TWFwKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemVLZXlNYXAgPSB7fTtcblxuICAgIHRoaXMucGFnZVNpemVPcHRpb25zLmZvckVhY2goKHNpemUsIGluZGV4KSA9PiB7XG4gICAgICAvLyBLZXlzOiAx4oCTOSwgdGhlbiAwIGZvciAxMHRoIGl0ZW1cbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIGluZGV4IDwgOVxuICAgICAgICAgID8gU3RyaW5nKGluZGV4ICsgMSlcbiAgICAgICAgICA6IGluZGV4ID09PSA5XG4gICAgICAgICAgPyAnMCdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUtleU1hcFtrZXldID0gc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpc0Zvcm1GaWVsZCA9XG4gICAgICB0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHxcbiAgICAgIHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZTtcbiAgICBpZiAoaXNGb3JtRmllbGQgfHwgdGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmdvVG9OZXh0UGFnZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEN0cmwgKyBBcnJvdyBMZWZ0IOKGkiBQcmV2aW91cyBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmICFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5nb1RvUHJldmlvdXNQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IExlZnQg4oaSIEZpcnN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gXG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgY29uc3QgTUlOX0hFSUdIVCA9IDI4O1xuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ICs9IDE7XG4gICAgICB0aGlzLnJvd0hlaWdodCArPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSBNYXRoLm1heChNSU5fSEVJR0hULCB0aGlzLmhlYWRlclJvd0hlaWdodCAtIDEpO1xuICAgICB0aGlzLnJvd0hlaWdodCA9IE1hdGgubWF4KE1JTl9IRUlHSFQsIHRoaXMucm93SGVpZ2h0IC0gMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgICAgICBcblxuICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuZ2xvYmFsU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaW5wdXRFbC5mb2N1cygpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE91dGxpbmUgPSBpbnB1dEVsLnN0eWxlLm91dGxpbmU7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQm94U2hhZG93ID0gaW5wdXRFbC5zdHlsZS5ib3hTaGFkb3c7XG4gICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ291dGxpbmUnLCAnMnB4IHNvbGlkICM0ZjljZmYnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdib3gtc2hhZG93JywgJzAgMCA4cHggMnB4ICM0ZjljZmYnLCAnaW1wb3J0YW50Jyk7IFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdvdXRsaW5lJywgb3JpZ2luYWxPdXRsaW5lIHx8ICcnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYm94LXNoYWRvdycsIG9yaWdpbmFsQm94U2hhZG93IHx8ICcnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgIH0sIDEwMDApO1xuXG5cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hdXRvc2l6ZUFsbENvbHVtbnMoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdignY3N2Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdlJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRvd25sb2FkQ3N2KCd4bHN4Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSAhdGhpcy5zaG93VmVydGljYWxCb3JkZXI7XG4gICAgICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnaCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9ICF0aGlzLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnc21hbGwnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ20nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ21lZGl1bScpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnbGFyZ2UnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgXG5cblxuICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgIGNvbnN0IG5ld0xpbWl0ID0gdGhpcy5wYWdlU2l6ZUtleU1hcFtldmVudC5rZXldO1xuICAgICAgaWYgKG5ld0xpbWl0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgIT09IG5ld0xpbWl0KSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ID0gbmV3TGltaXQ7XG4gICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgY29uc3QgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0YS1ncmlkLWJvZHktd3JhcHBlcicpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiAhdGFibGVDb250YWluZXIuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoICYmICF0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplKSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29weVNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHNlbGVjdGVkRGF0YSk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucGVyZm9ybUN1dChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoKSByZXR1cm5cbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVuZG8oKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd5Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yZWRvKCk7XG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdhJykge1xuICAgICAgLy8g4pyFIFNlbGVjdCBhbGwgY2VsbHNcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbENlbGxzKCk7XG4gICAgICB9XG4gIH1cblxuICBnb1RvTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICAgIGlmIChjdXJyZW50UGFnZSA8PSAxKSByZXR1cm47XG4gICAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlIC0gMSk7XG4gICAgfVxuXG4gICAgZ29Ub0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IDEpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKDEpO1xuICB9XG5cbiAgZ29Ub0xhc3RQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSBsYXN0UGFnZSkgcmV0dXJuO1xuICAgIHRoaXMuZ29Ub1BhZ2UobGFzdFBhZ2UpO1xuICB9XG5cblxuXG5cbiAgc2VsZWN0QWxsQ2VsbHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuXG4gICAgLy8gU2V0IHNlbGVjdGlvbiBzdGFydCBsaWtlIHNpbmdsZSBzZWxlY3Rpb24gKGZpcnN0IGNlbGwpXG4gICAgaWYgKHRoaXMuZGF0YVNldC5sZW5ndGggJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RGaWVsZCA9IHRoaXMuY29sdW1uc1swXS5maWVsZCB8fCB0aGlzLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7XG4gICAgICAgIHJvd0luZGV4OiAwLFxuICAgICAgICBjb2xJbmRleDogMCxcbiAgICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAgIGZpZWxkOiBmaXJzdEZpZWxkLFxuICAgICAgICBrZXk6IGAwLTAtMC0ke2ZpcnN0RmllbGR9YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDw9IHRoaXMuZGF0YVNldD8ubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICBpZiAoIXJvd0luZGV4KSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNldFtyb3dJbmRleF07XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5hZGQocm93SW5kZXgpO1xuXG4gICAgICAvLyBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgLy8gICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgICAgLy8gICBjb25zdCBmaWVsZCA9IGNvbC5maWVsZCB8fCBjb2wubmFtZTtcbiAgICAgIC8vICAgaWYoIWNvbC5pc192aXNpYmxlKSBjb250aW51ZTtcblxuICAgICAgLy8gICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoc3ViOiBhbnksIHN1YkNvbEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fS0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHtcbiAgICAgIC8vICAgICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgICBzdWJDb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICAgIGtleSxcbiAgICAgIC8vICAgICAgIH0pO1xuICAgICAgLy8gICAgIH0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0wLSR7ZmllbGR9YDtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICByb3dJbmRleCxcbiAgICAgIC8vICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAvLyAgICAgICBmaWVsZCxcbiAgICAgIC8vICAgICAgIGtleSxcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoaWdobGlnaHRpbmcgYW5kIFVJXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG5cbiAgICAvLyBTdG9wIFwic2VsZWN0aW5nXCIgbW9kZSBzaW5jZSBpdCdzIGEgb25lLXRpbWUgc2VsZWN0LWFsbFxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG5cblxuICB1bmRvKCkge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShwcmV2U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZG8oKSB7XG4gICAgaWYgKHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuY2xvbmVEYXRhKG5leHRTdGF0ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhc3RlJywgWyckZXZlbnQnXSlcbiAgYXN5bmMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBpZighdGhpcy5lbmFibGVDdXQpIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGFnID0gdGFyZ2V0Py50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnIHx8IHRhcmdldD8uZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCB8fCAhdGhpcy5hY3RpdmVDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHVzZXJDb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGFzdGUgdGhlIGNvcGllZCBkYXRhPydcbiAgICApO1xuXG4gICAgaWYgKCF1c2VyQ29uZmlybWVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuc2VsZWN0ZWRDZWxscz8uWzBdO1xuICAgIGlmICghc3RhcnRDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGVkUm93cyA9IGF3YWl0IHRoaXMuY29weVNlcnZpY2UucGFzdGVGcm9tQ2xpcGJvYXJkVGV4dChcbiAgICAgIHRleHQsXG4gICAgICB0aGlzLnZpc2libGVSb3dzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgc3RhcnRDZWxsLnJvd0luZGV4LFxuICAgICAgc3RhcnRDZWxsLmNvbEluZGV4LFxuICAgICAgc3RhcnRDZWxsLnN1YkNvbEluZGV4XG4gICAgKTtcblxuICAgIGlmICh1cGRhdGVkUm93cz8udXBkYXRlUm93cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHtcbiAgICAgICAgZGF0YTogdXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3MsXG4gICAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgICAgY29sdW1uOiB1cGRhdGVkUm93cz8uY3VycmVudENvbHVtc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnY3VzdG9tLW92ZXJsYXktd3JhcHBlcicpO1xuICAgICAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtb2RhbC1tZXNzYWdlXCI+JHttZXNzYWdlfTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY29uZmlybVwiPkNvbmZpcm08L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgICBjb25zdCBjb25maXJtQnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuYnRuLWNvbmZpcm0nKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jYW5jZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3ZlcmxheSk7XG4gICAgICB9O1xuICAgICAgY29uZmlybUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuXG5cblxuICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNOYU4obmV3IERhdGUodmFsdWUpPy5nZXRUaW1lKCkpO1xuICB9XG5cblxuICAvLyBIb2xkIGV4cGFuZGVkIElEcyAoYXJyYXkgZm9yIG11bHRpcGxlLCBzaW5nbGUgdmFsdWUgZm9yIHNpbmdsZSlcbiAgZXhwYW5kZWRlZERldGFpbFJvd3M6IChzdHJpbmcgfCBudW1iZXIpW10gfCBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICB0b2dnbGVEZXRhaWxSb3dFeHBhbmQocm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09ICdBc3NldHMnICYmIHJvdz8uZGV0YWlsPy5jb2x1bW5zKSB7XG4gICAgICByb3cuZGV0YWlsLmNvbHVtbnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ud2lkdGggPSBpdGVtPy53aWR0aCB8fCAodGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gcm93LmRldGFpbC5jb2x1bW5zPy5sZW5ndGgpXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJldmlld05lc3RlZENvbHMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnMocm93LmRldGFpbC5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2VlcE11bHRpcGxlRXhwYW5kZWREZXRhaWxzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzIGFzIChzdHJpbmcgfCBudW1iZXIpW107XG4gICAgICBjb25zdCBpbmRleCA9IGV4cGFuZGVkLmluZGV4T2YoaWQpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBleHBhbmRlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwYW5kZWQucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMucmlnaHRQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJpZ2h0UGlubmVkQm9keT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAzMDApXG4gIH1cblxuICBpc0RldGFpbHNFeHBhbmRlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gcm93Py5pZCB8fCByb3c/Ll9pZDtcblxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykgJiZcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cy5pbmNsdWRlcyhpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRGaWx0ZXJWYWx1ZShvcHRpb246IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uO1xuICB9XG5cblxuICBvcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0b2dnbGVNZW51KGk6IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9XG4gICAgdGhpcy5vcGVuSW5kZXggPSB0aGlzLm9wZW5JbmRleCA9PT0gaSA/IG51bGwgOiBpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbmVzdGVkVGFibGUnKVxuICBuZXN0ZWRUYWJsZSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBnZXQgaGFzVmVydGljYWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IGhhc0hvcml6b250YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFRvdGFsQW1vdW50KGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4/LmlzX2Ftb3VudCkgcmV0dXJuO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmlnaW5hbERhdGFTZXQucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXSB8fCAwO1xuICAgICAgcmV0dXJuIHN1bSArIHZhbHVlO1xuICAgIH0sIDApO1xuICAgIGlmICghdG90YWwpIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAwLjAwYFxuICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAke3RoaXMuZm9ybWF0Q3VycmVuY3kudHJhbnNmb3JtKHRvdGFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KX1gO1xuICB9XG5cbiAgZHJvcENvbHVtbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+LCByb3c6IGFueSkge1xuICAgIC8vIFJlb3JkZXIgdGhlIGNvbHVtbnMgYXJyYXlcbiAgICBtb3ZlSXRlbUluQXJyYXkocm93LmRldGFpbC5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgY3VycmVudFN1YlNvcnRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBhY3RpdmUgY29sdW1uXG4gIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnOyAvLyBhY3RpdmUgZGlyZWN0aW9uXG5cbiAgc29ydE5lc3RlZENvbChjb2w6IGFueSwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBkYXRhU2V0ID0gcm93Py5kZXRhaWw/LnJlc3VsdDtcbiAgICBpZiAodGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9IGNvbC5maWVsZDtcbiAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG4gICAgY29sLm9yZGVyX2J5ID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbjtcblxuICAgIC8vIFNvcnQgY29weSBpbnN0ZWFkIG9mIG11dGF0aW5nXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRhdGFTZXRdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGxldCBhVmFsID0gYVtjb2wuZmllbGRdO1xuICAgICAgbGV0IGJWYWwgPSBiW2NvbC5maWVsZF07XG4gICAgICBhVmFsID0gYVZhbCA9PSBudWxsID8gJycgOiBhVmFsO1xuICAgICAgYlZhbCA9IGJWYWwgPT0gbnVsbCA/ICcnIDogYlZhbDtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgYVZhbCA9IG5ldyBEYXRlKGFWYWwpLmdldFRpbWUoKTtcbiAgICAgICAgYlZhbCA9IG5ldyBEYXRlKGJWYWwpLmdldFRpbWUoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGNvbnN0IGJvdGhOdW1iZXJzID0gIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKTtcblxuICAgICAgaWYgKGJvdGhOdW1iZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGFOdW0gLSBiTnVtIDogYk51bSAtIGFOdW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb21wID0gU3RyaW5nKGFWYWwpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGJWYWwpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcCA6IC1jb21wO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcm93LmRldGFpbC5yZXN1bHQgPSBzb3J0ZWQ7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGdldENvbHVtbldpZHRoUHgocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoY29sLndpZHRoKSByZXR1cm4gY29sLndpZHRoICsgJ3B4JztcbiAgICBjb25zdCBwaXhlbHMgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWw/LmNvbHVtbnMubGVuZ3RoO1xuICAgIHJldHVybiBwaXhlbHMgKyAncHgnO1xuICB9XG5cbiAgZnVsbHNjcmVlbkltYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIEFzc2VzdHMgTmVzdGVkIFRhYmxlIFdvcmsgSW1wbGVtZW50ZWQgSGVyZVxuXG4gIHBpblVucGluQ29sdW0oY29sOiBhbnksIHZhbHVlOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCwgY29sdW1uczogYW55W10pIHtcbiAgICBjb2wucGlubmVkID0gdmFsdWU7XG4gICAgY29uc3QgbGVmdCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgbWlkZGxlID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5waW5uZWQgfHwgYy5waW5uZWQgPT09IG51bGwpO1xuICAgIGNvbnN0IHJpZ2h0ID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0Jyk7XG4gICAgY29sdW1ucy5sZW5ndGggPSAwO1xuICAgIGNvbHVtbnMucHVzaCguLi5sZWZ0LCAuLi5taWRkbGUsIC4uLnJpZ2h0KTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gIH1cblxuICBnZXRMZWZ0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpLmxlbmd0aDtcbiAgfVxuXG4gIGdldFJpZ2h0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAncmlnaHQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRTdGlja3lMZWZ0KGNvbHVtbnM6IGFueVtdLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChwcmV2Q29sLnBpbm5lZCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgKz0gcHJldkNvbC53aWR0aCB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtsZWZ0fXB4YDtcbiAgfVxuXG4gIHByZXZpZXdOZXN0ZWRDb2xzOiBhbnlbXSA9IFtdO1xuICBvbk5lc3RlZENvbFNvcnQoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55W10+LCBjb2x1bW5zOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghZXZlbnQgfHwgIWNvbHVtbnMpIHJldHVybjtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgY29sQ2VsbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWApKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgY29sQ2VsbHMuZm9yRWFjaCgoZWwpID0+IGZpcnN0UG9zaXRpb25zLnNldChlbCwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkpO1xuICAgIH0pO1xuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkgPz8gbmV3TGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGVhc2UnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuICAgICAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGNsZWFudXApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHNhdmVTZWxlY3Rpb24oc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLCB0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGFibGVUeXBlKSByZXR1cm47XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7XCJzZWxlY3RlZFJvd3NcIjoge319Jyk7XG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzIHx8IHt9O1xuICAgIGFsbFNlbGVjdGVkW3RhYmxlVHlwZV0gPSBzZWxlY3RlZElkcztcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICdkYXRhdGFibGVTZWxlY3Rpb25zJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBhbGxTZWxlY3RlZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRhYmxlVHlwZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICByZXN0b3JlU2VsZWN0aW9uKHRhYmxlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7fScpO1xuICAgIGNvbnN0IGlkcyA9IHN0b3JlZC5zZWxlY3RlZFJvd3M/Llt0YWJsZVR5cGVdIHx8IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gbmV3IFNldChpZHMpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cztcbiAgfVxuXG5cblxuICBpc091dHNpZGVDb250YWluZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWN0OiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG5cblxuICBvbkRyYWdTdGFydGVkKGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4gPSBjb2w7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGEtZ3JpZC1tYWluLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVsbDtcbiAgfVxuXG4gIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB7IHgsIHkgfSA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbjtcbiAgICBjb25zdCBpc091dHNpZGUgPVxuICAgICAgeCA8IHRoaXMuY29udGFpbmVyUmVjdC5sZWZ0IHx8XG4gICAgICB4ID4gdGhpcy5jb250YWluZXJSZWN0LnJpZ2h0IHx8XG4gICAgICB5IDwgdGhpcy5jb250YWluZXJSZWN0LnRvcCB8fFxuICAgICAgeSA+IHRoaXMuY29udGFpbmVyUmVjdC5ib3R0b207XG5cbiAgICAvLyBpZiAoaXNPdXRzaWRlICE9PSB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikge1xuICAgIC8vICAgdGhpcy5pc091dHNpZGVDb250YWluZXIgPSBpc091dHNpZGU7XG4gICAgLy8gfVxuICB9XG5cbiAgb25EcmFnRW5kZWQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBpZiAodGhpcy5pc091dHNpZGVDb250YWluZXIgJiYgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4pIHtcbiAgICAgIC8vICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4hLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IG51bGw7XG4gIH1cblxuICBnZXRTdGFydEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgPT09IDBcbiAgICAgID8gMFxuICAgICAgOiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCArIDEgfHwgMDtcbiAgfVxuXG4gIGhhc0FueURlZmF1bHRWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlVmlldz8uc29tZSgoeCkgPT4geC5pc19kZWZhdWx0IHx8IHguaXNfdGVtcCk7XG4gIH1cblxuXG4gIGdldCBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGN1cnJQcmVzZXQgPSB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZTtcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRDb2x1bW5zID0gY3VyclByZXNldD8uY29sdW1ucz8ubWFwKChjb2w6IHsgZmllbGQ6IGFueTsgd2lkdGg6IGFueTsgcGlubmVkOiBhbnk7IH0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/Lm1hcChjb2wgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbC53aWR0aCxcbiAgICAgICAgcGlubmVkOiBjb2wucGlubmVkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQcmVzZXRDb2x1bW5zKTtcbiAgICBjb25zdCBzdHJpbmdDb2x1bW5zID0gSlNPTi5zdHJpbmdpZnkoY29sdW1ucyk7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBjb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmNvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmZpcnN0X2NvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF92YWx1ZTogZmlsdGVyPy5xdWVyeT8uZmlyc3RfdmFsdWUsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogZmlsdGVyPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbixcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LnNlY29uZF92YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRGaWx0ZXJzID0gY3VyclByZXNldD8uZmlsdGVycz8ubWFwKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IGZpbHRlci5xdWVyeSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuXG4gICAgLy8gY29uc29sZS5sb2coXCJmaWx0ZXIgY29uZ2lnOiBcIiwgZmlsdGVycyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJjdXJyZW50IHByZXNldCBmaWx0ZXJzOiBcIiwgY3VycmVudFByZXNldEZpbHRlcnMpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ2lzRXF1YWwnLCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBUZW1wIFByZXNldCA6ICcsIGN1cnJQcmVzZXQpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgQ29scyBjb2x1bW5zOiAnLCBjdXJyZW50UHJlc2V0Q29sdW1ucylcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjb2x1bW5zOiAnLCBjb2x1bW5zKTtcblxuICAgIGlmICghY3VycmVudFByZXNldENvbHVtbnMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAoY3VycmVudFByZXNldENvbHVtbnMgJiYgKHN0cmluZ3NDdXJyZW50UHJlc3RDb2xzID09IHN0cmluZ0NvbHVtbnMpICYmIChKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSA9PSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0RmlsdGVycykpICYmICh0aGlzLmZvbnRGYWltbHkgPT0gY3VyclByZXNldC5jb25maWcuZm9udEZhaW1seSlcbiAgICAgICYmICh0aGlzLmJvZHlUZXh0Rm9udHNTaXplID09IGN1cnJQcmVzZXQuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplKSAmJlxuICAgICAgKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmhlYWRlclRleHRGb250c1NpemUpXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyID09IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuZm9udEZhaW1seSA9PSB0aGlzLmZvbnRGYWltbHlcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0ID09IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dFxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplID09IHRoaXMuYm9keVRleHRGb250c1NpemVcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZCA9PSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkKTtcblxuICAgIC8vIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25BY3Rpb25CdXR0b25DbGljayhidXR0b246IHN0cmluZykge1xuICAgIGNvbnN0IHRleHQgPSBidXR0b24/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRleHQgPT0gJ2FjdGl2ZSBkYXRhJyB8fCB0ZXh0ID09ICdhY3RpdmUnIHx8IHRleHQgPT0gJ2RhdGEgYWN0aXZlJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmVkIGRhdGEnIHx8IHRleHQgPT0gJ3VuYXJjaGl2ZSBkYXRhJykgdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogYnV0dG9uXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uQWN0aW9uQnV0dG9uQ2xpY2tcIixcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgY29uc3QgYWxsVGFicyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYnMnKSB8fCAne30nKTtcbiAgICBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSA9IHRhYjtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlVGFicycsIEpTT04uc3RyaW5naWZ5KGFsbFRhYnMpKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIG9iajogdGFiXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25UYWJDaGFuZ2UnLFxuICAgIH07XG5cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldEJhY2tncm91bmRDb2xvcihyb3c6IGFueSwgaXNFdmVuOiBib29sZWFuLCBzZWN0aW9uOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmhvdmVyZWRSb3dJZCA9PT0gKHJvdy5faWQgfHwgcm93LmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMucm93SG92ZXJDb2xvcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2VkUm93QmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBsZXQgYmFzZUNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5yb3dTaGFkaW5nRW5hYmxlZCkge1xuICAgICAgYmFzZUNvbG9yID0gaXNFdmVuID8gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvciA6IHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUNvbG9yID0gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgaWYgKCFiYXNlQ29sb3IpIHtcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5sZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIGlmIChzZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMucmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXNlQ29sb3I7XG4gIH1cblxuICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFNhZmVDb21tZW50KGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5FZGl0b3JDb250ZW50KGRlc2NyaXB0aW9uKTtcbiAgfVxuICBjbGVhbkVkaXRvckNvbnRlbnQoY29udGVudDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgcmV0dXJuIHRoaXMuaHRtbFNhbmF0aXplclNlcnZpY2UuY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQpO1xuICB9XG5cbiAgZ2V0RXh0ZW50aW9uKHVybDogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHVybCAhPT0gJy0nKSB7XG4gICAgICBpZiAodHlwZW9mICh1cmwpID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcbiAgICAgICAgcmV0dXJuIHVybFswXS5zcGxpdCgnLicpLnBvcCgpXG4gICAgICB9IGVsc2UgcmV0dXJuICctJ1xuICAgIH1cbiAgICBlbHNlIHJldHVybiAnLSdcbiAgfVxuXG4gIGRvd25sb2FkQXR0Y2htZW50KHVybDogYW55LCBmaWxlPzogYW55KSB7XG4gICAgLy8gdGhpcy5vbkV2ZW50LmVtaXQoe1xuICAgIC8vICAgZG93bmxvYWQ6IHRydWUsXG4gICAgLy8gfSk7XG4gICAgLy8gdGhpcy5nZW5lcmljRXZlbnQuZW1pdChkYXRhKVxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICcnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG5cbiAgfVxuICBmdWxsSW1hZ2VTcmM6IHN0cmluZyB8IG51bGwgPSAnJztcbiAgb3BlbkZ1bGxJbWFnZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgdGhpcy5mdWxsSW1hZ2VTcmMgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdHlsZXNUb0ltYWdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29tbWVudC1jb250ZW50IGltZycpO1xuICAgIGltYWdlcy5mb3JFYWNoKChpbWcpID0+IHtcbiAgICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZGlyZWN0bHlcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnd2lkdGgnLCAnNzBweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICdib3JkZXItcmFkaXVzJywgJzE2cHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnbWFyZ2luJywgJzhweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgICAvLyBBZGQgY2xpY2sgbGlzdGVuZXIgdG8gc2hvdyBmdWxsc2NyZWVuIGltYWdlIG9uIGNsaWNrXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbWcsICdjbGljaycsICgpID0+IHRoaXMub25JbWFnZUNsaWNrKChpbWcgYXMgSFRNTEltYWdlRWxlbWVudCkuc3JjKSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkltYWdlQ2xpY2soc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZ1bGxzY3JlZW5JbWFnZSA9IHNyYztcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2Z1bGxzY3JlZW5JbWFnZVRlbXBsYXRlJykgZnVsbHNjcmVlbkltYWdlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGZ1bGxzY3JlZW5WaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGljb25NYXA6IFJlY29yZDxzdHJpbmcsIChyb3c6IGFueSwgY29sOiBhbnkpID0+IHN0cmluZz4gPSB7XG4gICAgYXR0YWNobWVudHNfY291bnQ6ICgpID0+IHRoaXMuc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXR0YWNobWVudHMuc3ZnJyxcbiAgICBjb21tZW50X2NvdW50OiAoKSA9PiB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NvbW1lbnRzLnN2ZycsXG4gICAgcHJpb3JpdHk6IChyb3csIGNvbCkgPT4ge1xuICAgICAgY29uc3QgdmFsID1cbiAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAnZGF0YS1ncmlkL2ljb25zLycgK1xuICAgICAgICAodmFsID8/ICdkZWZhdWx0JykgK1xuICAgICAgICAnLnN2ZydcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgYXMgYW55O1xuICAgIGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICBlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xuICAgICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkud2Via2l0RXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DZWxsRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY3VzdG9tQ2VsbEV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuR3JvdXAocm93OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICBpZiAobm9kZS5pc0dyb3VwKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHRyYXZlcnNlKGNoaWxkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlKHJvdyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNlbGVjdEdyb3VwUm93KGU6IEV2ZW50LCByb3c6IGFueSkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBjaGVja2JveC5jaGVja2VkO1xuICAgIC8vIEdldCBhbGwgZGVlcCBkYXRhIHJvd3MgKGxlYWYgcm93cylcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZmxhdHRlbkdyb3VwKHJvdyk7XG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByLl9pZCB8fCByLmlkO1xuICAgICAgICBpZiAoaWQpIHRoaXMuc2VsZWN0ZWRSb3dzLmFkZChpZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByLl9pZCB8fCByLmlkO1xuICAgICAgICBpZiAoaWQpIHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXRHcm91cENoZWNrZWRTdGF0ZShyb3c6IGFueSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICghcm93LmlzR3JvdXApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZmxhdHRlbkdyb3VwKHJvdyk7XG4gICAgbGV0IGNoZWNrZWRDb3VudCA9IDA7XG4gICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSBjaGVja2VkQ291bnQrKztcbiAgICB9KTtcbiAgICBpZiAoY2hlY2tlZENvdW50ID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNoZWNrZWRDb3VudCA9PT0gbGVhZlJvd3MubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q2VsbFRpdGxlKHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk7XG5cbiAgICBpZiAoIXRoaXMuaXNOZXN0ZWRWYWx1ZUFycmF5KHJvdywgY29sLmZpZWxkKSkge1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZSh2YWwsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbD8uaXNfYW1vdW50KSB7XG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gYDAuMDBgXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEN1cnJlbmN5LnRyYW5zZm9ybSh2YWwsIHRoaXMuY3VycmVuY3lGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWw/LnZhbHVlID8/XG4gICAgICAgIHZhbD8ubmFtZSA/P1xuICAgICAgICB2YWwgPz9cbiAgICAgICAgKGNvbC5pc19hbW91bnQgPyAnMCcgOiAnLScpXG4gICAgICApICsgJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3QgPSB2YWw/LlswXTtcblxuICAgIHJldHVybiAoXG4gICAgICBmaXJzdD8uZGVwYXJ0bWVudF9uYW1lID8/XG4gICAgICBmaXJzdD8ucm9sZU5hbWUgPz9cbiAgICAgIGZpcnN0Py5mdWxsX25hbWUgPz9cbiAgICAgIGZpcnN0Py52YWx1ZSA/P1xuICAgICAgZmlyc3Q/Lm5hbWUgPz9cbiAgICAgICctJ1xuICAgICk7XG4gIH1cblxuXG4gIGZpbmlzaEVkaXQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjZWxsIGVkaXRlZGRkZGRkZGRkZGRkZGRkOiAnLCBldmVudClcbiAgfVxuXG5cbiAgZ2V0RHluYW1pY1JpZ2h0KGNvbDogYW55LCBzZWN0aW9uOiBzdHJpbmcsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIpe1xuICAgIGlmKHNlY3Rpb24gPT0gJ3JpZ2h0JyAmJiB0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnM/Lmxlbmd0aCA9PSAxICYmIGNvbC53aWR0aCA8IDIwMCl7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1lbHNlIGlmKHNlY3Rpb24gPT0gJ3JpZ2h0Jyl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZihzZWN0aW9uID09ICdwcmV2aWV3Q2VudGVyQ29sdW1ucycgJiYgY29sSW5kZXggPT0gKHRoaXMucHJldmlld0NlbnRlckNvbHVtbnM/Lmxlbmd0aCAtIDEpICYmIGNvbC53aWR0aCA8IDIwMCl7XG4gICAgICByZXR1cm4gMjAwXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gY29sLndpZHRoIC0gNDU7XG4gICAgfVxuICB9XG5cbiAgYmx1cklucHV0KGV2ZW50OiBFdmVudCwgcm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaW5wdXQ/LmJsdXIoKTtcbiAgICB0aGlzLnNldEFjdGl2ZUNlbGwocm93LCBjb2wpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZ0tleSA9ICcnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG5nZXRWYWxpZEFjdGlvbnMoZWxlbWVudDogYW55KTogc3RyaW5nW10ge1xuICByZXR1cm4gdGhpcy5hY3Rpb25WYWxpZGF0b3IuZ2V0VmFsaWRBY3Rpb25zKFxuICAgIHRoaXMub3JpZ2luYWxBY3Rpb25zLCAvLyBBbHdheXMgcGFzcyBvcmlnaW5hbCB1bm1vZGlmaWVkIGFjdGlvbnNcbiAgICBlbGVtZW50LFxuICAgIHtcbiAgICAgIC8vIHVzZXJJZDogdGhpcy5pZCxcbiAgICAgIHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICBzaG93VW5MaW5rOiB0aGlzLnNob3dVbkxpbmssXG4gICAgICBwYWNrYWdlRGF0YTogdGhpcy5wYWNrYWdlRGF0YVxuICAgIH1cbiAgKTtcbn1cbnByaXZhdGUgaXNTdGF0dXNGaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWZpZWxkTmFtZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBsb3dlckZpZWxkID0gZmllbGROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBsb3dlckZpZWxkID09PSAnc3RhdHVzJyB8fCBcbiAgICAgICAgIGxvd2VyRmllbGQuaW5jbHVkZXMoJ3N0YXR1cycpIHx8IFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2F2YWlsc3RhdHVzJyB8fFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2FjY291bnRfc3RhdHVzJyB8fFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2lzX2N1c3RvbV9ncmFkZSc7XG59XG5cbi8qKlxuICogQ2FwaXRhbGl6ZXMgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gYSBzdHJpbmdcbiAqIEhhbmRsZXM6IHNwYWNlZCB3b3JkcywgY2FtZWxDYXNlLCBzbmFrZV9jYXNlLCBrZWJhYi1jYXNlLCBhbmQgY29tcG91bmQgd29yZHNcbiAqL1xucHJpdmF0ZSBjYXBpdGFsaXplU3RhdHVzKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5jYXBpdGFsaXplU3RhdHVzKHZhbHVlKTtcbn1cblxuXG4gIGdyaWRDb250ZXh0ID0ge1xuICAgIGFwcGx5RmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMuYXBwbHlGaWx0ZXJPbkNvbHVtbihjb2wpLFxuICAgIGNsZWFyRmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMucmVtb3ZlRmlsdGVyRnJvbUNvbHVtbihjb2wpXG4gIH07XG5cbiAgcHJpdmF0ZSBjbG9zZUFsbEZpbHRlck1lbnVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbHRlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9XG4gICAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuXG4gIGFwcGx5RmlsdGVyT25Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2wuc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbC5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbC50eXBlLFxuICAgICAgX2lkczogY29sLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICAgIHRoaXMuY29tbW9uU2V2aWNlLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgY29sLnF1ZXJ5KTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XG5cbiAgfVxuXG4gIHJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBlbXB0eVF1ZXJ5ID0ge1xuICAgICAgZmlyc3RfY29uZGl0aW9uOiBudWxsLFxuICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5jb21tb25TZXZpY2UucmVwbGFjZUNvbHVtblF1ZXJ5KHRoaXMuY29sdW1ucywgY29sLCBlbXB0eVF1ZXJ5KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5lbWl0RmlsdGVycygpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0ZWREYXRlKHZhbCA6IGFueSl7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZSh2YWwsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gIH1cblxuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTogdm9pZCB7XG4gIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gIH1cbiAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xufVxufSIsIjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMiBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdiBuYXYtdGFic1wiICpuZ0lmPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJuYXYtdGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09IHRhYlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwiMzUwXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNnbG9iYWxTZWFyY2hJbnB1dFxuICAgICAgICAgICpuZ0lmPVwiZW5hYmxlR2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzZweFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2gsIHRoZW4gcHJlc3MgRW50ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVTZWFyY2hcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uR2xvYmFsU2VhcmNoKClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcmlnaHQtdG9wLWFjdGlvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgICAqbmdJZj1cImJ1dHRvbj8uaGFzX3Blcm1pc3Npb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uLm5hbWUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYm9yZGVyIGJvcmRlci1wcmltYXJ5IGJ0bi1hY3RpdmUtcHJpbWFyeSBtZS0yIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBidXR0b24uaWNvbiArICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICBbY2xhc3MubXMtMF09XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICA+e3sgYnV0dG9uPy5uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFzaG93RmlsdGVyUm93XCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBhY3Rpb24tYnV0dG9ucy1yb3dcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbkZpbHRlcigpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIj5GaWx0ZXJzPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICMwMDIyZmY7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgNjAsIDI1NSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMTZweDtcbiAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLW5vbmVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWR2YW5jZS1maWx0ZXInKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWR2YW5jZS1maWx0ZXInXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3pvb20tY2hhcmdlLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHRvcC1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnc2V0dGluZycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICdzaG93LWhpZGUtY29sdW1ucydcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiB0b3AtaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NldHRpbmdzLTIuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiPlNldHRpbmc8L3NwYW4+XG4gICAgICAgIDwvYT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICdzZXR0aW5nJ1wiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTEgYWN0aW9ucy1kcm9wZG93bi1zZXR0aW5nXCJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudVwiPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBMYXlvdXQgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLWxheW91dCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3RhYmxlLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgVGFibGUgTGF5b3V0PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLXByZXNldHMnKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2xpc3QtZGV0YWlscy5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBQcmVzZXRzPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd1NpZGVNZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygnc2hvdy1oaWRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgQ29sdW1uczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGVkLXRleHRcIj57eyBjb2x1bW5zQ291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEZpbHRlciAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuRmlsdGVyKCk7IGFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIG10LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBGaWx0ZXJcbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBEb3dubG9hZCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdignY3N2JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kb3dubG9hZC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgQ1NWIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVFeHBvcnRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDc3YoJ3hsc3gnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBFeGNlbCBFeHBvcnRcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgJiBGb250IFNpemUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwYi0yIHB0LTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvbnRGYWltbHlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250RmFtaWxpZXNcIiBbdmFsdWVdPVwiZm9udFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmb250IH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBTaXplIC0tPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIGZvbnRTaXplc1wiIFt2YWx1ZV09XCJzaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNpemUgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtbGF5b3V0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVMYXlvdXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cydcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlUHJlc2V0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3Nob3ctaGlkZS1jb2x1bW5zJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2hvd0hpZGVDb2x1bW5zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1yb3dcIiAqbmdJZj1cInNob3dGdWxsU2NyZWVuQnV0dG9uXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCIhaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNaW5pbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXhwZW5kLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cImlzRnVsbFNjcmVlblwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IGV4cGVuZCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIlxuICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgZGF0YS1icy1wbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgIHRpdGxlPVwiTWF4aW1pc2VcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgbWluQXJyb3c6ICFpc0Z1bGxTY3JlZW4sIG1heEFycm93OiBpc0Z1bGxTY3JlZW4gfVwiXG4gICAgICAgICAgc3R5bGU9XCJ0cmFuc2l0aW9uOiBjb2xvciAwLjJzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL21pbmltaXplLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPCEtLSBFeGFtcGxlIHNpbmdsZSBkYW5nZXIgYnV0dG9uIC0tPlxuXG4gICAgICAgIDwhLS0gPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkLWZsZXggZ2FwLTIgYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2FjdGlvbnMnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBBY3Rpb25cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9WZWN0b3Iuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93XCI+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPkFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QW5vdGhlciBhY3Rpb248L2E+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNvbWV0aGluZyBlbHNlIGhlcmU8L2E+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5TZXBhcmF0ZWQgbGluazwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dGaWx0ZXJzICYmICFzaG93RmlsdGVyUm93XCJcbiAgICBjbGFzcz1cInRvcC1maWx0ZXItcm93IGJvcmRlci10b3AgcHktMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvcEZpbHRlclJvd0hlaWdodFwiXG4gID5cbiAgICA8IS0tIExFRlQgU0lERSAoRmlsdGVyIHRhZ3MgKyBGaWx0ZXIgYnV0dG9uKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgYWN0aXZlRmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRhZ3NcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnZmlsdGVyLWNvbHVtbnMnO1xuICAgICAgICAgICAgICBvcGVuRmlsdGVyKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGFjdGl2ZS1maWx0ZXJzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICAgICAgICBjb2w/LmZpZWxkID09IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5maWVsZCAmJlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gJiZcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09ICdmaWx0ZXItY29sdW1ucydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItdGFnIG10LTBcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi5zdmcnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlQ29sdW1uRmlsdGVyRnJvbUNvbHVtbihjb2wpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY3Jvc3MtcHJpbWFyeS5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjcm9zcy1zZWNvbmRhcnkgbXMtMiBtYi0xXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2ZpbHRlci1jb2x1bW5zJyAmJlxuICAgICAgICAgICAgICBjb2w/LmZpZWxkID09IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5maWVsZCAmJlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW5cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckNvbHVtbnM7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2wgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGaWx0ZXIgQnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImFkZC1maWx0ZXItYnV0dG9uLW1lbnVcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdmaWx0ZXItY29sdW1ucycpOyBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXV0ZWQtdGV4dCBhZGQtZmlsdGVyLWJ1dHRvbiBidXR0b24tZmlsdGVyXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiA3MHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3BsdXMuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm1lLTIgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIEZpbHRlclxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICdmaWx0ZXItY29sdW1ucycgJiYgIWlzQWN0aXZlRmlsdGVyT3BlblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckNvbHVtbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUklHSFQgU0lERSAoVXBkYXRlICsgUmVzZXQpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIChjbGljayk9XCJzYXZlUHJlc2V0KClcIlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlciBhbGwtZmlsdGVycy1yZXNldC1idXR0b25cIlxuICAgICAgICAqbmdJZj1cIiFjaGVja0ZpbHRlckNoYW5nZXNFZmZlY3QoKVwiXG4gICAgICA+XG4gICAgICAgIFVwZGF0ZSBWaWV3XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlciBhbGwtZmlsdGVycy1yZXNldC1idXR0b25cIlxuICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiBhY3RpdmVGaWx0ZXJlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiXG4gICAgICBzaG93RmlsdGVycyA/ICdjYWxjKDEwMCUgLSAnICsgdG9wRmlsdGVyUm93SGVpZ2h0ICsgJ3B4KScgOiAnMTAwJSdcbiAgICBcIlxuICAgIGNka0Ryb3BMaXN0R3JvdXBcbiAgICBjbGFzcz1cImRhdGEtZ3JpZC10YWJsZS13cmFwcGVyIG92ZXJmbG93LWhpZGRlblwiXG4gICAgI2RhdGFHcmlkQ29udGFpbmVyXG4gICAgW3N0eWxlLmZvbnRGYW1pbHldPVwiZm9udEZhaW1seVwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICBpZD1cImRhdGEtZ3JpZC1tYWluLWNvbnRhaW5lclwiXG4gID5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNob3dSb3dzR3JvdXBpbmdcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2x1bW5zXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgIHRvcEdyb3VwZWRCYWRnZXNCYWNrZ3JvdW5kQ29sb3IgfHwgaGVhZGVyQmFja2dyb3VuZENvbG9yXG4gICAgICBcIlxuICAgICAgY2RrRHJvcExpc3RcbiAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwiZW50ZXJUb1RvcFJvd0dyb3VwaW5nKCRldmVudClcIlxuICAgICAgKGNka0Ryb3BMaXN0RXhpdGVkKT1cImV4aXRlZEZyb21UaGVUb3BSb3coJGV2ZW50KVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcFRvcEdyb3VwKCRldmVudClcIlxuICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiY2FuRW50ZXJUb1Jvd3NHcm91cGluZ1wiXG4gICAgICBpZD1cInJvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lclwiXG4gICAgICBjbGFzcz1cImJvcmRlci1iZWxvdyBkLWZsZXggcHgtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cImhlYWRlclRleHRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiAhZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aFwiPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IGdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Hcm91cFJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgW2Nka0RyYWdMb2NrQXhpc109XCIneCdcIlxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBncm91cGVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRDb2x1bW5zLmxlbmd0aCA+IDEgJiYgaSAhPSBncm91cGVkQ29sdW1ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNoaWxkLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwiXG4gICAgICAgICdjYWxjKDEwMCUgLSAnICtcbiAgICAgICAgKHNob3dSb3dzR3JvdXBpbmdcbiAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCArIGZvb3RlclJvd0hlaWdodFxuICAgICAgICAgIDogZm9vdGVyUm93SGVpZ2h0KSArXG4gICAgICAgICdweCknXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgICAhc2hvd1NpZGVNZW51XG4gICAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgICAgOiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgID8gJ2NhbGMoMTAwJSAtIDI4MHB4KSdcbiAgICAgICAgICAgIDogJ2NhbGMoMTAwJSAtIDMwcHgpJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgdHJhbnNpdGlvbiBwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMFwiPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSBEYXRhIEdyaWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXItd3JhcHBlciB3LTEwMFwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJoZWFkZXJUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwiIWhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgTGVmdCBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIGxlZnQtcGlubmVkXCJcbiAgICAgICAgICAgICAgI2xlZnRQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTLk5vXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAqbmdJZj1cInNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNBbnlWaXNpYmxlQ29sdW1uXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlU3RhdGUoZGF0YVNldClcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZChkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbChkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICAgaWQ9XCJsZWZ0LXBpbm5lZC1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImxlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdsZWZ0JylcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJcbiAgICAgICAgICAgICAgICAgIG9uU29ydEdyb3VwKCRldmVudCwgJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxcHhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBsZWZ0UGlubmVkQ29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gY29sLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQ29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBDZW50ZXIgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciBjZW50ZXItc2Nyb2xsYWJsZVwiXG4gICAgICAgICAgICAgICNjZW50ZXJQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGlkPVwiY2VudGVyLXBpbm5lZC1oZWFkZXJcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJcbiAgICAgICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY2VudGVyQ29sdW1uc1wiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nICYmIGRyYWdnaW5nSW5Hcm91cEFyZWFcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJvbkRyb3BMaXN0RW50ZXIoJGV2ZW50LCAnY2VudGVyJylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld0NlbnRlckNvbHVtbnMnKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aF09XCJcbiAgICAgICAgICAgICAgICAnY2FsYygxMDAlIC0gJyArXG4gICAgICAgICAgICAgICAgKHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoICsgbGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCkgK1xuICAgICAgICAgICAgICAgICdweCknXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwZWRDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyMDBweFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICNjb2x1bW5zR3JvdXBlZEJveFxuICAgICAgICAgICAgICAgIGlkPVwiZ3JvdXBCb3hIZWFkZXJEaXZcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggdy0xMDAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93RmlsdGVyUm93ID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHMtM1wiPkdyb3VwPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgJ2dyb3VwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplR3JvdXBCb3goJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogLTJweFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMzBweDsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09PSAnQXNzZXRzJyB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrQ29sdW1uR3JvdXBpbmdTdGF0dXMoY29sKTtcbiAgICAgICAgICAgICAgICAgIGRyYWdTdGFydE9uR3JvdXAoY29sKTtcbiAgICAgICAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ZWQoY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkRyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKClcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgY2VudGVyQ29sdW1ucztcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdwcmV2aWV3Q2VudGVyQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdnaW5nSW5Hcm91cEFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZycpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUtY3Jvc3Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnY2VudGVyQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFpc091dHNpZGVDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkPy5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gY29sLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uaXNfZ3JvdXBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIFJpZ2h0IFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIGlkPVwicmlnaHQtcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgcmlnaHQtcGlubmVkXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIlxuICAgICAgICAgICAgICAgIG9uU29ydEdyb3VwKCRldmVudCwgJ3ByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdyaWdodCcpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgI3JpZ2h0UGlubmVkSGVhZGVyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtcGlubmVkLWhlYWRlciBkLWZsZXhcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMC4ycHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgcmlnaHRQaW5uZWRDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgcGlubmVkUmlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIERhdGEgR3JpZCBCb2R5IHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIiFkYXRhU2V0Py5sZW5ndGggJiYgIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3JlY29yZC1ub3QtZm91bmQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPjwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXY+Tm8gUmVjb3JkIEZvdW5kPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHctMTAwIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBsb2FkaW5nLW92ZXJsYXlcIlxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkaW5nIHx8IGRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcbiAgICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibG9hZGVyXCI+PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keS13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuXCJcbiAgICAgICAgICAgICNtYWluU2Nyb2xsXG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uTWFpblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJ2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIExFRlQgUElOTkVEIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICFncm91cGVkQ29sdW1ucy5sZW5ndGggPyBvcmlnaW5hbERhdGFTZXQubGVuZ3RoICogcm93SGVpZ2h0IDogMFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHkgbGVmdC1waW5uZWQtYm9keSB3LTEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW5cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwiaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudC1ib3JkZXItcmlnaHRdPVwiIWhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibGVmdFBpbm5lZEJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCJcblxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xlZnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENFTlRFUiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuY2xpZW50V2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSBjZW50ZXItc2Nyb2xsYWJsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlbjsgb3ZlcmZsb3cteDogYXV0b1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWSgnICsgdHJhbnNsYXRlWSArICdweCknXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICNjZW50ZXJTY3JvbGxhYmxlQm9keVxuICAgICAgICAgICAgICAgIChzY3JvbGwpPVwib25DZW50ZXJCb2R5U2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5ib3hTaGFkb3ddPVwiaGFzTGVmdFBpbm5lZENvbHVtbnMgPyBsZWZ0UGlubmVkQm94c2hhZG93OiAnbm9uZSdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdDZW50ZXJDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3Q2VudGVyQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUklHSFQgUElOTkVEIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJpZ2h0LXBpbm5lZC1ib2R5LXdyYXBwZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cImhhc1JpZ2h0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJcbiAgICAgICAgICAgICAgICBpc1Njcm9sbGJhclZpc2libGVcbiAgICAgICAgICAgICAgICAgID8gcmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxNVxuICAgICAgICAgICAgICAgICAgOiByaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHkgcmlnaHQtcGlubmVkLWJvZHkgdy0xMDAgaC0xMDBcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5ib3hTaGFkb3ddPVwiaGFzUmlnaHRQaW5uZWRDb2x1bW5zID8gcmlnaHRQaW5uZWRCb3hzaGFkb3c6ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJyaWdodFBpbm5lZEJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT1cInRvcDogYXV0bzsgbGVmdDogYXV0b1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZnVsbHNjcmVlbkltYWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gKGZvb3RlclJvd0hlaWdodCArIDEwMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZS1tb2RhbCBmdWxsLWltYWdlLW1vZGFsXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgICAgICAgICAgIGFsdD1cIkZ1bGxzY3JlZW4gSW1hZ2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRSb3dzLnNpemUgPiAwICYmIHNob3dUYXNrYmFyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0YXNrYmFyIHctMTAwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS5weF09XCIwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLXJvd3MtYWN0aW9uLWJhclwiIFtAc2xpZGVVcF0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3RlZC1jb3VudFwiPlxuICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRSb3dzLnNpemUgfX0gc2VsZWN0ZWQgb2ZcbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlnPy5wYWdpbmF0aW9uUGFyYW1zPy50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgVG90YWxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0YXNrYmFyQWN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24/Lmhhc19wZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWJ0biB2ZXJpZmllZCBidG4ge3sgYWN0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblZlcmlmeUNsaWNrKGFjdGlvbj8uYWN0aW9uTmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGFjdGlvbj8uYWN0aW9uTmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2JhckFjdGlvbnMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9PSB0YXNrYmFyQWN0aW9ucy5sZW5ndGggLSAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tiYXJBY3Rpb25zW2kgKyAxXT8uaGFzX3Blcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+fDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uU3RhdGUodGFibGVUeXBlKTtzZWxlY3RlZFJvd3MuY2xlYXIoKTtcIiBjbGFzcz1cImNsZWFyLWJ0biBtcy0yIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS14LWNpcmNsZVwiPjwvaT4gQ2xlYXIgU2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFZlcnRpY2FsIEZha2Ugc2Nyb2xsIEJhciAtLT5cbiAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25NYWluRmFrZVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1zY3JvbGxiYXIgZmFrZS1zY3JvbGxiYXItdmVydGljYWwgZC1ub25lXCJcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJ2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiXG4gICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJib2R5V3JhcHBlckhlaWdodFwiXG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgICAgICAgICAgIHdpZHRoOiAxN3B4O1xuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmMWYyZjM7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0ICogZGF0YVNldExlbmd0aFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBIb3JpemludGFsIEZha2UgU2Nyb2xsYmFycyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAqbmdJZj1cImhhc1Njcm9sbCAmJiAhc2hvdWxkUmVzdG9yZVNjcm9sbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1ob3JpemludGFsLXNjcm9sbGJhclwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy14OiBzY3JvbGxcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25DZW50ZXJCb2R5U2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNob3JpemludGFsRmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoIC0gMTBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1ob3JpemludGFsLXNjcm9sbGJhclwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteDogc2Nyb2xsXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2lkZSBNZW51IEltcGxlbWVudGVkIEhlcmUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2hvd1NpZGVNZW51XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInNpZGVNZW51VmlzaWJsZSA/IDI4MCA6IDMwXCJcbiAgICAgICAgY2xhc3M9XCJyaWdodC1tZW51IGgtMTAwXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJzaWRlbWVudUJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDMwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItc3RhcnRdPVwic2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaWRlTWVudSgnY29scycpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJnLWZmZl09XCJcbiAgICAgICAgICAgICAgICBjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdjb2xzJyAmJiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbnMtYnV0dG9uIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudWUtdGV4dFwiPkNvbHVtbnM8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaWRlTWVudSgnZmlsdHJzJylcIlxuICAgICAgICAgICAgICBbY2xhc3MuYmctZmZmXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycycgJiYgc2lkZU1lbnVWaXNpYmxlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwiXG4gICAgICAgICAgICAgICAgc2lkZU1lbnVWaXNpYmxlICYmIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW5zLWJ1dHRvbiBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnVlLXRleHRcIj5GaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogc2lkZU1lbnVWaXNpYmxlID8gJzI1MHB4JyA6ICcnIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdjb2xzJyAmJiBzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblBhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIEl0ZW1zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tcGFuZWwtYm9keSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aHIgLz5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnUtcm93LWdyb3Vwc1wiIHN0eWxlPVwiaGVpZ2h0OiAzMCVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlTWVudVJvd0dyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdmaWx0cnMnICYmIHNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZUZpbHRlcnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImZvb3RlclJvd0hlaWdodFwiXG4gICAgICBjbGFzcz1cImJvcmRlci10b3BcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJmb290ZXJSb3dCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uQ29uZmlnXCJcbiAgICA+XG4gICAgICA8IS0tIFJvd3M6IDxzcGFuIGNsYXNzPVwiZnctNTAwIG1zLTFcIj57eyBkYXRhU2V0Lmxlbmd0aCB9fTwvc3Bhbj4gLS0+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZm9vdGVyUm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmcucHhdPVwiZm9vdGVyUGFkZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXNpemVcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZ2luYXRpb25Db25maWcubGltaXRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInNpemVcIj5cbiAgICAgICAgICAgICAge3sgc2l6ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj4gcGVyIHBhZ2UgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvXCI+XG4gICAgICAgICAgUmVzdWx0czpcbiAgICAgICAgICB7eyAocGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0ICsgMSB9fS17e1xuICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5wYWdlICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdCA8XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0c1xuICAgICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcucGFnZSAqIHBhZ2luYXRpb25Db25maWcubGltaXRcbiAgICAgICAgICAgICAgOiBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0c1xuICAgICAgICAgIH19XG4gICAgICAgICAgb2ZcbiAgICAgICAgICB7eyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1idXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IDFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKAuVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZSBvZiB2aXNpYmxlUGFnZXNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlICE9PSAnLi4uJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdlKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicGFnZSA9PT0gcGFnaW5hdGlvbkNvbmZpZy5wYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhZ2UgPT09ICcuLi4nXCI+Li4uPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb25Db25maWcucGFnZSArIDEpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDigLpcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gSGVhZGVyIENlbGwgVGVtcGxhdGUgLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG48bmctdGVtcGxhdGVcbiAgI2hlYWRlckNlbGxcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtY29sdW1uSW5kZXg9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9ucz1cInNlY3Rpb25cIlxuICBsZXQtY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyPVwiY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyXCJcbj5cbiAgPGRpdj5cbiAgICA8IS0tIEdyb3VwIEhlYWRlciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGggPiAwOyBlbHNlIGZsYXRIZWFkZXJcIj5cbiAgICAgIDxkaXYgY2RrRHJvcGxpc3RHcm91cCBjbGFzcz1cImdyb3VwLWNvbHVtbi13cmFwcGVyXCI+XG4gICAgICAgIDwhLS0gUGFyZW50IEhlYWRlciAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkVGhlR3JvdXBIZWFkZXJTaG93KGNvbClcIlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZ3JvdXAtaGVhZGVyXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbc3R5bGUuZ3JpZENvbHVtbl09XCInc3BhbiAnICsgY29sLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgIFtjbGFzcy5qdXN0aWZ5LWNvbnRlbnQtZW5kXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAxXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLWNvbnRlbnRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgW2NsYXNzLm1zLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNvbC5jaGlsZHJlbilcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblJlc2l6ZUdyb3VwKCRldmVudCwgY29sLCBwaW5uZWRSaWdodClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2hpbGQgSGVhZGVycyBhbmQgRmlsdGVycyAtLT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY29sLmNoaWxkcmVuXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25DaGlsZERyb3BsaXN0U29ydGVkKCRldmVudCwgc2VjdGlvbnMpXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uQ2hpbGREcm9wbGlzdERyb3BlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY2hpbGRcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBDaGlsZCBIZWFkZXIgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQuaXNfdmlzaWJsZSAmJiAhY2hpbGRbJ2lzUm93R3JvdXBlZCddXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxscyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNoaWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWQtb24tdGV4dF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGFibGUtaGVhZGVyXT1cImNoaWxkPy5pc19lZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyb25UaHJlZURvdHNDbGljayhjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGQuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hpbGQucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHJlZS1kb3RzIHAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtKCFjaGlsZD8ucGlubmVkID8gY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnQgOiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2hvd0ZpbHRlclJvdyB8fCBzaG93Q29sdW1uc0dyb3VwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDIgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHQgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ29sSW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVzaXplQ29sdW1uKCRldmVudCwgY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gRmlsdGVyIENlbGwgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY2hpbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogM1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlsZC5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJvbkZpbHRlckNoYW5nZShjaGlsZCk7IGFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNoaWxkPy50eXBlID09ICdpbWFnZScgfHwgY2hpbGQ/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtc2VhcmNoLWlucHV0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy50eXBlID09ICdkcm9wZG93bicgfHwgY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjaGlsZD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRmlsdGVyKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJjaGlsZD8udHlwZSA9PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjNzQ4NmZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAgMTYzIDIzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3BhblxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZpbHRlci1yb3ctZmlsdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGw/LmZpZWxkID09IGNoaWxkPy5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogOTlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZD8ucGlubmVkID8gMCA6IC1jZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNZW51OyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhZHJhZ2dpbmdJbkdyb3VwQXJlYSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2hpbGQuaXNfZ3JvdXBhYmxlICYmIGRyYWdnaW5nSW5Hcm91cEFyZWEpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiAhY2hpbGQuaXNfZ3JvdXBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Jhbi5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2hpbGQuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY2hpbGRIZWFkZXJQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiBjaGlsZD8uaXNfZ3JvdXBhYmxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcGlubmVkUmlnaHQ6IHBpbm5lZFJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBGbGF0IEhlYWRlciB8fCBTaW5nbGUgSGVhZGVyIENlbGwtLT5cbiAgICA8bmctdGVtcGxhdGUgI2ZsYXRIZWFkZXI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZ3JvdXAtY29sdW1uLXdyYXBwZXJcIlxuICAgICAgICAqbmdJZj1cImNvbC5pc192aXNpYmxlICYmICFjb2xbJ2lzUm93R3JvdXBlZCddXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBGdWxsLWhlaWdodCBIZWFkZXIgQ2VsbCAoc3BhbnMgMiByb3dzIHZpc3VhbGx5KSAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgb25lLXJvdy1oZWFkZXItY2VsbHNcIlxuICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJcbiAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDEgLyBzcGFuIDJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmVkaXRhYmxlLWhlYWRlcl09XCJjb2w/LmlzX2VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZC1vbi10ZXh0XT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNvbClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZS0yXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwiY29sLm9yZGVyX2J5XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/LmZpZWxkID09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBBc2NlbmRpbmcgU29ydCBJY29uIC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc29ydC1hc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzb3J0RGVzYyhjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYydcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBEZXNjZW5kaW5nIFNvcnQgSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWRlc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzb3J0QXNjKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY29sXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAtNTAlOyB6LWluZGV4OiAyMVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgLSghY29sPy5waW5uZWQgPyBjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdCA6IDApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuXG4gICAgICAgICAgICAgICAgICAgICAgPyBzaG93RmlsdGVyUm93IHx8IHNob3dDb2x1bW5zR3JvdXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMiAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodCAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ29sSW5kZXg6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LTEwMF09XCJjb2wucGlubmVkID09ICdyaWdodCdcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblJlc2l6ZUNvbHVtbigkZXZlbnQsIGNvbClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRmlsdGVyIENlbGwgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGNvbClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgICAgIGNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGVJbkZpbHRlclJvd1NlYXJjaCgkZXZlbnQsIGNvbClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXJGcm9tRGlzYWJsZWRTZWFyY2hlZElucHV0KGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRmlsdGVyKGNvbClcIlxuICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkXT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiY29sPy50eXBlID09ICdpbWFnZSdcIlxuICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2wpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogN3B4O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICM3NDg2ZmY7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAgMTYzIDIzMyk7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICAgICAgPjwvc3BhblxuICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZpbHRlci1yb3ctZmlsdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJDZWxsID09PSBjb2xcIlxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OVwiXG4gICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2w/LnBpbm5lZCA/IDAgOiAtY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNZW51OyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIEJvZHkgQ2VsbCBUZW1wbGF0ZSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG48bmctdGVtcGxhdGVcbiAgI3Jvd0NlbGxcbiAgbGV0LXJvd1xuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtaXNFdmVuPVwiaXNFdmVuXCJcbiAgbGV0LWlzT2RkPVwiaXNPZGRcIlxuICBsZXQtaXNMZWZ0U2VjdGlvbj1cImlzTGVmdFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgbGV0LWlzVG90YWxSb3c9XCJpc1RvdGFsUm93XCJcbj5cbiAgPCEtLSBDaGVjayBpZiByb3cgaXMgYSBncm91cCAtLT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBSb3dUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgZGVwdGg6IDAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNncm91cFJvd1RlbXBsYXRlIGxldC1yb3cgbGV0LWRlcHRoPVwiZGVwdGhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmlzR3JvdXA7IGVsc2UgcmVndWxhclJvd1wiPlxuICAgICAgPCEtLSBHcm91cCBIZWFkZXIgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLXJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cInNlY3Rpb24gIT09ICdjZW50ZXInXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgIHNlY3Rpb24gPT09ICdjZW50ZXInXG4gICAgICAgICAgICA/IChjZW50ZXJTY3JvbGxhYmxlQm9keT8uc2Nyb2xsV2lkdGggPz8gMCkgKyAncHgnXG4gICAgICAgICAgICA6ICcxMDAlJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzZWN0aW9uID09ICdsZWZ0J1wiXG4gICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXhcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMVwiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VyaWFsTnVtYmVyXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDUwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMTAwIGJvcmRlci1yaWdodCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHBlLTIgcy1ub1wiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXG4gICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93LXJpZ2h0LnN2ZyksIGF1dG8nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJvd01vdXNlRG93bihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJvblJvd01vdXNlT3Zlcihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZ2V0U3RhcnRJbmRleCgpICsgKHJvdy5fX3ZpcnR1YWxJbmRleCAtIDEpIHx8IFwiXCIgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA1MHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwIGJvcmRlci1yaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgICAgW2NsYXNzLmxlZnQtc2VsZWN0aW9uLWJvcmRlcl09XCJcbiAgICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjaGVja2JveGVzQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHhcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRHcm91cENoZWNrZWRTdGF0ZShyb3cpID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93KSA9PT0gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RHcm91cFJvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzZWN0aW9uID09ICdjZW50ZXInXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHMtMiBoLTEwMCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwiZGVwdGggPiAwID8gZGVwdGggKiAzMCA6IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZChyb3cpXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gYWxpZ24taXRlbXMtY2VudGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHJvdy5pc0V4cGFuZFxuICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmcgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZChyb3cpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICB7eyByb3cuZ3JvdXBWYWx1ZSB9fSAoe3sgY291bnRMZWFmUm93cyhyb3cpIH19KVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFJlY3Vyc2l2ZSBDaGlsZHJlbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jaGlsZHJlblwiICpuZ0lmPVwicm93LmlzRXhwYW5kXCIgW0BzbGlkZVRvZ2dsZV0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygcm93LmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkLmlzR3JvdXA7IGVsc2UgZGF0YVJvd1wiPlxuICAgICAgICAgICAgPCEtLSBSZWN1cnNpdmUgY2FsbCBmb3IgbmVzdGVkIGdyb3VwIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGdyb3VwUm93VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoaWxkLCBkZXB0aDogZGVwdGggKyAxIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YVJvdz5cbiAgICAgICAgICAgIDwhLS0gUmVndWxhciBkYXRhIHJvdyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgaXNFdmVuOiBpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgIGlzT2RkOiBpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgIGlzTGVmdDogaXNMZWZ0U2VjdGlvbixcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBpc1RvdGFsUm93XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBSZWd1bGFyIHJvdyAobm90IGEgZ3JvdXApIC0tPlxuICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJSb3c+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAzMHB4OyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNlY3Rpb24gPT0gJ2NlbnRlcicgJiYgKGdyaWRUeXBlID09PSAnQXNzZXRzJyB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJylcbiAgICAgICAgXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZXRhaWxSb3dFeHBhbmQocm93KVwiXG4gICAgICAgICAgKm5nSWY9XCJyb3c/LmRldGFpbD8ucmVzdWx0Py5sZW5ndGggfHwgZ3JpZFR5cGUgPT09ICdUYXNrcydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBpc0RldGFpbHNFeHBhbmRlZChyb3cpXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIlxuICAgICAgICAgIHNlY3Rpb24gPT0gJ2NlbnRlcicgJiYgZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA/IGdyb3VwQm94UGFkZGluZyA6IDBcbiAgICAgICAgXCJcbiAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1yb3cgaC0xMDBcIlxuICAgICAgICBbY2xhc3MuZXZlbi1yb3ddPVwiaXNFdmVuXCJcbiAgICAgICAgW2NsYXNzLm9kZC1yb3ddPVwiaXNPZGRcIlxuICAgICAgICBbY2xhc3MuaG92ZXJlZC1yb3ddPVwiaG92ZXJlZFJvd0lkID09PSAocm93Ll9pZCB8fCByb3cuaWQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Sb3dIb3Zlcihyb3cpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dMZWF2ZSgpXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1yb3dcIlxuICAgICAgICBbY2xhc3MuZXZlbi1yb3ddPVwiaXNFdmVuXCJcbiAgICAgICAgW2NsYXNzLm9kZC1yb3ddPVwiaXNPZGRcIlxuICAgICAgICBbY2xhc3MuaG92ZXJlZC1yb3ddPVwiaG92ZXJlZFJvd0lkID09PSAocm93Ll9pZCB8fCByb3cuaWQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Sb3dIb3Zlcihyb3cpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dMZWF2ZSgpXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwganVzdGlmeS1jb250ZW50LWVuZCBwZS0yIHMtbm9cIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgKm5nSWY9XCJpc0xlZnRTZWN0aW9uICYmIHNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXG4gICAgICAgICAgICAndXJsKCcgK1xuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93LXJpZ2h0LnN2ZyksIGF1dG8nXG4gICAgICAgICAgXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUm93TW91c2VEb3duKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJvblJvd01vdXNlT3Zlcihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjaGVja2JveGVzQ29sb3JcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0U3RhcnRJbmRleCgpICsgKHJvdy5fX3ZpcnR1YWxJbmRleCAtIDEpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgICAgICA/IHNlbGVjdGVkUm93c0JhY2tncm91bmRDb2xvclxuICAgICAgICAgICAgICA6IGNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsXCJcbiAgICAgICAgICAqbmdJZj1cImlzTGVmdFNlY3Rpb24gJiYgc2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgIFtjbGFzcy5sZWZ0LXNlbGVjdGlvbi1ib3JkZXJdPVwiXG4gICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMVwiXG4gICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdylcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUmVuZGVyIGFsbCBjb2x1bW5zIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnM7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGQ7XG4gICAgICAgICAgICBsZXQgY29sSW5kZXggPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGggPiAwOyBlbHNlIGZsYXRDb2x1bW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGQ7XG4gICAgICAgICAgICAgICAgbGV0IHN1YkNvbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkPy5pc192aXNpYmxlICYmICFjaGlsZD8uaXNSb3dHcm91cGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sOiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIHN1YkNvbEluZGV4OiBzdWJDb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZsYXRDb2x1bW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5pc192aXNpYmxlICYmICFjb2w/LmlzUm93R3JvdXBlZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ViQ29sSW5kZXg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgW0BzbGlkZVRvZ2dsZV1cbiAgICAgICpuZ0lmPVwic2VjdGlvbiA9PT0gJ2xlZnQnICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlsc1wiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDM1MHB4OyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaGFzSG9yaXpvbnRhbFNjcm9sbCA/IDMzOSA6IDM0MVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGxlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAnY2VudGVyJyAmJiBpc0RldGFpbHNFeHBhbmRlZChyb3cpXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWRldGFpbHMgY2VudGVyLXNlY3Rpb25cIlxuICAgICAgc3R5bGU9XCJcbiAgICAgICAgbWF4LWhlaWdodDogMzUwcHg7XG4gICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgICAgXCJcbiAgICAgICNuZXN0ZWRUYWJsZVxuICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICBoYXNSaWdodFBpbm5lZENvbHVtbnNcbiAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgIDogaGFzVmVydGljYWxTY3JvbGxcbiAgICAgICAgICA/ICdjYWxjKDEwMCUgLSAxMnB4KSdcbiAgICAgICAgICA6ICcxMDAlJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibmVzdGVkVGFibGVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZFR5cGUgPT0gJ1Rhc2tzJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHRhc2tNYW5hZ2VtZW50VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7IHRhc2tEZXRhaWxzOiByb3cgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgW0BzbGlkZVRvZ2dsZV1cbiAgICAgICpuZ0lmPVwic2VjdGlvbiA9PT0gJ3JpZ2h0JyAmJiBpc0RldGFpbHNFeHBhbmRlZChyb3cpXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWRldGFpbHNcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzNTBweDsgb3ZlcmZsb3c6IGhpZGRlblwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImhhc0hvcml6b250YWxTY3JvbGwgPyAzMzkgOiAzNDFcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlcjtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBBY3R1YWwgQ2VsbCBpcyBIZXJlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNjZWxsVGVtcGxhdGVcbiAgbGV0LWNvbD1cImNvbFwiXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtc3ViQ29sSW5kZXg9XCJzdWJDb2xJbmRleFwiXG4gIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgbGV0LWNvbEluZGV4PVwiY29sSW5kZXhcIlxuICBsZXQtaXNUb3RhbFJvdz1cImlzVG90YWxSb3dcIlxuPlxuICA8ZGl2XG4gICAgI2NlbGxDb250YWluZXJcbiAgICAoY2xpY2spPVwiXG4gICAgICBlZGl0aW5nS2V5ID0gJyc7IHNldEFjdGl2ZUNlbGwocm93LCBjb2wpOyBjb2xsYXBzZUFsbEV4cGFuZGVkQ2VsbHMoKVxuICAgIFwiXG4gICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiYm9keUZvbnRXZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBjbGFzcz1cImNlbGwgb3ZlcmZsb3ctdmlzaWJsZSBwb3NpdGlvbi1yZWxhdGl2ZSBkYXRhLWdyaWQtY2VsbFwiXG4gICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5hY3RpdmUtY2VsbF09XCJcbiAgICAgIGlzQWN0aXZlQ2VsbChyb3csIGNvbCkgJiYgIWlzRWRpdGluZyhyb3csIGNvbCkgJiYgc2VsZWN0ZWRLZXlzLnNpemUgPT0gMVxuICAgIFwiXG4gICAgKGRibGNsaWNrKT1cIlxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbmFibGVFZGl0KHJvdywgY29sLCBmYWxzZSwgY2VsbENvbnRhaW5lcilcbiAgICBcIlxuICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdz8uX192aXJ0dWFsSW5kZXhcIlxuICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdz8uX192aXJ0dWFsSW5kZXhcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBlbmFibGVFZGl0KHJvdywgY29sKVwiXG4gICAgKG1vdXNlZG93bik9XCJcbiAgICAgIHN0YXJ0U2VsZWN0aW9uKFxuICAgICAgICByb3cuX192aXJ0dWFsSW5kZXgsXG4gICAgICAgIGNvbEluZGV4LFxuICAgICAgICBzdWJDb2xJbmRleCA/PyAwLFxuICAgICAgICBjb2wuZmllbGQsXG4gICAgICAgICRldmVudCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICBleHRlbmRTZWxlY3Rpb24oXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgJGV2ZW50LFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICAobW91c2V1cCk9XCJlbmRTZWxlY3Rpb24oKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwiXG4gICAgICBpc1NlbGVjdGVkKFxuICAgICAgICByb3cuX192aXJ0dWFsSW5kZXgsXG4gICAgICAgIGNvbEluZGV4LFxuICAgICAgICBzdWJDb2xJbmRleCA/PyAwLFxuICAgICAgICBjb2wuZmllbGQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtYm9yZGVyXT1cIlxuICAgICAgaXNUb3BCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLWJvcmRlcl09XCJcbiAgICAgIGlzQm90dG9tQm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmxlZnQtYm9yZGVyXT1cIlxuICAgICAgaXNMZWZ0Qm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLnJpZ2h0LWJvcmRlcl09XCJcbiAgICAgIGlzUmlnaHRCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLWxlZnQtY29ybmVyXT1cIlxuICAgICAgaXNUb3BMZWZ0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1yaWdodC1jb3JuZXJdPVwiXG4gICAgICBpc1RvcFJpZ2h0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1sZWZ0LWNvcm5lcl09XCJcbiAgICAgIGlzQm90dG9tTGVmdENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tcmlnaHQtY29ybmVyXT1cIlxuICAgICAgaXNCb3R0b21SaWdodENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICA+XG4gICAgPCEtLSAgKG1vdXNlZG93bik9XCJzdGFydFNlbGVjdGlvbihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQsICRldmVudClcIlxuICAobW91c2VlbnRlcik9XCJleHRlbmRTZWxlY3Rpb24ocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXggPz8gMCwgY29sLmZpZWxkLCAkZXZlbnQpXCJcbiAgKG1vdXNldXApPVwiZW5kU2VsZWN0aW9uKClcIlxuICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc1NlbGVjdGVkKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsICBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQpXCIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsXCJcbiAgICAgIFtjbGFzcy5hY3RpdmUtZm9yLWVkaXRpbmddPVwiXG4gICAgICAgIGlzRWRpdGluZyhyb3csIGNvbCkgJiZcbiAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA8PSA1MCB8fCBjb2wudHlwZSA9PSAnaW1hZ2UnKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRWRpdGluZyhyb3csIGNvbCkgJiZcbiAgICAgICAgICAgIChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGNvbC50eXBlID09ICdpbWFnZScgfHxcbiAgICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwICYmXG4gICAgICAgICAgICAgICAgIWV4cGFuZGVkQ2VsbHMuc2l6ZSkpO1xuICAgICAgICAgIGVsc2Ugdmlld01vZGVcbiAgICAgICAgXCJcbiAgICAgID5cblxuICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2VsbEVkaXRvcjsgZWxzZSBidWlsdEluRWRpdG9yc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW2NlbGxFZGl0b3JdPVwiY29sLmNlbGxFZGl0b3JcIlxuICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2NvbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICBbY2VsbFZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgKGVkaXRvckV2ZW50KT1cImZpbmlzaEVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYnVpbHRJbkVkaXRvcnM+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbD8udHlwZVwiPlxuICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIlxuICAgICAgICAgICAgI2RhdGVJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGRhdGVJbnB1dClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZGF0ZUlucHV0LmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgZGF0ZUlucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gTnVtYmVyIElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAjbnVtYmVySW5wdXQ9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICNudW1iZXJSZWZcbiAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgbnVtYmVySW5wdXQpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogbnVtYmVySW5wdXQuaW52YWxpZCB8fCAhaXNWYWx1ZVZhbGlkKHJvdywgY29sLCBudW1iZXJJbnB1dClcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIERhdGUgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDhcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdNb2RlbFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IGRhdGVJbnB1dC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGRhdGVJbnB1dClcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIEltYWdlIFVwbG9hZCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgICBbc3JjXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA0cHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPCEtLSBuZy1zZWxlY3QgbGlrZSBkcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIHctMTAwXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHRleHQtc3RhcnQgdy0xMDAgdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+IFNlbGVjdCBvcHRpb25zLi4uIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSBlZGl0aW5nLWRyb3Bkb3duLXNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbkRyb3Bkb3duU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjM1XCIgXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8IGZpbHRlcjogZWRpdGluRHJvcGRvd25TZWFyY2ggOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvbj8udmFsdWUgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgb3B0aW9uLCB0cnVlKTsgZWRpdGluZ0tleSA9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbC5maWVsZCArICctJyArIChvcHRpb24udmFsdWUgfHwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gbm8gZmlsdGVyZWQgcmVzdWx0cyAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEZvciBBcnJheSB0eXBlIHZhbHVlcyAtLT5cblxuICAgICAgICAgIDwhLS0gTVVMVEkgU0VMRUNUIChBUlJBWSkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biB3LTEwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BcnJheUJsdXIocm93LCBjb2wpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbW1pdEFycmF5KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSB0ZXh0LXN0YXJ0IHctMTAwIHRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBcnJheVRlbXAocm93LCBjb2wpLmxlbmd0aDsgZWxzZSBhcnJheVBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5QXJyYXlMYWJlbHMocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FycmF5UGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IG9wdGlvbnMuLi5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCIgW2NsYXNzLmludmlzaWJsZV09XCIhbWVudVJlYWR5XCIgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPiA1XCIgY2xhc3M9XCJweC0yIHB5LTEgYXJyYXktc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5Ecm9wZG93blNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzVcIiBzdHlsZT1cImhlaWdodDogMTIwcHhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfCBmaWx0ZXI6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbS0wIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQXJyYXlTZWxlY3RlZChyb3csIGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBcnJheVRlbXAocm93LCBjb2wsIG9wdGlvbik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY29tbWl0QXJyYXkocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IG1heC13aWR0aDogMTZweDsgbWF4LWhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gZmlsdGVyZWQgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICNlbWFpbE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjZW1haWxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgcGF0dGVybj1cIl5bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSRcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGVtYWlsTW9kZWwpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZW1haWxNb2RlbC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGVtYWlsTW9kZWwpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gRGVmYXVsdCBmYWxsYmFjayAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjdGV4dElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgdGV4dE1vZGVsKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXNwbGF5IG1vZGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZpZXdNb2RlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzZXMoY29sLCBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRmllbGQgaWNvbiAoZm9yIFRhc2tzIGdyaWQpIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdUYXNrcycgJiYgaWNvbk1hcFtjb2wuZmllbGRdICYmICFpc1RvdGFsUm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1lLTJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiaWNvbk1hcFtjb2wuZmllbGRdKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSDinIUgQ3VzdG9tIGNlbGwgcmVuZGVyZXIgc3VwcG9ydCAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNlbGxSZW5kZXJlciAmJiAhaXNUb3RhbFJvdzsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbY2VsbFJlbmRlckluaXRdPVwiY29sLmNlbGxSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2w/LmZpZWxkKVwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0g8J+nviBEZWZhdWx0IHRleHQtYmFzZWQgY2VsbCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRDZWxsVGl0bGUocm93LCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgY2VsbCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgIGNvbD8uZmllbGQgIT0gJ2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgY29sPy5maWVsZCAhPSAnaW52b2ljZS5pbnZvaWNlX2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgIWlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7Z2V0Q2VsbFRpdGxlKHJvdywgY29sKX19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gVG90YWwgcm93IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb3RhbFJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbnZvaWNlIEltYWdlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmZpZWxkID09ICdpbnZvaWNlLmludm9pY2VfaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHpvb206IDAuN1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICcuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbWFnZSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZScgJiYgIWlzVG90YWxSb3dcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3c6IHJvdywgY29sOiBjb2wgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKCFjb2w/LmNlbGxSZW5kZXJlciAmJiBzaG93Q2VsbERldGFpbHNCb3ggJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDUwICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJykgfHxcbiAgICAgICAgICAgICAgKGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkgJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBpc0V4cGFuZGVkKHJvdywgY29sKVxuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbCwgY29sdW1ucywgZmFsc2UpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGljb24gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kZWQgdGV4dCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgZXhwYW5kZWQtYm94XCJcbiAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWQocm93LCBjb2wpXCJcbiAgICAgICAgICBbc3R5bGUuekluZGV4XT1cImdldFpJbmRleChyb3csIGNvbClcIlxuICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyBsZWZ0OiAwXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCIocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgKGNvbC5pZCB8fCBjb2wuX2lkKVwiXG4gICAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhc2hvd0RldGFpbHNCb3hcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgZnVsbFRleHRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEhlYWRlcnMgQWN0aW9uIExpc3QgT24gY2xpY2tpbmcgdGhyZWUgZG90cyAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNjb2x1bW5NZW51XG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNOZXN0ZWRUYWJsZT1cImlzTmVzdGVkVGFibGVcIlxuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiXG4gIGxldC1jaGlsZENvbEluZGV4PVwiY2hpbGRDb2xJbmRleFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbi1tZW51IHRocmVlLWRvdHMtY29sLW1lbnVcIlxuICAgIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiaXNNZW51ZUhpZGRlblwiXG4gICAgKm5nSWY9XCJhY3RpdmVDb2wgJiYgIWlzVGhyZWVEb3RzRmlsdGVyT3BlblwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICA+XG4gICAgPCEtLSBTb3J0IEFzY2VuZGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJlbG93IHBiLTJcIiBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cIiFjb2wuaXNfc29ydGFibGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dCBmcy03XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTJweFwiPlNvcnQ8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0FzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdkZXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy11cC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgU29ydCBBc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNvcnQgRGVzY2VuZGluZyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93RGVzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwic29ydERlc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1kb3duLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBTb3J0IERlc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc29ydGluZ0NvbmZpZz8uZmllbGQgPT09IGNvbC5maWVsZCAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYycgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNvcnQoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWNvdW50ZXJjbG9ja3dpc2Uuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFJlc2V0IFNvcnRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvdyB0aHJlZS1kb3RzLWZpbHRlclwiIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiY29sPy50eXBlID09ICdpbWFnZScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dGaWx0ZXJcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW0gdGhyZWUtZG90cy1maWx0ZXJcIlxuICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgRmlsdGVyXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlZC10ZXh0IGZzLTdcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMnB4XCI+UGluPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5sZWZ0ICYmIGNvbD8ucGlubmVkICE9PSAnbGVmdCdcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBMZWZ0XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5yaWdodCAmJiBjb2w/LnBpbm5lZCAhPT0gJ3JpZ2h0J1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1yaWdodC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBSaWdodFxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9sYXlvdXQtdGhyZWUtY29sdW1ucy5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+VW5waW5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXV0b3NpemVUaGlzQ29sdW1uXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oYWN0aXZlQ29sKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtZXhwYW5kLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBBdXRvc2l6ZSBUaGlzIENvbHVtblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdXRvc2l6ZSBBbGwgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBdXRvc2l6ZUFsbENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtYW5nbGUtZXhwYW5kLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+QXV0b3NpemUgQWxsIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gR3JvdXAgQnkgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93Um93c0dyb3VwaW5nXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiZ3JvdXBCeShhY3RpdmVDb2wpXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiIWNvbC5pc19ncm91cGFibGVcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGlhZ3JhbS0zLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBHcm91cCBieSB7eyBjb2wuaGVhZGVyIH19XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENob29zZSBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0Nob3NlQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImNob29zZUNvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzZXQgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dSZXNldENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1jb3VudGVyY2xvY2t3aXNlLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+UmVzZXQgQ29sdW1uc1xuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNUaHJlZURvdHNGaWx0ZXJPcGVuICYmIGNvbD8uaXNfc2VhcmNoX2FibGVcIlxuICAgIGNsYXNzPVwidGhyZWUtZG90cy1jb2wtbWVudSBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdldER5bmFtaWNSaWdodChjb2wsIHNlY3Rpb24sIGNvbHVtbkluZGV4LCBjaGlsZENvbEluZGV4KVwiXG4gICAgW2NsYXNzLnZpc3VhbGx5LWhpZGRlbl09XCJpc01lbnVlSGlkZGVuXCJcbiAgPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5maWx0ZXJSZW5kZXJlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItbWVudS1jb250YWluZXIgZmlsdGVyLW1lbnUgcC0wXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW2NlbGxSZW5kZXJJbml0XT1cImNvbC5maWx0ZXJSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb250ZXh0XT1cImdyaWRDb250ZXh0XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbD8uZmlsdGVyUmVuZGVyZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRmlsdGVyIE1lbnVlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJNZW51IGxldC1jb2w9XCJjb2xcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLW1lbnUtY29udGFpbmVyIGZpbHRlci1tZW51XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKm5nSWY9XCIhY29sPy5maWx0ZXJSZW5kZXJlclwiXG4gID5cbiAgICA8IS0tIERyb3Bkb3duIFR5cGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT09ICdhcnJheSc7IGVsc2UgdGV4dEZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1zZWN0aW9uIHAtMVwiPlxuXG4gICAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAvPlxuXG4gICAgPCEtLSBGaWx0ZXIgKyBSZXN1bHQgSGFuZGxpbmcgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXG4gICAgICBcIlxuICAgID5cbiA8IS0tIENoZWNrIGlmIGNvbHVtbl9kcm9wZG93bl92YWx1ZSBleGlzdHMgYW5kIGhhcyBkYXRhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoOyBlbHNlIG5vRHJvcGRvd25EYXRhXCI+XG4gICAgICA8IS0tIERBVEEgRk9VTkQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuXG4gICAgICAgIDwhLS0gU2VsZWN0IEFsbCAob25seSB3aGVuIGRhdGEgZXhpc3RzKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtdC0yIG1zLTEgc2VsZWN0LWFsbC1maWx0ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApID09PVxuICAgICAgICAgICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPz8gMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApIDxcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID8/IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiPlxuICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgLS0+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICBpdGVtU2l6ZT1cIjMyXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci12aWV3cG9ydFwiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb24pXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIlxuICAgICAgICAgICAgICBbZm9yXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uPy5uYW1lID8/IG9wdGlvbikgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBOTyBEQVRBIEZPVU5EIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAqbmdJZj1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgPlxuICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBOTyBEUk9QRE9XTiBEQVRBIEFWQUlMQUJMRSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0Ryb3Bkb3duRGF0YT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0zIG1iLTNcIj5cbiAgICAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3RcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnc3RyaW5nJyA/ICd0ZXh0JyA6IGNvbD8udHlwZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgI2ZpbHRlck1lbnVlVGV4dGNoSW5wdXRcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIGlkPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBpZD1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IEBzbGlkZVRvZ2dsZSAqbmdJZj1cImZpcnN0VmFsdWUgJiYgY29uZGl0aW9uICE9ICdub25lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRDb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ3N0cmluZycgPyAndGV4dCcgOiBjb2w/LnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWNvbmQgVmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwcHhcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgQXBwbHlcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzBweFwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTWVudWUgLS0+XG5cbjwhLS0gQ29sdW1uIFBhbm5lbCAvIFBpdm90IE1vZGUgLyBTZWFyY2hpbmcgLS0+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFubmVsPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWhlYWRlclwiPlxuICAgIDwhLS0gUGl2b3QgVG9nZ2xlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcGl2b3QtbW9kZSBweC01IG1zLTIgZC1ub25lXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInBpdm90VG9nZ2xlXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwaXZvdE1vZGVcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJwaXZvdFRvZ2dsZVwiPlBpdm90IE1vZGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3QgQWxsICYgU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcHgtMyBtdC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBhY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ29sdW1ucyBNZW51ZSAtLT5cblxuPCEtLSBDb2x1bW4gUGFuZWwgSXRlbSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFuZWxJdGVtIGxldC1jb2w9XCJjb2xcIj5cbiAgPCEtLSBHcm91cCBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZCA9ICFjb2wuZXhwYW5kZWRcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgW2lkXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzQ29sdW1uVmlzaWJsZShjb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVHcm91cFZpc2liaWxpdHkoY29sKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBbZm9yXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNvbC5leHBhbmRlZFwiIGNsYXNzPVwicHMtNFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIExlYWYgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aWR0aDogMS41cmVtXCI+PC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgIFtpZF09XCInY29sXycgKyBjb2wuZmllbGRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmZpZWxkXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENvbHVtbnMgU2lkZSBGaWx0ZXIgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVGaWx0ZXJzPlxuICA8ZGl2IGNsYXNzPVwicHktMyBweC0yIHBlLTMgaC0xMDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBmaWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsRmlsdGVyQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWF1dG8gc2lkZS1maWx0ZXItY29sdW1ucy13cmFwcGVyXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSA3MHB4KTsgc2Nyb2xsYmFyLXdpZHRoOiB0aGluXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGNvbHVtblNlYXJjaCA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJQYW5uZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlclBhbm5lbEl0ZW0gbGV0LWNvbD1cImNvbFwiPlxuICA8IS0tIEdyb3VwIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcbiAgICAgICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCJcbiAgICA+XG4gICAgICA8IS0tIENoZXZyb24gdG9nZ2xlIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBHcm91cCBsYWJlbCB0b2dnbGUgLS0+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgID57eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGggfHwgY29sPy5xdWVyeT8uX2ZpcnN0X3ZhbHVlXCJcbiAgICAgICAgICAgID4qPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGlsZHJlbiBjb2x1bW5zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIiBjbGFzcz1cInBzLTRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclBhbm5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gTGVhZiBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCIgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBmdy1ib2xkXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgZmlsdGVyIHdoZW4gZXhwYW5kZWQgLS0+XG4gICAgPGRpdiBbQHNsaWRlVG9nZ2xlXSAqbmdJZj1cImNvbC5leHBhbmRlZEZpbHRlclwiIGNsYXNzPVwicHMtNCBwZS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZU5lc3RlZEZpbHRlcjsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTmVzdGVkIEZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVOZXN0ZWRGaWx0ZXIgbGV0LWNvbD1cImNvbFwiPlxuICA8ZGl2IGNsYXNzPVwiXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknOyBlbHNlIHRleHRGaWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2hcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICAgIHwgZmlsdGVyIDogc2lkZU5lc3RlZEZpbHRlclNlYXJjaCA6ICd2YWx1ZScpIGFzIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xIHNlbGVjdC1hbGwtZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoID09IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIihjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aCAhPT0gY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCAmJiBjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgIGl0ZW1TaXplPVwiMzJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8uaW5jbHVkZXMob3B0aW9uPy5faWQgfHwgb3B0aW9uPy5pZCB8fCBvcHRpb24pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk9wdGlvblRvZ2dsZShjb2wsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb25fe3sgY29sLmZpZWxkIH19X3t7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25fJyArXG4gICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZCArXG4gICAgICAgICAgICAgICAgICAgICdfJyArXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24pIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaWRlTmVzdGVkRmlsdGVyU2VhcmNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+RlZcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5GVlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnZGF0ZScgPyAnZGF0ZScgOiAoY29sPy50eXBlID09ICdudW1iZXInID8gJ251bWJlcic6ICd0ZXh0JylcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkhLmZpcnN0X3ZhbHVlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93IG11dGVkXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBpZD1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGlkPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cIm5ub25lbS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIlxuICAgICAgICAgICAgICBmb3I9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgY29sPy5xdWVyeT8uY29uZGl0aW9uICE9PSAnbm9uZSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LnNlY29uZF9jb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdkYXRlJyA/ICdkYXRlJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY29uZCBWYWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuc2Vjb25kX3ZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiPmFwcGx5PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCI+cmVzZXQ8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlU2lkZUZpbHRlcihjb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2xlYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzBweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5U2lkZUZpbHRlcihjb2wpXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIihjb2w/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiKGNvbCE/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMXB4XCI+QXBwbHk8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENlbnRyIE92ZXJsYXkgZm9yIHNob3dpbmcgdGhlIGNob3NlIGNvbHVtbnMgLS0+XG5cbjxkaXYgKm5nSWY9XCJzaG93Q29sdW1uUGFuZWxcIiBjbGFzcz1cImN1c3RvbS1tb2RhbC1vdmVybGF5XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImN1c3RvbS1tb2RhbC1jb250ZW50XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb2x1bW5QYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBUaGUgZXhpc3RpbmcgbmctdGVtcGxhdGUgeW91IHByb3ZpZGVkIC0tPlxuPG5nLXRlbXBsYXRlICNtb2RhbENvbHVtblBhbm5lbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1oZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMiBwcy0zIHJvdW5kZWQtdG9wLTIgbW9kYS1oZWFkZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCI0OFwiXG4gICAgPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiIChjbGljayk9XCJjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKVwiXG4gICAgICAgID48c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBweC0yIHBlLTNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjQ4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIGFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IGFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEFjY29yZGlvbnMoKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaG9zZUNvbHVtbnNTZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cIm10LTAgbWItMVwiIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHgtMiBvdmVybGF5LXNjcm9sbGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogY2hvc2VDb2x1bW5zU2VhcmNoIDogJ2hlYWRlcic7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2lkZU1lbnVSb3dHcm91cHM+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgZC1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgaC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbWItNFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5Sb3cgR3JvdXBzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC01MFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLWRhc2hlZCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IEdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGhyIGNsYXNzPVwibXQtNFwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBtYi00XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlZhbHVlczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImgtNTAgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItZGFzaGVkIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgRHJhZyBoZXJlIGFnZ3JlZ2F0ZVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gRHJhZyBQcmV2aWV3IFRlbXBsYXRlIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1ByZXZpZXcgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRHJhZyBQbGFjZWhvbGRlciBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZHJhZ1BsYWNlaG9sZGVyXG4gIGxldC1jb2xcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1kcmFnZ2luZ0luR3JvdXBBcmVhPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4+XG4gIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgIDxkaXZcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2wsIGluZGV4OiBpLCBzZWN0aW9uOiBzZWN0aW9uIH1cbiAgICAgIFwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIj5OZXcgUGxhY2Vob2xkZXI8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVG9wIEdyb3VwIFJvdyBQbGFjZWhvbGRlciAtLT5cbjxuZy10ZW1wbGF0ZSAjdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlciBsZXQtY29sIGxldC1zaG93Q2hldnJvbj1cInNob3dDaGV2cm9uXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiB0b3Atcm93LWdyb3VwaW5nLXBsYWNlaG9sZGVyXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwidG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cInVuZ3JvdXBDb2x1bW4oY29sKVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0NoZXZyb25cIiBzdHlsZT1cIm9wYWNpdHk6IDAuNjsgZm9udC1zaXplOiAxNHB4XCI+XG4gICAgPHNwYW5cbiAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXCJcbiAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPjwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2NoaWxkSGVhZGVyUGxhY2Vob2xkZXJcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbnM9XCJzZWN0aW9uc1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzXCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWhhbmRsZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICBjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICBcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmVGaWx0ZXJDZWxsID0gY29sOyBhY3RpdmVDb2wgPSBudWxsXCJcbiAgICAgICAgPjxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogMTA7IGxlZnQ6IDBcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVMYXlvdXQ+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAzMjBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBMYXlvdXQ8L2g2PlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0zIGQtZmxleFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwic21hbGxcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ3NtYWxsJylcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdzbWFsbCdcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJzbWFsbFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnc21hbGwnID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogOHB4XCI+PC9kaXY+XG4gICAgICAgIFNtYWxsXG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJtZWRpdW1cIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdtZWRpdW0nXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUYWJsZUxheW91dCgkZXZlbnQsICdtZWRpdW0nKVwiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIG14LTMgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBsYXlvdXQtYnV0dG9uXCJcbiAgICAgICAgZm9yPVwibWVkaXVtXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdtZWRpdW0nID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogMTJweFwiPjwvZGl2PlxuICAgICAgICBNZWRpdW1cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cImxhcmdlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUYWJsZUxheW91dCgkZXZlbnQsICdsYXJnZScpXCJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbGFyZ2UnXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBsYXlvdXQtYnV0dG9uXCJcbiAgICAgICAgZm9yPVwibGFyZ2VcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ2xhcmdlJyA/ICcjMDAwJyA6ICcjNzI3MjcyJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYm94IGJvcmRlciBtYi0xXCIgc3R5bGU9XCJoZWlnaHQ6IDE2cHhcIj48L2Rpdj5cbiAgICAgICAgTGFyZ2VcbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3Bhbj5TaG93IHNlcGFyYXRvcnM8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwic2VwYXJhdG9yc1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25Gb250Q2hhbmdlKClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuPlJvdyBzaGFkaW5nPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dTaGFkaW5nRW5hYmxlZFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTaGFkaW5nKClcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBTaWRlIE1lbnU8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dTaWRlTWVudVwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBGaWx0ZXIgUm93PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93RmlsdGVyUm93XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJsZVByZXNldD5cbiAgPGRpdlxuICAgICpuZ0lmPVwiYWN0aXZlU3ViQnV0dG9uICE9PSAnc2F2ZS1wcmVzZXQnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweFwiXG4gID5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTBweFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBQcmVzZXRzPC9oNj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBTYXZlIFByZXNldCBCdXR0b24gd2l0aCBEcm9wZG93biAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGlkPVwic2F2ZVByZXNldERyb3Bkb3duXCJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVTdWJBY3Rpb25zKCdzYXZlLXByZXNldCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gXCJTYXZlIHByZXNldFwiIDogXCJVcGRhdGUgUHJlc2V0XCIgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0UHJlc2V0VGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFByZXNldCBMaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHRhYmxlVmlldyB8IGZpbHRlciA6IHNlYXJjaFRleHRQcmVzZXRUYWJsZSA6ICduYW1lJyBhcyBmaWx0ZXJlZExpc3RcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBJZiBmaWx0ZXJlZExpc3QgZXhpc3RzIGFuZCBub25lIGlzIGRlZmF1bHQgLT4gc2hvdyBmYWxsYmFjayAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCIgcGItNSBvdmVyZmxvdy1hdXRvXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAyNTBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKHRydWUpO1xuICAgICAgICAgICAgb3BlbkluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRlbXBfc3RhdGUuaWQgPSAnJztcbiAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgICAgICAgICAgY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gbnVsbFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5EZWZhdWx0IFZpZXc8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhcmtcIj5DcmVhdGVkIGJ5IHN5c3RlbTwvc21hbGw+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmICFoYXNBbnlEZWZhdWx0VmlldygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAgICAgPkRlZmF1bHQ8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPCEtLSA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhdGFibGVGaWx0ZXJWaWV3SWQgJiYgIWhhc0FueURlZmF1bHRWaWV3KClcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGVjay1ibHVlLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICA+PC9zcGFuPiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcbiAgICAgICAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJWaWV3SWRcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUaGUgbGlzdDogcmVuZGVyIGVhY2ggdGFibGUgZnJvbSBmaWx0ZXJlZExpc3QgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgdGFibGUgb2YgZmlsdGVyZWRMaXN0O1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlUYWJsZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEl0ZW0gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5JbmRleCA9IG51bGw7IGFjdGl2ZVRvcEJ1dHRvbiA9ICcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RGaWx0ZXIodGFibGUpOyBvcGVuSW5kZXggPSBudWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+XG4gICAgICAgICAgICAgICAge3sgdGFibGU/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8IS0tIHt7dGFibGU/LmlzX3RlbXB9fSAtLT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgKHRhYmxlPy5pc190ZW1wICYmICF0ZW1wX3N0YXRlLmlkKSB8fFxuICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0YXRlLmlkID09IHRhYmxlLmlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlPy5pc19kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAgICAgICAgICAgPkRlZmF1bHQ8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhcmtcIiAqbmdJZj1cInRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCIgW3RpdGxlXT1cInRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzPy5sZW5ndGggPiAyNVxuICAgICAgICAgICAgICA/ICh0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lcyB8IHNsaWNlOjA6MjUpICsgJy4uLidcbiAgICAgICAgICAgICAgOiB0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAoe3sgdGFibGU/LmNvbmZpZz8udG90YWxDb3VudCB9fSlcbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCIhdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcIj57eyB0YWJsZT8uY3JlYXRlZEF0IHwgZGF0ZSA6IFwiTU1NIGQsIHlcIiB9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlPy5pc19kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiIXRhYmxlPy5pc19kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWljb24gbXV0ZWQtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2hvcml6b250YWwtZG90cy5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gbWVudSAtLT5cbiAgICAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3BlbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tZHJvcGRvd24tbWVudSBwb3NpdGlvbi1maXhlZCB0b3AtYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cIid1bnNldCdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDIwMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiB1bnNldDsgcmlnaHQ6IHVuc2V0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblByZXNldCh0YWJsZSwgJ3NldFByZXNldCcpOyB0ZW1wX3N0YXRlLmlkID0gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zdGFyLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBTZXQgYXMgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibm9uZVwiICpuZ0lmPVwiIXRhYmxlLmNvbmZpcm1EZWxldGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZS5jb25maXJtRGVsZXRlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RyYXNoLXJlZC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGUuY29uZmlybURlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25maXJtLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zIHB5LTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgPGJyIC8+PGJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+4oCce3sgdGFibGU/Lm5hbWUgfX3igJ08L2JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPj9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGUuY29uZmlybURlbGV0ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uUHJlc2V0KHRhYmxlLCAnZGVsZXRlUHJlc2V0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICpuZ0lmPVwiYWN0aXZlU3ViQnV0dG9uID09ICdzYXZlLXByZXNldCdcIlxuICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBwLTMgYmFkZ2UgbXQtNCBzYXZlLXByZXNldC1kcm9wZG93biBtdC0xXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJzYXZlUHJlc2V0RHJvcGRvd25cIlxuICAgIHN0eWxlPVwibWluLXdpZHRoOiAyNTBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBmcy0xNHB4IG1iLTJcIj5cbiAgICAgIHt7IGlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gXCJTYXZlIHByZXNldFwiIDogXCJVcGRhdGUgUHJlc2V0XCIgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtMTRweCBtYi0yXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMjBweFwiPlxuICAgICAgVGhpcyB3aWxsIHNhdmUgdGhlIGN1cnJlbnQgdGFibGUgYWRqdXN0bWVudHMgYXMgYSBwcmVzZXQuXG4gICAgPC9kaXY+XG4gICAgPCEtLSBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgPGxhYmVsIGZvcj1cInByZXNldE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnMtMTJweCBmdy1ib2xkXCJcbiAgICAgICAgPlByZXNldCBOYW1lPC9sYWJlbFxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNwcmVzZXROYW1lQ3RybD1cIm5nTW9kZWxcIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVzZXROYW1lXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaXMtaW52YWxpZCc6XG4gICAgICAgICAgICAgIHByZXNldE5hbWVDdHJsLmludmFsaWQgJiZcbiAgICAgICAgICAgICAgKHByZXNldE5hbWVDdHJsLmRpcnR5IHx8IHByZXNldE5hbWVDdHJsLnRvdWNoZWQpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIHBzLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgcHJlc2V0IG5hbWVcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVzZXRGaWx0ZXJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInNhdmVGaWx0ZXJzXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG10LTFcIiBmb3I9XCJzYXZlRmlsdGVyc1wiPlxuICAgICAgICBTYXZlIGFjdGl2ZSBmaWx0ZXJzXG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTYXZlIEJ1dHRvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIiBzdHlsZT1cImhlaWdodDogMzJweFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLXByZXNldHMnKVwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiY2xvc2VEcm9wZG93bi5wcmVzZXQubG9hZGluZ1wiXG4gICAgICAgIChjbGljayk9XCJzYXZlUHJlc2V0KHByZXNldE5hbWVDdHJsKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiICpuZ0lmPVwiaXNUYWJsZVByZXNldE5vdENoYW5nZWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAgICAgPlNhdmU8L25nLWNvbnRhaW5lclxuICAgICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2xvc2VEcm9wZG93bi5wcmVzZXQubG9hZGluZ1wiXG4gICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiPjwvc3BhblxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXBcIiAqbmdJZj1cIiFpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZFwiXG4gICAgICAgICAgPlVwZGF0ZSBQcmVzZXQ8L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93SGlkZUNvbHVtbnM+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweFwiXG4gID5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTBweFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5Db2x1bW5zPC9oNj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0Q29sdW1ucygpXCJcbiAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IHRleHQtZGVjb3JhdGlvbi1ub25lIGQtbm9uZVwiXG4gICAgICAgID5SZXNldDwvYVxuICAgICAgPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwibXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1uXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInRvcFNob3dIaWRlQ29sdW1uc1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFByZXNldCBMaXN0IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87IHNjcm9sbGJhci13aWR0aDogdGhpblwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAtIDIyMFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm11dGVkLXRleHQgc2hvdy1oaWRlLXRhYmxlLWxhYmVsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiPlxuICAgICAgICBTaG93IGluIHRhYmxlXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwiaGlkZV9hbGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiIGZvcj1cImhpZGVfYWxsXCI+XG4gICAgICAgICAgICAgIFNob3cvSGlkZSBBbGwgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEl0ZW0gLS0+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IHRvcFNob3dIaWRlQ29sdW1ucyA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlwLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYXAgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItZ3JhcCBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgIWNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbHVtblZpc2liaWxpdHkoY29sLCBmYWxzZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJdGVtIEVuZCBIZXJlIC0tPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiXG4gICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtbiAmJiBoYXNBbnlJblZpc2libGVDb2x1bW5cIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibXV0ZWQtdGV4dCBzaG93LWhpZGUtdGFibGUtbGFiZWwgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgKm5nSWY9XCJoYXNBbnlJblZpc2libGVDb2x1bW5cIlxuICAgICAgPlxuICAgICAgICBIaWRlIGluIHRhYmxlXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgaWQ9XCJzaG93X2FsbFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkXCIgZm9yPVwic2hvd19hbGxcIj5cbiAgICAgICAgICAgICAgU2hvdy9IaWRlIEFsbCBcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiB0b3BTaG93SGlkZUNvbHVtbnMgOiAnaGVhZGVyJzsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhY29sLmlzX3Zpc2libGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaXAtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGN1cnNvci1ncmFwXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGN1cnNvci1ncmFwXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbCwgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUtY3Jvc3Muc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBJdGVtIEVuZCBIZXJlIC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyQ29sdW1ucyBsZXQtY29sPVwiY29sdW1uXCI+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cIiFpc0ZpbHRlck9wZW4gJiYgYWN0aXZlVG9wQnV0dG9uID09ICdmaWx0ZXItY29sdW1ucydcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnNcIlxuICAgIHN0eWxlPVwid2lkdGg6IDI4MHB4OyByaWdodDogdW5zZXQ7IG1heC13aWR0aDogMjMwcHhcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWItMiBweC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBteC0yIHBvc2l0aW9uLWFic29sdXRlIGljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5XCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDUwMHB4KTsgb3ZlcmZsb3c6IGF1dG9cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogYWRkRmlsdGVyQ29sdW1uSW5wdXQgOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyKGNvbClcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb2wuaXNfdmlzaWJsZSAmJlxuICAgICAgICAgICAgIWNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmXG4gICAgICAgICAgICAhY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJyAmJiBjb2wuaXNfc2VhcmNoX2FibGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAtM3B4XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciAgfCB0aXRsZWNhc2UgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93biAtLT5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNGaWx0ZXJPcGVuICYmIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkcm9wZG93bicgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2FycmF5J1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dCBmaWx0ZXItY29sdW1ucyBwYi0yXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgbXktMiBib3JkZXItYmVsb3cgcHktMSBwYi0yIG1iLTMgZC1mbGV4IHBzLTFcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdmaWx0ZXItY29sdW1ucycpOyBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiXG4gICAgICA+PC9zcGFuXG4gICAgICA+PGI+e3sgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmhlYWRlciB8IHRpdGxlY2FzZSAgfX08L2I+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTIgcHgtM1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoIHBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlciByb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIHB4LTIgZmlsdGVyLXNlcmFjaC1pbnB0XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImJhZGdlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgbWUtMSBtYi0xIHRvcC1yb3ctZmlsdGVyLWRyb3Bkb3duIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHNlbGVjdGVkPy52YWx1ZSA/IHNlbGVjdGVkLnZhbHVlIDogc2VsZWN0ZWQgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKHNlbGVjdGVkKVwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jcm9zcy1wcmltYXJ5LnN2ZydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGJvcmRlci0wIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEZpbHRlck9wdGlvbnM/Lmxlbmd0aCA/ICcnIDogJ0ZpbHRlciBieSdcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duXCJcbiAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiaGFuZGxlQmFja3NwYWNlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjAwcHgpOyBvdmVyZmxvdzogYXV0b1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgICAgfCBmaWx0ZXIgOiBzZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gOiAndmFsdWUnO1xuICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cImlcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGNvbC5pZCB8fCBjb2wuX2lkIHx8IGNvbClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKGNvbClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGQgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIiBbZm9yXT1cImlcIj5cbiAgICAgICAgICAgICAge3sgY29sPy52YWx1ZSB8fCBjb2w/Lm5hbWUgfHwgY29sIHwgdGl0bGVjYXNlICB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB4LTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWxpZ2h0IGJvcmRlciB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMSBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZXNldEZpbHRlckNoYW5nZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIj5TYXZlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9yIFRleHQgZmllbGRzIGFuZCBudW1iZXIgZmllbGRzLS0+XG5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiXG4gICAgICBpc0ZpbHRlck9wZW4gJiZcbiAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZScgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnKVxuICAgIFwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dCBmaWx0ZXItY29sdW1ucyBwYi0yXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyMTBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgYm9yZGVyLWJlbG93IHB5LTEgcGItMiBkLWZsZXggcHMtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgID48L3NwYW5cbiAgICAgID48Yj57eyBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uaGVhZGVyIH19PC9iPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcG9zaXRpb24tcmVsYXRpdmUgcC0yIHRleHQtZmlsdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0IGJvcmRlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBmaXJzdCB2YWx1ZVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgICA6IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpcnN0VmFsdWVcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXktMyBkLWZsZXggZmxleC1yb3dcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbEFuZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJsb2dpY2FsT3BlcmF0b3JcIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxBbmRcIlxuICAgICAgICAgICAgICA+QU5EPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIGNvbC00IG0tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgaWQ9XCJsb2dpY2FsT3JcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJvclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxPclwiPk9SPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbE5vbmVcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJub25lXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwibG9naWNhbE5vbmVcIlxuICAgICAgICAgICAgICA+Tm9uZTwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmRpdGlvbiAhPT0gJ25vbmUnICYmIGZpcnN0VmFsdWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBtdC0zXCI+XG4gICAgICAgICAgICA8IS0tIFNlY29uZCBjb25kaXRpb24gc2VsZWN0IC0tPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGJvcmRlclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kQ29uZGl0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgPCEtLSBTZWNvbmQgdmFsdWUgaW5wdXQgLS0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgc2Vjb25kIHZhbHVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kVmFsdWVcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgcHgtMiBib3JkZXItdG9wXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzOHB4XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplICYmICFmaXJzdFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzZXRUZXh0RmlsdGVyQ2hhbmdlcygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCIoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID09PSAwICYmICFmaXJzdFZhbHVlKSB8fCAoY29uZGl0aW9uICE9PSAnbm9uZScgJiYgIXNlY29uZFZhbHVlKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiPkFwcGx5PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFZGl0IGRyb3Bkb3duIGhlcmUgLS0+XG48bmctdGVtcGxhdGUgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cImRyb3AtZG93bi1lZGl0XCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2Z1bGxUZXh0VGVtcGxhdGVcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNBcnJheT1cImlzQXJyYXlcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmdWxsLXRleHQtYm94XCJcbiAgICAoZGJsY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC8gMlwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZyhyb3csIGNvbClcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhaXNBcnJheVwiXG4gICAgICAgIGNsYXNzPVwiZnVsbC10ZXh0LWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDJcIlxuICAgICAgICAoZGJsY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIHRydWUpXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVxuICAgICAgICB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNBcnJheVwiPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJpICE9PSAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIGl0ZW0/LmRlcGFydG1lbnRfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5yb2xlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5mdWxsX25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIi1cIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmcocm93LCBjb2wpXCI+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgKGRibGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlbmFibGVFZGl0KHJvdywgY29sLCB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgIHJvd3M9XCI0XCJcbiAgICAgICAgI3RleHRBcmVhZElucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICBuYW1lPVwie3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIHRleHRNb2RlbClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0ZXh0QXJlYWRJbnB1dC5ibHVyKClcIlxuICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2lzLWludmFsaWQnOiB0ZXh0TW9kZWwuaW52YWxpZFxuICAgICAgICB9XCJcbiAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgPjwvdGV4dGFyZWE+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlciBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxuICA8c3BhblxuICAgIGNsYXNzPVwicHgtMiBkLWZsZXggdy0xMDAgY2VsbC1jb250ZW50IGltYWdlLXBsYWNlaG9sZGVyXCJcbiAgICBbdGl0bGVdPVwicm93Py5mdWxsX25hbWUgfHwgcm93Py5uYW1lIHx8ICdOL0EnXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHJvdz8ubG9nbyB8fFxuICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgIHJvdz8uaW52b2ljZT8uaW52b2ljZV9pbWFnZSB8fFxuICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZTtcbiAgICAgICAgZWxzZSBwbGFjZWhvbGRlclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwiZnVsbHNjcmVlbkltYWdlID0gcm93Py5sb2dvIHx8IHJvdz8ucHJvZmlsZV9waWN0dXJlcz8uWzRdPy5wYXRoIHx8XG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlXCJcbiAgICAgICAgY2xhc3M9XCJwaWNcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3dpZHRoXT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8ucHJvZmlsZV9waWN0dXJlcz8uWzRdPy5wYXRoIHx8XG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBhbHQ9XCJpY29uXCJcbiAgICAgICAgICBjbGFzcz1cIm9wdGlvbi1pY29uXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSA8ZGl2XG4gICAgICBjbGFzcz1cImZ1bGxzY3JlZW4tb3ZlcmxheVwiXG4gICAgICAqbmdJZj1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAoY2xpY2spPVwiZnVsbHNjcmVlbkltYWdlID0gbnVsbFwiXG4gICAgPlxuICAgICAgPGltZyBbc3JjXT1cImZ1bGxzY3JlZW5JbWFnZVwiIGNsYXNzPVwiZnVsbHNjcmVlbi1pbWdcIiAvPlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJnZXREeW5hbWljQ2xhc3Mocm93Py5mdWxsX25hbWUgfHwgcm93Py5uYW1lKVwiXG4gICAgICAgIGNsYXNzPVwicGljIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcm91bmRlZC1jaXJjbGVcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cInJvd0hlaWdodCAvIDNcIlxuICAgICAgICBbY2xhc3MuYXNzZXRzLXBpY109XCJncmlkVHlwZSA9PSAnQXNzZXRzJ1wiXG4gICAgICA+XG4gICAgICAgIHt7IGdldEluaXRpYWxzKHJvdz8uZnVsbF9uYW1lKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ2xpY2sgTWVudWUgLS0+XG48ZGl2XG4gIFtjbGFzcy5pbnZpc2libGVdPVwiIXBvc2l0aW9uZWRZZXRcIlxuICBjbGFzcz1cImNvbnRleHQtbWVudSBwLTJcIlxuICAqbmdJZj1cImFjdGlvbkhpZGUgJiYgYWN0aW9ucz8ubGVuZ3RoXCJcbiAgW25nU3R5bGVdPVwieyAndG9wLnB4JzogeVBvcywgJ2xlZnQucHgnOiB4UG9zIH1cIlxuICBbY2xhc3Muc2hvd109XCJpc1Zpc2libGVcIlxuICBhcHBlbmRUbz1cImJvZHlcIlxuPlxuICA8dWw+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgICAgY2xhc3M9XCJyb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy8nICsgYWN0aW9uICsgJy5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gcmlnaHQtY2xpY2stbWVudS1pY29ucyBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZSBmdy01MDBcIj57eyBhY3Rpb24gfX08L3NwYW4+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuXG48IS0tIERldGFpbHMgVG9nZ2xlIGZyb20gYm90dG9tIC0tPlxuXG48bmctdGVtcGxhdGUgI25lc3RlZFRhYmxlVGVtcGxhdGUgbGV0LXJvdz5cbiAgPGRpdlxuICAgIGNsYXNzPVwibmVzdGVkLXRhYmxlIHRhYmxlIHRhYmxlLXNtIHctMTAwIG1iLTAgY2VudGVyLW5lc3RlZC10YWJsZSB3LTEwMFwiXG4gICAgc3R5bGU9XCJ0YWJsZS1sYXlvdXQ6IGZpeGVkICFpbXBvcnRhbnRcIlxuICAgICNuZXN0ZWRUYWJsZUNvbnRhaW5lclxuICA+XG4gICAgPHRoZWFkXG4gICAgICAjbmVzdGVkSGVhZGVyXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwicm93Py5kZXRhaWwuY29sdW1uc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ29sdW1uKCRldmVudCwgcm93KVwiXG4gICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvbk5lc3RlZENvbFNvcnQoJGV2ZW50LCBwcmV2aWV3TmVzdGVkQ29scylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggdHIgYm9yZGVyLWJlbG93XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93LmRldGFpbC5jb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBjbGFzcz1cInB4LTQgdGhcIlxuICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggaC0xMDAganVzdGlmeS1jb250ZW50LWJldHdlZW4gcG9zaXRpb24tcmVsYXRpdmUgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiIChjbGljayk9XCJzb3J0TmVzdGVkQ29sKGNvbCwgcm93KVwiPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRTdWJTb3J0Q29sdW1uID09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgKGNvbD8ub3JkZXJfYnkgPT0gJ2Rlc2MnXG4gICAgICAgICAgICAgICAgICAgID8gJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWRlc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICA6ICdkYXRhLWdyaWQvaWNvbnMvc29ydC1hc2Muc3ZnJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtcy0yIHN0YXJ0LTUwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbClcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjb2xcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAtNTAlOyB6LWluZGV4OiAyMTsgbGVmdDogMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiByb3c/LmRldGFpbC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC90aGVhZD5cbiAgICA8ZGl2XG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTBcIlxuICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICA+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgIFtpdGVtU2l6ZV09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwidmlld3BvcnRcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgIChyb3c/LmRldGFpbD8ucmVzdWx0Py5sZW5ndGggPCA1XG4gICAgICAgICAgICA/IG5lc3RlZFRhYmxlcm93SGVpZ2h0ICogcm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoICsgNDBcbiAgICAgICAgICAgIDogMzAwKSArIChoYXNIb3Jpem9udGFsU2Nyb2xsID8gLTEyIDogMSlcbiAgICAgICAgXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93IGQtZmxleCB0clwiXG4gICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgZCBvZiByb3c/LmRldGFpbD8ucmVzdWx0OyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXI/Lm9mZnNldFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwibmVzdGVkSGVhZGVyPy5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCRldmVudCwgZClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJweC00IHB5LTAgdGRcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBwcmV2aWV3TmVzdGVkQ29sczsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwibmVzdGVkVGFibGVyb3dGb250c2l6ZVwiXG4gICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodCAtIDFcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbD8ud2lkdGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIHt7IGRbY29sLmZpZWxkXSB8fCAoY29sLmlzX2Ftb3VudCA/IDAgOiBcIi1cIikgfX0gLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjY2VsbFRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgZmxleC1ncm93LTFcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgIGNvbD8udHlwZSA9PT0gJ2RhdGUnXG4gICAgICAgICAgICAgICAgICAgID8gKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfCBkYXRlIDogZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8ICctJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzX2Ftb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzTmVzdGVkVmFsdWVBcnJheShkLCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2w/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNEYXRlKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8IGRhdGU6IGRhdGVGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbC5pc19hbW91bnQgPyAwOiAnLScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LlswXT8uZGVwYXJ0bWVudF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LnJvbGVOYW1lIHx8IGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LlswXT8uZnVsbF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG90YWxBbW91bnQoY29sKSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJbWFnZVBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyIGxldC1yb3c+XG4gIDx0YWJsZVxuICAgIGNsYXNzPVwibmVzdGVkLXRhYmxlIHRhYmxlIHRhYmxlLXNtIHctMTAwIG1iLTBcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgIGdyaWRUeXBlID09ICdBc3NldHMnXG4gICAgICAgID8gKG5lc3RlZFRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgPz8gMCkgKyAxMlxuICAgICAgICA6ICh0YXNrTWFuYWdlbWVudENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ID8/IDApXG4gICAgXCJcbiAgPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRoZWFkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHIgZC1mbGV4IGJvcmRlci1iZWxvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVIZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiICpuZ0Zvcj1cImxldCBfIG9mIFsxLCAyLCAzLCA0LCA1XVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRib2R5XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBfIG9mIHJvdz8uZGV0YWlsPy5yZXN1bHRcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiICpuZ0Zvcj1cImxldCBfXyBvZiBbMSwgMiwgMywgNCwgNV1cIiBjbGFzcz1cInB5LTBcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC90YWJsZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFza01hbmFnZW1lbnRUZW1wbGF0ZSBsZXQtdGFza0RldGFpbHM9XCJ0YXNrRGV0YWlsc1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwLTRcIlxuICAgICN0YXNrTWFuYWdlbWVudENvbnRhaW5lclxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIFtzdHlsZS5mb250RmFpbWx5XT1cImZvbnRGYWltbHlcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+RGVzY3JpcHRpb248L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50IGZpcnN0RGl2XCI+XG4gICAgICAgIHt7IHRhc2tEZXRhaWxzLmRlc2NyaXB0aW9uIH19XG4gICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxwXG4gICAgICAgICAgW3N0eWxlLmZvbnRTaXplXT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW0tY29udGVudCBmaXJzdERpdiB0YXNrRGVzY3JpcHRpb24gcGUtNFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJnZXRTYWZlQ29tbWVudCh0YXNrRGV0YWlscz8uZWRpdG9yX2Rlc2NyaXB0aW9uKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsSW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPkF0dGFjaG1lbnRzPC9kaXY+XG4gICAgICAgIDxoNSAqbmdJZj1cInRhc2tEZXRhaWxzPy5hdHRhY2htZW50cz8ubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICBObyBBdHRhY2htZW50cyBmb3VuZFxuICAgICAgICA8L2g1PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJ0YXNrRGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZC1mbGV4IGZsZXgtd3JhcFwiXG4gICAgICAgICAgc3R5bGU9XCJnYXA6IDEwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdHRhY2hlbWVudCBvZiB0YXNrRGV0YWlscz8uYXR0YWNobWVudHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzeW1ib2wtbGFiZWwgZnMtMiBmdy1zZW1pYm9sZCB0ZXh0LXN1Y2Nlc3MgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgdGFza0RldGFpbHM/LmF0dGFjaG1lbnRzX25hbWVbaV0gfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGF0dGFjaGVtZW50KVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9kb2N1bWVudC1pY29ucy8nICtcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnRpb24oYXR0YWNoZW1lbnQpICtcbiAgICAgICAgICAgICAgICAnLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICBDb21tZW50cyAoe3sgdGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGggfX0pXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aDUgKm5nSWY9XCJ0YXNrRGV0YWlscz8uY29tbWVudHM/Lmxlbmd0aCA9PSAwXCI+Tm8gQ29tbWVudHMgZm91bmQ8L2g1PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGhcIiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50XCIgKm5nRm9yPVwibGV0IGNvbW1lbnQgb2YgdGFza0RldGFpbHMuY29tbWVudHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGNsYXNzPVwicGljIGltYWdlLWlucHV0LXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIlxuICAgICAgICAgICAgICAgIHNyYz1cInt7IGNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nbyB9fVwiXG4gICAgICAgICAgICAgICAgYWx0PVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwhLS0gPGFwcC1kZWZhdWx0LWltYWdlLXBsYWNlaG9sZGVyICpuZ0lmPVwiIWNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nb1wiIHRpdGxlPVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiIFtuYW1lXT1cImNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWVcIj48L2FwcC1kZWZhdWx0LWltYWdlLXBsYWNlaG9sZGVyPiAtLT5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldER5bmFtaWNDbGFzcyhjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaWMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciByb3VuZGVkLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwicm93SGVpZ2h0IC8gM1wiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lIH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldEluaXRpYWxzKGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtYXV0aG9yIGZzLTE0cHhcIj5cbiAgICAgICAgICAgICAgICB7eyBjb21tZW50Py5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbWVudC1jb250ZW50IGZvckNvbW1lbnRJbWdcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0U2FmZUNvbW1lbnQoY29tbWVudC5jb21tZW50KVwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICAgICAge3sgY29tbWVudC5jb21tZW50X2RhdGUgfCBkYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC10aW1lc3RhbXBcIj5cbiAgICAgICAgICAgICAgICBSZXBsaWVzOiAoe3sgY29tbWVudC5yZXBsaWVzLmxlbmd0aCB9fSlcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
6054
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtZ3JpZC9zcmMvbGliL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1ncmlkL3NyYy9saWIvZGF0YS1ncmlkL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBSU4sU0FBUyxFQUVULFlBQVksRUFFWixZQUFZLEVBTVosdUJBQXVCLEVBRXZCLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFVTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsS0FBSyxFQUNMLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBSTdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3JFLE9BQU8sMkNBQTJDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Qm5ELE1BQU0sQ0FBTixJQUFZLGdCQVFYO0FBUkQsV0FBWSxnQkFBZ0I7SUFDMUIsaUNBQWEsQ0FBQTtJQUNiLDhDQUEwQixDQUFBO0lBQzFCLDhDQUEwQixDQUFBO0lBQzFCLGlEQUE2QixDQUFBO0lBQzdCLDBDQUFzQixDQUFBO0lBQ3RCLDBDQUFzQixDQUFBO0lBQ3RCLGlEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFSVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUTNCO0FBR0QsTUFBTSxDQUFDLE1BQU0s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QkE4NkJJLHNCQUFzQjtzQkFBMUQsU0FBUzt1QkFBQyx3QkFBd0I7Z0JBQ0Usc0JBQXNCO3NCQUExRCxTQUFTO3VCQUFDLHdCQUF3QjtnQkE4Z0JOLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQXNsRDNCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5UnRDLE9BQU87c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5SjFDLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQXdaYyx1QkFBdUI7c0JBQTVELFNBQVM7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBIb3N0TGlzdGVuZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIE5nWm9uZSxcbiAgUmVuZGVyZXIyLFxuICBBZnRlclZpZXdDaGVja2VkLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW4sXG4gIGluamVjdCxcbiAgSW5qZWN0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTcGxpdENvbHVtbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3BsaXQtY29sdW1ucy5zZXJ2aWNlJztcbmltcG9ydCB7ICBSb3dBY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9yb3ctYWN0aW9uLnNlcnZpY2UnXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2RrRHJhZyxcbiAgQ2RrRHJhZ0Ryb3AsXG4gIENka0RyYWdFbmQsXG4gIENka0RyYWdFbnRlcixcbiAgQ2RrRHJhZ0V4aXQsXG4gIENka0RyYWdNb3ZlLFxuICBDZGtEcmFnU29ydEV2ZW50LFxuICBDZGtEcmFnU3RhcnQsXG4gIERyYWdEcm9wLFxuICBtb3ZlSXRlbUluQXJyYXksXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICBhbmltYXRlLFxuICBxdWVyeSxcbiAgc3RhZ2dlcixcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgU1RBVFVTRVNfQkFER0VfTUFQIH0gZnJvbSAnLi9zdGF0dXNlcyc7XG5pbXBvcnQgeyBDb3B5U2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb3B5LXNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IENlbGxIb3N0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jZWxsSG9zdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybWF0Q3VycmVuY3lQaXBlIH0gZnJvbSAnLi4vcGlwZXMvZm9ybWF0LWN1cnJlbmN5LnBpcGUnO1xuaW1wb3J0ICdib290c3RyYXAvZGlzdC9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHRtbENvbnRlbnRTYW5pdGl6ZXJTZXJ2aWNlIH0gZnJvbSAnLi8uLi9zZXJ2aWNlcy9odG1sLWNvbnRlbnQtc2FuaXRpemVyLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQ2VsbFBvc2l0aW9uIHtcbiAgcm93SW5kZXg6IG51bWJlcjtcbiAgY29sSW5kZXg6IG51bWJlcjtcbiAgc3ViQ29sSW5kZXg6IG51bWJlcjtcbiAgZmllbGQ6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUdyaWRDb25maWcge1xuICBmb250RmFpbWx5OiBzdHJpbmc7XG4gIGJvZHlUZXh0Rm9udHNTaXplOiBudW1iZXI7XG4gIGhlYWRlclRleHRGb250c1NpemU6IG51bWJlcjtcbiAgb2RkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICBzaG93VmVydGljYWxCb3JkZXI6IGJvb2xlYW47XG4gIHNlbGVjdGVkVGFibGVMYXlvdXQ6ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nO1xuICBmaWx0ZXJOYW1lczogc3RyaW5nO1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIHJvd1NoYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBhY3RpdmVGaWx0ZXJzOiBib29sZWFuO1xuICBncm91cGVkQ29sdW1ucz86IHN0cmluZ1tdO1xufVxuXG5cbmV4cG9ydCBlbnVtIFJvd0FuaW1hdGlvblR5cGUge1xuICBOb25lID0gJ25vbmUnLFxuICBTcHJlYWQgPSAnc3ByZWFkQW5pbWF0aW9uJyxcbiAgQm91bmNlID0gJ2JvdW5jZUFuaW1hdGlvbicsXG4gIFNsaWRlVXAgPSAnc2xpZGVVcEZyb21Cb3R0b20nLFxuICBGbGlwID0gJ2ZsaXBBbmltYXRpb24nLFxuICBTa2V3ID0gJ3NrZXdBbmltYXRpb24nLFxuICBTbGlkZVJpZ2h0ID0gJ3NsaWRlRnJvbVJpZ2h0Jyxcbn1cblxuXG5leHBvcnQgY29uc3Qgc29ydGluZ0FuaW1hdGlvbiA9IHRyaWdnZXIoJ2xpc3RTb3J0JywgW1xuICB0cmFuc2l0aW9uKCcqID0+IConLCBbXG4gICAgLy8gUXVlcnkgYWxsIGVsZW1lbnRzIGVudGVyaW5nIG9yIGxlYXZpbmdcbiAgICBxdWVyeSgnOmVudGVyLCA6bGVhdmUnLCBzdHlsZSh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB3aWR0aDogJzEwMCUnIH0pLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgLy8gQW5pbWF0ZSBsZWF2aW5nIGVsZW1lbnRzIHVwd2FyZCB3aXRoIGZhZGUgb3V0XG4gICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwcHgpJywgb3BhY2l0eTogMCB9KSlcbiAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgLy8gU3RhZ2dlciB0aGUgZW50ZXJpbmcgZWxlbWVudHMgZm9yIGEgc21vb3RoZXIgZWZmZWN0XG4gICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgyMHB4KScsIG9wYWNpdHk6IDAgfSksXG4gICAgICBzdGFnZ2VyKDUwLCBbXG4gICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogMSB9KSlcbiAgICAgIF0pXG4gICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICBdKVxuXSk7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRhLWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignYWNjb3JkaW9uVG9nZ2xlJywgW1xuICAgICAgc3RhdGUoXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG92ZXJmbG93OiAndW5zZXQnIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3ZlcmZsb3c6ICd1bnNldCcgfSkpLFxuICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkIDw9PiBleHBhbmRlZCcsIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcignc2xpZGVUb2dnbGUnLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIG9wYWNpdHk6IDEgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3BhY2l0eTogMSwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxuICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvcGFjaXR5OiAwIH0pKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICB0cmlnZ2VyKCdzbGlkZVVwJywgW1xuICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwJSknLCBvcGFjaXR5OiAwIH0pKSxcbiAgICAgIHN0YXRlKCcqJywgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogMSB9KSksXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBhbmltYXRlKCczMDBtcyBlYXNlLW91dCcpKSxcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nKSksXG4gICAgXSksXG4gICAgdHJpZ2dlcigncm93RHluYW1pYycsIFtcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BSRUFEIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IHNwcmVhZEFuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlWCgwLjcpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCczNTBtcyBlYXNlLW91dCcsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDQwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyMjBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdzY2FsZVgoMC43KScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQk9VTkNFIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGJvdW5jZUFuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDQ1LCBbXG4gICAgICAgICAgICBhbmltYXRlKFxuICAgICAgICAgICAgICAnNTAwbXMgY3ViaWMtYmV6aWVyKC42OCwtMC41NSwuMjcsMS41NSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIE5FVyAxOiBGTElQIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IGZsaXBBbmltYXRpb24nLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdyb3RhdGVYKC04MGRlZyknIH0pLFxuICAgICAgICAgIHN0YWdnZXIoNzAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzQ1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdyb3RhdGVYKDApJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSksXG5cbiAgICAgICAgcXVlcnkoJzpsZWF2ZScsIFtcbiAgICAgICAgICBzdGFnZ2VyKDUwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICdyb3RhdGVYKDgwZGVnKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pXG4gICAgICBdKSxcblxuICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gTkVXIDI6IFNLRVcgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2tld0FuaW1hdGlvbicsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NrZXdZKDZkZWcpIHRyYW5zbGF0ZVkoOHB4KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzIwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NrZXdZKDBkZWcpIHRyYW5zbGF0ZVkoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzIyMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NrZXdZKC02ZGVnKSB0cmFuc2xhdGVZKC04cHgpJyB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF0sIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgICAgIF0pLFxuICAgICAgdHJhbnNpdGlvbignKiA9PiBzbGlkZVVwRnJvbUJvdHRvbScsIFtcbiAgICAgICAgcXVlcnkoJzplbnRlcicsIFtcbiAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMTAwdmgpJyB9KSxcbiAgICAgICAgICBzdGFnZ2VyKDYwLCBbXG4gICAgICAgICAgICBhbmltYXRlKCc1MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdKVxuICAgICAgICBdLCB7IG9wdGlvbmFsOiB0cnVlIH0pLFxuXG4gICAgICAgIHF1ZXJ5KCc6bGVhdmUnLCBbXG4gICAgICAgICAgc3RhZ2dlcig0MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsXG4gICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cbiAgICAgIHRyYW5zaXRpb24oJyogPT4gc2xpZGVGcm9tUmlnaHQnLCBbXG4gICAgICAgIHF1ZXJ5KCc6ZW50ZXInLCBbXG4gICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKDEwMHZ3KScgfSksXG4gICAgICAgICAgc3RhZ2dlcig2MCwgW1xuICAgICAgICAgICAgYW5pbWF0ZSgnNTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoMCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KSxcblxuICAgICAgICBxdWVyeSgnOmxlYXZlJywgW1xuICAgICAgICAgIHN0YWdnZXIoNDAsIFtcbiAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4nLFxuICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVgoNTBweCknIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXSwgeyBvcHRpb25hbDogdHJ1ZSB9KVxuICAgICAgXSksXG5cblxuXG4gICAgXSlcblxuXG4gIF0sXG5cbn0pXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4gIC8vICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4gIC8vICoqKioqKioqKiogIElucHV0IEdvZXMgSGVyZSAqKioqKioqKioqKiAvL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuICAvLyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuXG5cbiAgQElucHV0KCkgcm93QW5pbWF0aW9uOiBSb3dBbmltYXRpb25UeXBlID0gUm93QW5pbWF0aW9uVHlwZS5Ob25lO1xuXG4gIC8vIFBhZ2luYXRpb24gQ29uZmlnIFN0b3JlIEhlcmVcbiAgQElucHV0KCkgcGFnaW5hdGlvbkNvbmZpZzogYW55ID0gbnVsbDtcblxuICAvLyBUaGUgZGF0YXNldCBzdG9yZSBoZXJlO1xuICBASW5wdXQoKSBkYXRhU2V0OiBhbnlbXSA9IFtdO1xuXG4gIC8vIFRoZSBjb2x1bW5zIFN0b3JlIEhlcmVcbiAgQElucHV0KCkgY29sdW1uczogYW55W10gPSBbXTtcblxuICAvLyBSb3cgSGVpZ2h0O1xuICBASW5wdXQoKSByb3dIZWlnaHQ6IG51bWJlciA9IDQ0O1xuXG4gIC8vIEhlYWRlciBSb3cgSGVpZ2h0O1xuICBASW5wdXQoKSBoZWFkZXJSb3dIZWlnaHQ6IG51bWJlciA9IDUwO1xuXG4gIC8vIFNob3cgVmVydGljYWwgQm9yZGVycztcbiAgQElucHV0KCkgc2hvd1ZlcnRpY2FsQm9yZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gRXZlbiBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGV2ZW5Sb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnJztcblxuICAvLyBFdmVuIFJvd3MgQmFja2dyb3VuZCBDb2xvcjtcbiAgQElucHV0KCkgb2RkUm93c0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyNmMmYyZjInO1xuXG4gIC8vIEhlYWRlciBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGhlYWRlckJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmNmY4ZmYnO1xuXG4gIC8vIEhlYWRlciBSb3dzIEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjZjZmOGZmJztcblxuICAvLyBTaG93IENvbHVtbnMgR3JvdXBpbmc7XG4gIEBJbnB1dCgpIHNob3dDb2x1bW5zR3JvdXBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBSb3cgSG92ZXJlZCBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSByb3dIb3ZlckNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAncmdiYSgwLCAxMjMsIDI1NSwgMC4xKSc7XG5cbiAgLy8gTGVmdCBQaW5uZWRCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBsZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gQm9keSBCYWNrZ3JvdW5kIGNvbG9yO1xuICBASW5wdXQoKSBib2R5QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gUmlnaHQgUGlubmVkIEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIHJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gU2lkZSBNZW51IEJhY2tncm91bmQgY29sb3I7XG4gIEBJbnB1dCgpIHNpZGVtZW51QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnI2Y2ZjhmZic7XG5cbiAgLy8gQm9keSB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBib2R5VGV4dENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAnIzBjMTEyYic7XG5cbiAgLy8gSGVhZGVyIHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGhlYWRlclRleHRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyMyYTFmNzMnO1xuXG4gIC8vIEhlYWRlciB0ZXh0IGNvbG9yO1xuICBASW5wdXQoKSBjaGVja2JveGVzQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjMmExZjczJztcblxuICAvLyBIZWFkZXIgdGV4dCBzaXplO1xuICBASW5wdXQoKSBoZWFkZXJUZXh0Rm9udHNTaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSAxNDtcblxuICAvLyBCb2R5IHRleHQgY29sb3I7XG4gIEBJbnB1dCgpIGJvZHlUZXh0Rm9udHNTaXplOiBudW1iZXIgfCB1bmRlZmluZWQgPSAxNDtcblxuICAvLyBIZWFkZXIgZm9udCB3ZWlnaHQ7XG4gIEBJbnB1dCgpIGhlYWRlckZvbnRXZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IDUwMDtcblxuICAvLyBCb2R5IEZvbnQgV2VpZ2h0O1xuICBASW5wdXQoKSBib2R5Rm9udFdlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkID0gNDAwO1xuXG4gIC8vIENoZWNrZWQgUm93IEJhY2tncm91bmQgQ29sb3I7XG4gIEBJbnB1dCgpIGNoZWNrZWRSb3dCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICdhbGljZWJsdWUnO1xuXG4gIC8vIGRyb3Bkb3ducyBCYWNrZ3JvdW5kIENvbG9yO1xuICBASW5wdXQoKSBkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcjZjZmOGY4JztcblxuXG4gIEBJbnB1dCgpIGZvb3RlclJvd0JhY2tncm91bmRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG5cbiAgLy8gRm9vdGVyIHJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIGZvb3RlclJvd0hlaWdodDogbnVtYmVyID0gNDY7XG5cbiAgLy8gRm9vdGVyIHJvdyBIZWlnaHQ7XG4gIEBJbnB1dCgpIHRvcEdyb3VwZWRCYWRnZXNCYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuXG4gIC8vIFNob3cgUm93IHdpc2UgZ3JvdXBpbmc7XG4gIEBJbnB1dCgpIHNob3dSb3dzR3JvdXBpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcblxuICAvLyBTaG93IFJvdyB3aXNlIGdyb3VwaW5nO1xuICBASW5wdXQoKSBzaG93RmlsdGVyUm93OiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG5cbiAgLy8gU2hvdyBSb3cgd2lzZSBncm91cGluZztcbiAgQElucHV0KCkgZm9udEZhaW1seTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJ3NhbnMtc2VyaWYnO1xuXG4gIC8vIFNob3cgU2lkZUNvbHVtbjtcbiAgQElucHV0KCkgc2hvd1NpZGVNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gRm9vdGVyIFBhZGRpbmdcbiAgQElucHV0KCkgZm9vdGVyUGFkZGluZzogbnVtYmVyID0gM1xuXG5cbiAgLy8gRm9vdGVyIFBhZGRpbmdcbiAgQElucHV0KCkgdG9wRmlsdGVyUm93SGVpZ2h0OiBudW1iZXIgPSA1MDtcblxuICAvLyBTaG93IFJvd3Mgc2hhZGluZ1xuICBASW5wdXQoKSByb3dTaGFkaW5nRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNob3cgUm93cyBzaGFkaW5nXG4gIEBJbnB1dCgpIHNob3dTZXJpYWxOdW1iZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTaW5nbGUgU3BhIFVybCBBdHRhY2ggdG8gaWNvbnNcbiAgQElucHV0KCkgc2luZ2xlU3BhQXNzZXRzUGF0aDogc3RyaW5nID0gJ2Fzc2V0cy8nO1xuXG5cbiAgLy8gQXBwbGllZCBGaWx0ZXJzXG4gIEBJbnB1dCgpIGZpbHRlcnNDb25maWc6IGFueVtdID0gW107XG5cblxuICAvLyBBcHBsaWVkIEZpbHRlcnNcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vVmVydGljYWwgU2Nyb2xsYmFyIHN0eWxlXG4gIEBJbnB1dCgpIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGg6ICdhdXRvJyB8ICd0aGluJyA9ICdhdXRvJztcblxuICAvL0hvcml6aW50YWwgU2Nyb2xsYmFyIHN0eWxlXG4gIEBJbnB1dCgpIGhvcml6aW50YWxTY3JvbGxiYXJXaWR0aDogJ2F1dG8nIHwgJ3RoaW4nID0gJ2F1dG8nO1xuXG4gIC8vIFNob3cgQ2VsbCBkZXRhaWxzIGJveFxuICBASW5wdXQoKSBzaG93Q2VsbERldGFpbHNCb3g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvL0RhdGUgZm9ybWF0XG5cbiAgQElucHV0KCkgZGF0ZUZvcm1hdDogc3RyaW5nID0gJydcblxuICAvL0RhdGUgZm9ybWF0XG4gIEBJbnB1dCgpIHRhYmxlU2VhcmNoOiBzdHJpbmcgPSAnJztcblxuXG4gIC8vRGF0ZSBmb3JtYXRcbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbJ2VkaXQnLCAnZGVsZXRlJ107XG5cblxuICAvLyBUYWJsZSBDb25maWcgZm9yIHBhZ2luYXRpb25zIGlzIGhlcmVcbiAgQElucHV0KCkgY29uZmlnOiBhbnk7XG5cbiAgQElucHV0KCkgc2VsZWN0ZWRUYWI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIFNlbGVjdGlvbiB0YXNrIGJhclxuICBASW5wdXQoKSBzaG93VGFza2JhciA9IGZhbHNlXG5cbiAgLy8gVGFibGUgTmFtZSBmb3Igc3RhdGUgbWFuYWdlXG4gIEBJbnB1dCgpIHRhYmxlTmFtZSA9IHRydWVcblxuXG4gIC8vIExpc3RpbmcgdHlwZVxuICBASW5wdXQoKSBsaXN0aW5nVHlwZTogc3RyaW5nIHwgYm9vbGVhbiA9ICcnO1xuXG4gIC8vIExpc3RpbmcgdHlwZVxuXG4gIEBJbnB1dCgpIGNoZWNrYm94U3RhdGU6IHsgcmVzZXQ6IGJvb2xlYW4gfSA9IHtcbiAgICByZXNldDogdHJ1ZVxuICB9XG5cbiAgLy8gVGFza2JhciBhY3Rpb25zXG4gIEBJbnB1dCgpIHRhc2tiYXJBY3Rpb25zOiBhbnlbXSA9IFtdXG5cblxuICAvLyBTb3J0aW5nIENvbmZpZyB0byBzaG93IHNvcnQgaWNvbnNcbiAgQElucHV0KCkgc29ydGluZ0NvbmZpZzogeyBmaWVsZDogc3RyaW5nLCBvcmRlcl9ieTogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcblxuXG4gIEBJbnB1dCgpIHRhYmxlRmlsdGVyVmlld0lkOiBhbnkgPSAnJztcblxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFibGVMYXlvdXQ6IGFueSA9ICdtZWRpdW0nXG5cbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bjogeyBwcmVzZXQ6IHsgY2xvc2VkOiBib29sZWFuLCBsb2FkaW5nOiBib29sZWFuIH0gfSA9IHsgcHJlc2V0OiB7IGNsb3NlZDogZmFsc2UsIGxvYWRpbmc6IGZhbHNlIH0gfTtcblxuICAvLyBUYWJsZSBWaWV3XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIGdsb2JhbFNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8vIE5lc3RlZCBUYWJsZSBSb3cgRm9udHNpemVcbiAgQElucHV0KCkgbmVzdGVkVGFibGVyb3dGb250c2l6ZSA9IDE0O1xuXG4gIC8vIE5lc3RlZCB0YWJsZSByb3cgSGVhZGVyIHJvdyBIZWlnaHRcbiAgQElucHV0KCkgbmVzdGVkVGFibGVIZWFkZXJSb3dIZWlnaHQgPSA0MDtcblxuICAvLyBOZXN0ZWQgVGFibGUgcm93IGhlaWdodFxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZXJvd0hlaWdodCA9IDQ1O1xuXG4gIEBJbnB1dCgpIHBhY2thZ2VEYXRhOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2hvd1VuTGluazogYW55O1xuXG4gIEBJbnB1dCgpIGdyaWRUeXBlOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKSBjdXJyZW5jeVN5bWJvbDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY3VycmVuY3lGb3JtYXQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIGxlZnRQaW5uZWRCb3hzaGFkb3c6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpIHJpZ2h0UGlubmVkQm94c2hhZG93OiBzdHJpbmcgPSAnJztcblxuICAvLyBHbG9iYWxTZWFyY2hcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnIzhhYzVmZic7XG5cbiAgLy8gR2xvYmFsU2VhcmNoXG4gIEBJbnB1dCgpIG5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2Y2ZjhmZic7XG5cblxuICBASW5wdXQoKSBuZXN0ZWRUYWJsZVJvd0JhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNlYWVhZWEnO1xuXG4gIEBJbnB1dCgpIHRhYmxlVmlldzogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBidXR0b25zOiB7IG5hbWU6IHN0cmluZzsgaXNfc2hvd0ljb246IGJvb2xlYW47IGljb246IHN0cmluZywgaGFzX3Blcm1pc3Npb246IGJvb2xlYW4gfVtdID0gW107XG5cbiAgQElucHV0KCkga2VlcE11bHRpcGxlRXhwYW5kZWREZXRhaWxzID0gZmFsc2U7XG5cblxuICBASW5wdXQoKSBzaG93VG90YWxBbW91bnRSb3cgPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUdsb2JhbFNlYXJjaCA9IHRydWU7XG5cblxuICBASW5wdXQoKSB0YWJsZVR5cGUgPSAnJztcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUV4cG9ydCA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgc2hvd0Z1bGxTY3JlZW5CdXR0b24gPSBmYWxzZTtcblxuXG4gIEBJbnB1dCgpIGVuYWJsZUN1dCA9IGZhbHNlO1xuXG5cbiAgQElucHV0KCkgdGFiczogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Q2hlY2tib3hlcyA9IHRydWU7XG5cblxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbMTAsIDI1LCA1MCwgNzUsIDEwMCwgMTUwLCAyMDAsIDI1MCwgMzAwLCA1MDBdO1xuXG5cbiAgQElucHV0KCkgcmVzZXRBbGxGaWx0ZXJzID0geyByZXNldEFsbDogZmFsc2UgfTtcblxuICBASW5wdXQoKSBkZWZhdWx0Q29uZmlnOiBEYXRhR3JpZENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG5cbiAgQElucHV0KCkgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZyA9IHtcbiAgICBzaG93UGlubGVmdDogdHJ1ZSxcbiAgICBzaG93UGlucmlnaHQ6IHRydWUsXG4gICAgc2hvd0FzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RGVzY2VuZGluZzogdHJ1ZSxcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxuICAgIHNob3dSb3dzR3JvdXBpbmc6IHRoaXMuc2hvd1Jvd3NHcm91cGluZyxcbiAgICBzaG93QXV0b3NpemVBbGxDb2x1bW5zOiB0cnVlLFxuICAgIHNob3dBdXRvc2l6ZVRoaXNDb2x1bW46IGZhbHNlLFxuICAgIHNob3dDaG9zZUNvbHVtbnM6IGZhbHNlLFxuICAgIHNob3dSZXNldENvbHVtbnM6IGZhbHNlLFxuICB9O1xuXG4vLyBmb3IgYWN0aW9uIHZhbGlkYXRpb247XG4gIEBJbnB1dCgpIHZhbGlkYXRlSWNvbiA6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBPdXQgUHV0IEV2ZW50c1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuXG5cbiAgLy9DaGFuZ2UgVGFibGUgTGF5b3V0XG4gIEBWaWV3Q2hpbGRyZW4oQ2VsbEhvc3REaXJlY3RpdmUpIGNlbGxIb3N0cyE6IFF1ZXJ5TGlzdDxDZWxsSG9zdERpcmVjdGl2ZT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFuZ2VMYXlvdXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgcHVibGljIGN1c3RvbUNlbGxFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8vIEZpbHRlciBBcHBseSBldmVudDtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWx0ZXJPcHRpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGdlbmVyaWNFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIHRhYmxlUHJlc2V0Q29uZmlnOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KCkgc29ydGluZ09yZGVyT3B0aW9uczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuXG5cblxuXG5cbiAgc3RvcmVQcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gIGFjdGl2ZVRhYjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGdyb3VwZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBhY3RpdmVDb2w6IGFueSA9IG51bGw7XG4gIGFjdGl2ZUZpbHRlckNlbGw6IGFueSA9IG51bGw7XG4gIHNob3dBY3Rpb25zRHJvcERvd24gPSBmYWxzZTtcbiAgc2lkZU1lbnVWaXNpYmxlID0gZmFsc2U7XG4gIHBpdm90TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb2x1bW5TZWFyY2g6IHN0cmluZyA9ICcnO1xuICBleHBhbmRBbGxBY2NvcmRpYW5zID0gdHJ1ZTtcbiAgY3VycmVudE9wZW5lZFNpZGVNZW51ZTogJ2NvbHMnIHwgJ2ZpbHRycycgfCBudWxsID0gbnVsbDtcbiAgb3JpZ2luYWxDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBvcmlnaW5hbERhdGFTZXQ6IGFueVtdID0gW107XG4gIGFjdGl2ZVRvcEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9ICcnO1xuICBmaWx0ZXJDb2x1bW5zTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBCb3hQYWRkaW5nID0gMjAwO1xuICBwcmVzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJlc2V0RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHNlYXJjaFRleHRQcmVzZXRUYWJsZSA9ICcnO1xuICBhZGRGaWx0ZXJDb2x1bW5JbnB1dCA9ICcnO1xuICBzZWFyY2hJbkRyb3Bkb3duID0gJyc7XG4gIHByaXZhdGUgc2VjcmV0S2V5ID0gJ3RiLXN1cGVyLWFkbWluJ1xuICBhZGRGaWx0ZXJEcm9wZG93blNlYXJjaCA9ICcnXG4gIHRvcFNob3dIaWRlQ29sdW1ucyA9ICcnO1xuICBjaG9zZUNvbHVtbnNTZWFyY2ggPSAnJ1xuICBzaWRlTmVzdGVkRmlsdGVyU2VhcmNoID0gJydcbiAgZWRpdGluRHJvcGRvd25TZWFyY2ggPSAnJztcbiAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIGNvbmZpcm1EZWxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBvcmlnaW5hbEFjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGZvbnRGYW1pbGllczogc3RyaW5nW10gPSBbXG4gICAgLy8gQ29tbW9uIEV4Y2VsIGZvbnRzXG4gICAgJ0FyaWFsJyxcbiAgICAnQXJpYWwgQmxhY2snLFxuICAgICdCYWhuc2NocmlmdCcsXG4gICAgJ0NhbGlicmknLFxuICAgICdDYW1icmlhJyxcbiAgICAnQ2FtYnJpYSBNYXRoJyxcbiAgICAnbWF0aCcsXG4gICAgJ0NhbmRhcmEnLFxuICAgICdDb21pYyBTYW5zIE1TJyxcbiAgICAnQ29uc29sYXMnLFxuICAgICdDb25zdGFudGlhJyxcbiAgICAnQ29yYmVsJyxcbiAgICAnQ291cmllciBOZXcnLFxuICAgICdFYnJpbWEnLFxuICAgICdGcmFua2xpbiBHb3RoaWMgTWVkaXVtJyxcbiAgICAnR2FicmlvbGEnLFxuICAgICdHYWR1Z2knLFxuICAgICdHZW9yZ2lhJyxcbiAgICAnSW1wYWN0JyxcbiAgICAnSW5rIEZyZWUnLFxuICAgICdKYXZhbmVzZSBUZXh0JyxcbiAgICAnTGVlbGF3YWRlZSBVSScsXG4gICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAnTHVjaWRhIFNhbnMgVW5pY29kZScsXG4gICAgJ01hbGd1biBHb3RoaWMnLFxuICAgICdNaWNyb3NvZnQgSGltYWxheWEnLFxuICAgICdNaWNyb3NvZnQgSmhlbmdIZWknLFxuICAgICdNaWNyb3NvZnQgTmV3IFRhaSBMdWUnLFxuICAgICdNaWNyb3NvZnQgUGhhZ3NQYScsXG4gICAgJ01pY3Jvc29mdCBTYW5zIFNlcmlmJyxcbiAgICAnTWljcm9zb2Z0IFRhaSBMZScsXG4gICAgJ01pY3Jvc29mdCBZYUhlaScsXG4gICAgJ01pY3Jvc29mdCBZaSBCYWl0aScsXG4gICAgJ01vbmdvbGlhbiBCYWl0aScsXG4gICAgJ01TIEdvdGhpYycsXG4gICAgJ01TIFBHb3RoaWMnLFxuICAgICdNUyBVSSBHb3RoaWMnLFxuICAgICdNViBCb2xpJyxcbiAgICAnTmlybWFsYSBVSScsXG4gICAgJ1BhbGF0aW5vIExpbm90eXBlJyxcbiAgICAnU2Vnb2UgUHJpbnQnLFxuICAgICdTZWdvZSBTY3JpcHQnLFxuICAgICdTZWdvZSBVSScsXG4gICAgJ1NlZ29lIFVJIEhpc3RvcmljJyxcbiAgICAnU2Vnb2UgVUkgRW1vamknLFxuICAgICdTZWdvZSBVSSBTeW1ib2wnLFxuICAgICdTaW1TdW4nLFxuICAgICdTaXRrYSBTbWFsbCcsXG4gICAgJ1N5bGZhZW4nLFxuICAgICdTeW1ib2wnLFxuICAgICdUYWhvbWEnLFxuICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICdUcmVidWNoZXQgTVMnLFxuICAgICdWZXJkYW5hJyxcbiAgICAnV2ViZGluZ3MnLFxuICAgICdXaW5nZGluZ3MnLFxuICAgICdZdSBHb3RoaWMnLFxuICAgICdzYW5zLXNlcmlmJyxcbiAgICAnc2VyaWYnLFxuICAgICdtb25vc3BhY2UnLFxuICAgICdJbnRlcidcbiAgXTtcblxuICBmb250U2l6ZXM6IHN0cmluZ1tdID0gW1xuICAgICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTQnLCAnMTYnLCAnMTgnLCAnMjAnLCAnMjQnXG4gIF07XG5cbiAgaGFzU2Nyb2xsID0gZmFsc2U7XG5cblxuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb2x1bW5TZXJ2aWNlOiBTcGxpdENvbHVtbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBjb21tb25TZXZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjb3B5U2VydmljZTogQ29weVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGZvcm1hdEN1cnJlbmN5OiBGb3JtYXRDdXJyZW5jeVBpcGUsXG4gICAgcHJpdmF0ZSBhY3Rpb25WYWxpZGF0b3IgOiBSb3dBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdmFsaWRhdGlvbnNTZXJ2aWNlIDogVmFsaWRhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHRtbFNhbmF0aXplclNlcnZpY2UgOiBIdG1sQ29udGVudFNhbml0aXplclNlcnZpY2UsXG5cbiAgKSB7IH1cblxuICBAVmlld0NoaWxkKCdjZWxsVGV4dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBjZWxsVGV4dCE6IGFueTtcbiAgQFZpZXdDaGlsZCgnbmVzdGVkSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIG5lc3RlZEhlYWRlciE6IEVsZW1lbnRSZWY7XG4gIFxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMuY29tcHV0ZVZpZXdwb3J0Um93cygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gXG4gICAgICBpZiAodGhpcy5jZWxsVGV4dCkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlbGxUZXh0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuIFxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMucmVuZGVyQ3VzdG9tQ2VsbHMoKTtcbiAgICB0aGlzLmJ1aWxkUGFnZVNpemVLZXlNYXAoKTtcbiAgICAgfSwgMTAwMCk7XG4gXG4gIH1cblxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBjcmVhdGVDZWxsSW5qZWN0b3Iocm93OiBhbnksIGNvbDogYW55KTogSW5qZWN0b3Ige1xuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogJ3Jvd0RhdGEnLCB1c2VWYWx1ZTogcm93IH0sXG4gICAgICAgIHsgcHJvdmlkZTogJ2NvbERhdGEnLCB1c2VWYWx1ZTogY29sIH1cbiAgICAgIF0sXG4gICAgICBwYXJlbnQ6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSByZW5kZXJDdXN0b21DZWxscygpOiB2b2lkIHtcbiAgICBjb25zdCBob3N0cyA9IHRoaXMuY2VsbEhvc3RzLnRvQXJyYXkoKTtcbiAgICBsZXQgaG9zdEluZGV4ID0gMDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMudmlzaWJsZVJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICBjb25zdCBob3N0ID0gaG9zdHNbaG9zdEluZGV4KytdO1xuICAgICAgICBpZiAoIWhvc3QgfHwgIWNvbC5jZWxsUmVuZGVyZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSBob3N0LnZpZXdDb250YWluZXJSZWY7XG4gICAgICAgIHZpZXdDb250YWluZXIuY2xlYXIoKTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gdmlld0NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29sLmNlbGxSZW5kZXJlcik7XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpLFxuICAgICAgICAgIGFwaTogdGhpcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGNvbXBSZWYuaW5zdGFuY2UgYXMgYW55KS5ncmlkSW5pdCkge1xuICAgICAgICAgIChjb21wUmVmLmluc3RhbmNlIGFzIGFueSkuZ3JpZEluaXQocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiBzaG91bGRSZXN0b3JlU2Nyb2xsID0gZmFsc2U7XG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgIHRoaXMuYWRkU3R5bGVzVG9JbWFnZXMoKTtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGlmIChcbiAgICAgIHRoaXMuc2hvdWxkUmVzdG9yZVNjcm9sbCAmJlxuICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keT8ubmF0aXZlRWxlbWVudFxuICAgICkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdDtcbiAgICAgICAgdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclBpbm5lZEhlYWRlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLnNob3VsZFJlc3RvcmVTY3JvbGwgPSBmYWxzZTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vICBpZiAodGhpcy50YWJzPy5sZW5ndGgpIHtcbiAgICAvLyAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzWzBdO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLmF1dG9zaXplQWxsQ29sdW1ucygpO1xuICAgIGlmICghdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgIC8vIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHVzZXIgPSB0aGlzLmdldERlY3J5cHQoJ3VzZXInKTtcbiAgICAvLyB0aGlzLmN1cnJlbmN5Rm9ybWF0ID0gdXNlcj8uY3VycmVuY3lfZm9ybWF0O1xuICAgIC8vIHRoaXMuY3VycmVuY3lTeW1ib2wgPSB1c2VyPy5jdXJyZW5jeV9zeW1ib2w7XG4gICAgLy8gdGhpcy5kYXRlRm9ybWF0ID0gdXNlcj8uZGF0ZV9mb3JtYXQ7XG4gICAgaWYgKCF0aGlzLmRhdGVGb3JtYXQpIHtcbiAgICAgIGNvbnN0IHN0b3JlZERhdGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0ZWZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZERhdGVGb3JtYXQpIHtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gc3RvcmVkRGF0ZUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkRGF0ZUZvcm1hdCkgOiAnZGQvTU0veXl5eSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeUZvcm1hdCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5Rm9ybWF0KSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lGb3JtYXQgPSBzdG9yZWRDdXJyZW5jeUZvcm1hdCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lGb3JtYXQpIDogJzEsMjM0LDU2Ny44OSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICBjb25zdCBzdG9yZWRDdXJyZW5jeVN5bWJvbCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW5jeVN5bWJvbCcpO1xuICAgICAgaWYgKHN0b3JlZEN1cnJlbmN5U3ltYm9sKSB7XG4gICAgICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBzdG9yZWRDdXJyZW5jeVN5bWJvbCA/IEpTT04ucGFyc2Uoc3RvcmVkQ3VycmVuY3lTeW1ib2wpIDogJyQnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgLy8gcHJpdmF0ZSBnZXREZWNyeXB0KGtleTpzdHJpbmcpe1xuICAvLyAgICAgY29uc3QgdmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpXG4gIC8vICAgICB0cnkge1xuICAvLyAgICAgICByZXR1cm4gSlNPTi5wYXJzZShDcnlwdG9KUy5BRVMuZGVjcnlwdCh2YWx1ZSBhcyBzdHJpbmcsIHRoaXMuc2VjcmV0S2V5KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCkpXG4gIC8vICAgICB9IGNhdGNoIChlKSB7XG4gIC8vICAgICAgIHJldHVybiBudWxsO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICBkYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICBhd2FpdCB0aGlzLnNldENvbHVtbnNDb2x1bW5Ecm9wZG93blZhbHVzKCk7XG5cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICBpZiAoY2hhbmdlc1sndGFicyddKSB7XG4gICAgICAgIGNvbnN0IGFsbFRhYnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhY3RpdmVUYWJzJykgfHwgJ3t9Jyk7XG4gICAgICAgICBsZXQgc2F2ZWRUYWIgXG4gICAgICAgICB0aGlzLnNlbGVjdGVkVGFiID8gKCBzYXZlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWIgKSA6ICggc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSlcbiAgICAgICAgLy8gY29uc3Qgc2F2ZWRUYWIgPSBhbGxUYWJzW3RoaXMudGFibGVUeXBlXTtcbiAgICAgICAgaWYgKHRoaXMudGFicy5pbmNsdWRlcygnQ3VycmVudCBQb2xpY3knKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzPy5bMV0gfHwgJ0N1cnJlbnQgUG9saWN5JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHNhdmVkVGFiIHx8IHRoaXMudGFicz8uWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgKHRoaXMudGFibGVUeXBlKSB7XG4gICAgICAgIC8vICAgdGhpcy5zZXRBY3RpdmVUYWIodGhpcy5hY3RpdmVUYWIpO1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydmaWx0ZXJzQ29uZmlnJ10pIHtcbiAgICAgIHRoaXMuY2hlY2tGaWx0ZXJDaGFuZ2VzRWZmZWN0KCk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoKSB7XG5cbiAgICAgIGF3YWl0IHRoaXMuYXBwbHlGaWx0ZXJvcHRpb25MaXN0KCk7XG5cbiAgICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBxdWVyeTogY29sLnF1ZXJ5ID8geyAuLi5jb2wucXVlcnkgfSA6IG51bGwsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgID8gWy4uLmNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWVdXG4gICAgICAgICAgOiBbXSxcbiAgICAgIH0pKTtcblxuXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5TZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuc2V0U2VjdGlvbnNXaWR0aCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydkYXRhU2V0J10pIHtcbiAgICAgIHRoaXMuZGF0YVNldCA9IHRoaXMuZGF0YVNldD8ubWFwKChyb3csIGkpID0+ICh7XG4gICAgICAgIC4uLnJvdyxcbiAgICAgICAgX192aXJ0dWFsSW5kZXg6IGkgKyAxLFxuICAgICAgfSkpO1xuICAgICAgdGhpcy5vcmlnaW5hbERhdGFTZXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kYXRhU2V0KTtcbiAgICAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG5cbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb21wdXRlVmlld3BvcnRSb3dzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICAgICBpZih0aGlzLmNvbW1vblNldmljZT8ubWFpbkNvbnRhaW5lckxlZnQgPiAyMDApXG4gICAgICAgICAgdGhpcy5zaG91bGRSZXN0b3JlU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmNlbnRlclBpbm5lZEhlYWRlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB2b2lkIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0TG9hZGluZyA9IHRydWU7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRhU2V0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBseVJvd3NTZWxlY3Rpb25TdGF0ZSgpO1xuXG4gICAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zLmZvckVhY2goZ3JvdXBlZENvbCA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgZ3JvdXBlZENvbC5maWVsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuXG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY2hlY2tib3hTdGF0ZSddPy5jdXJyZW50VmFsdWU/LnJlc2V0KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5jbGVhcigpO1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcblxuICAgICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICAgIG9iajogaWRzLFxuICAgICAgICB9LFxuICAgICAgICBldmVudFR5cGU6ICdvblNlbGVjdFJvdycsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY2xvc2VEcm9wZG93biddICYmIHRoaXMuY2xvc2VEcm9wZG93bi5wcmVzZXQuY2xvc2VkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9IG51bGw7XG4gICAgICB0aGlzLnByZXNldEZpbHRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5wcmVzZXROYW1lID0gJyc7XG4gICAgfVxuXG4gICAgLy8gaWYgKGNoYW5nZXNbJ29kZFJvd3NCYWNrZ3JvdW5kQ29sb3InXSkge1xuICAgIC8vICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9ICEhdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yO1xuICAgIC8vIH1cblxuICAgIGlmIChjaGFuZ2VzWydyZXNldEFsbEZpbHRlcnMnXSAmJiB0aGlzLnJlc2V0QWxsRmlsdGVycy5yZXNldEFsbCkge1xuICAgICAgdGhpcy5jbGVhckFsbEZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1sndGFibGVWaWV3J10pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2aWV3VmFsdWUgPSB0aGlzLnRhYmxlVmlldztcbiAgICAgICAgbGV0IHRlbXByb3J5U2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KHZpZXdWYWx1ZSlcbiAgICAgICAgICA/IHZpZXdWYWx1ZS5maW5kKGl0ZW0gPT4gaXRlbS5pc190ZW1wKVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBpZiAoIXRlbXByb3J5U2VsZWN0ZWQpIHtcbiAgICAgICAgICB0ZW1wcm9yeVNlbGVjdGVkID0gQXJyYXkuaXNBcnJheSh2aWV3VmFsdWUpXG4gICAgICAgICAgICA/IHZpZXdWYWx1ZS5maW5kKGl0ZW0gPT4gaXRlbS5pc19kZWZhdWx0KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUgPSB0ZW1wcm9yeVNlbGVjdGVkIHx8IG51bGw7XG4gICAgICAgIHRoaXMucHJlc2V0TmFtZSA9IHRlbXByb3J5U2VsZWN0ZWQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgIHRoaXMuc3RvcmVQcmVzZXROYW1lID0gdGVtcHJvcnlTZWxlY3RlZD8ubmFtZSB8fCAnJztcbiAgICAgICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSB0ZW1wcm9yeVNlbGVjdGVkPy5hY3RpdmVGaWx0ZXJzIHx8IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcucm93U2hhZGluZ0VuYWJsZWQ7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5zaG93VmVydGljYWxCb3JkZXI7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gdGVtcHJvcnlTZWxlY3RlZC5jb25maWcuZm9udEZhaW1seTtcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0ZW1wcm9yeVNlbGVjdGVkLmNvbmZpZy5oZWFkZXJUZXh0Rm9udHNTaXplO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQ7XG4gICAgICAgICAgdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplO1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9IHRlbXByb3J5U2VsZWN0ZWQuY29uZmlnLmdsb2JhbFNlYXJjaDtcbiAgICAgICAgICB0aGlzLnNldFRhYmxlTGF5b3V0KHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCk7XG4gICAgICAgICAgdGhpcy5vZGRSb3dzQmFja2dyb3VuZENvbG9yID0gdGVtcHJvcnlTZWxlY3RlZD8uY29uZmlnPy5vZGRSb3dzQmFja2dyb3VuZENvbG9yIHx8ICcjZjFmMWYxJztcbiAgICAgICAgICBjb25zdCBncm91cGVkQ29sdW1ucyA9IHRlbXByb3J5U2VsZWN0ZWQ/LmNvbmZpZz8uZ3JvdXBlZENvbHVtbnM7XG4gICAgICAgICAgaWYoZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5zID0gc3RydWN0dXJlZENsb25lKGdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5kYXRhU2V0LCB0aGlzLmdyb3VwZWRDb2x1bW5zKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9ICBlbHNlIGlmKHRoaXMuZGVmYXVsdENvbmZpZyl7XG4gICAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IHRoaXMuZGVmYXVsdENvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNob3dWZXJ0aWNhbEJvcmRlciA9IHRoaXMuZGVmYXVsdENvbmZpZy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2U7XG4gICAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gdGhpcy5kZWZhdWx0Q29uZmlnLmZvbnRGYWltbHkgfHwgJ0ludGVyJztcbiAgICAgICAgICB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSB0aGlzLmRlZmF1bHRDb25maWcuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSB0aGlzLmRlZmF1bHRDb25maWcuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtJztcbiAgICAgICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5kZWZhdWx0Q29uZmlnLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0O1xuICAgICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9IHRoaXMuZGVmYXVsdENvbmZpZy5nbG9iYWxTZWFyY2g7XG4gICAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCh0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQpO1xuICAgICAgICAgIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpO1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWRDb2x1bW5zID0gdGhpcy5kZWZhdWx0Q29uZmlnPy5ncm91cGVkQ29sdW1ucztcbiAgICAgICAgICBpZihncm91cGVkQ29sdW1ucz8ubGVuZ3RoKXtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ3JvdXBlZENvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLmRhdGFTZXQsIHRoaXMuZ3JvdXBlZENvbHVtbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZvbnRGYWltbHkgPSAnSW50ZXInO1xuICAgICAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9ICdtZWRpdW0nO1xuICAgICAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSAxNDtcbiAgICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFRleHQgPSAnJztcbiAgICAgICAgICB0aGlzLmF1dG9TaXplQ29sdW1uc0J5UmF0aW8oKTtcbiAgICAgICAgICAgdGhpcy5wcmVzZXROYW1lID0gJydcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBpZihjaGFuZ2VzWydwYWdlU2l6ZU9wdGlvbnMnXSAmJiBjaGFuZ2VzWydwYWdlU2l6ZU9wdGlvbnMnXT8uY3VycmVudFZhbHVlKXtcbiAgICAgIHRoaXMuYnVpbGRQYWdlU2l6ZUtleU1hcCgpO1xuICAgIH1cblxuICB9XG5cblxuICBcblxuICBhc3luYyBzZXRDb2x1bW5zQ29sdW1uRHJvcGRvd25WYWx1cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29sdW1ucykgcmV0dXJuO1xuICAgIC8vIEp1c3QgcmVtb3ZlZCB0ZW1wb3JhcnkgZm9yIHN1cGVyIGFkbWluIHdpbGwgc2V0IGl0IGFnYWluXG4gICAgLy8gaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgLy8gICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcihjID0+IGM/LmZpZWxkPy50cmltKCkgIT09ICdpc19kZWxldGVkJylcbiAgICAvLyB9XG4gICAgdGhpcy5jb2x1bW5zID0gYXdhaXQgdGhpcy5jb21tb25TZXZpY2UuY29weURyb3Bkb3duRGF0YVJlY3Vyc2l2ZWx5KHRoaXMuY29sdW1ucyk7XG4gIH1cblxuXG5cblxuICBhcHBseVJvd3NTZWxlY3Rpb25TdGF0ZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZElkc0Zyb21TdGF0ZSA9IHRoaXMucmVzdG9yZVNlbGVjdGlvbih0aGlzLnRhYmxlVHlwZSk7XG4gICAgaWYgKHNlbGVjdGVkSWRzRnJvbVN0YXRlLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgICAgb2JqOiBpZHNcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiBcIm9uU2VsZWN0Um93XCIsXG4gICAgICB9XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvblN0YXRlKHRhYmxlVHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7XCJzZWxlY3RlZFJvd3NcIjoge319Jyk7XG4gICAgaWYgKHN0b3JlZC5zZWxlY3RlZFJvd3MgJiYgc3RvcmVkLnNlbGVjdGVkUm93c1t0YWJsZVR5cGVdKSB7XG4gICAgICBkZWxldGUgc3RvcmVkLnNlbGVjdGVkUm93c1t0YWJsZVR5cGVdO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICdkYXRhdGFibGVTZWxlY3Rpb25zJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHN0b3JlZClcbiAgICApO1xuICB9XG5cblxuXG4gIGFzeW5jIGFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpIHtcbiAgICBjb25zdCB1cGRhdGVkQ29sdW1ucyA9IGF3YWl0IHRoaXMuY29tbW9uU2V2aWNlLmFwcGx5RmlsdGVyc1RvQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgdGhpcy5jb2x1bW5zID0gWy4uLnVwZGF0ZWRDb2x1bW5zXTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgbGVmdFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG4gIGNlbnRlckNvbHVtbnM6IGFueVtdID0gW107XG4gIHJpZ2h0UGlubmVkQ29sdW1uczogYW55W10gPSBbXTtcblxuICBwcmV2aWV3TGVmdFBpbm5lZENvbHVtbnM6IGFueVtdID0gW107XG4gIHByZXZpZXdDZW50ZXJDb2x1bW5zOiBhbnlbXSA9IFtdO1xuICBwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gIC8vIE1haW4gQ29udGFpbmVyIFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnZGF0YUdyaWRDb250YWluZXInKVxuICBkYXRhR3JpZENvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0YXNrTWFuYWdlbWVudENvbnRhaW5lcicpXG4gIHRhc2tNYW5hZ2VtZW50Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ25lc3RlZFRhYmxlQ29udGFpbmVyJylcbiAgbmVzdGVkVGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBCb2R5IFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnbGVmdFBpbm5lZEJvZHknKVxuICBsZWZ0UGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjZW50ZXJQaW5uZWRCb2R5JylcbiAgY2VudGVyUGlubmVkQm9keSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdyaWdodFBpbm5lZEJvZHknKVxuICByaWdodFBpbm5lZEJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAvLyBIZWFkZXJzIFRlbXBsYXRlIFJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnbGVmdFBpbm5lZEhlYWRlcicpXG4gIGxlZnRQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnY2VudGVyUGlubmVkSGVhZGVyJylcbiAgY2VudGVyUGlubmVkSGVhZGVyITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0UGlubmVkSGVhZGVyJylcbiAgcmlnaHRQaW5uZWRIZWFkZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgnZ2xvYmFsU2VhcmNoSW5wdXQnKVxuICBnbG9iYWxTZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZCgnY29sdW1uc0dyb3VwZWRCb3gnKVxuICBjb2x1bW5zR3JvdXBlZEJveCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIC8vIENlbnRlciBGYWtlIHNjcm9sbGJhcmRcbiAgQFZpZXdDaGlsZCgnY2VudGVyRmFrZVNjcm9sbGJhcicpXG4gIGNlbnRlckZha2VTY3JvbGxiYXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgYXN5bmMgdXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKGNvbHVtbnM6IGFueSA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb250YWluZXIpIHJldHVybjtcbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICAvLyBXcmFwIGluIGEgcHJvbWlzZSBzbyB3ZSBjYW4gYXdhaXRcbiAgICBjb25zdCB7IGxlZnQsIGNlbnRlciwgcmlnaHQgfTogYW55ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBjb25zdCBwcmVwYXJlZCA9IHRoaXMuY29sdW1uU2VydmljZS5wcmVwYXJlQ29sdW1ucyhcbiAgICAgICAgY29sdW1ucyA/IGNvbHVtbnMgOiB0aGlzLmNvbHVtbnMsXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApO1xuICAgICAgcmVzb2x2ZShwcmVwYXJlZCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmxlZnRQaW5uZWRDb2x1bW5zID0gbGVmdDtcbiAgICB0aGlzLmNlbnRlckNvbHVtbnMgPSBjZW50ZXI7XG4gICAgdGhpcy5yaWdodFBpbm5lZENvbHVtbnMgPSByaWdodDtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMCkpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hQcmV2aWV3Q29sdW1ucyhjb2x1bW5zOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuZGF0YUdyaWRDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblxuICAgIC8vIFdyYXAgcHJlcGFyZUNvbHVtbnMgaW4gYSBQcm9taXNlIHRvIG1ha2UgaXQgYXdhaXRhYmxlXG4gICAgY29uc3QgeyBsZWZ0LCBjZW50ZXIsIHJpZ2h0IH06IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgY29uc3QgcHJlcGFyZWQgPSB0aGlzLmNvbHVtblNlcnZpY2UucHJlcGFyZUNvbHVtbnMoXG4gICAgICAgIGNvbHVtbnMgPyBjb2x1bW5zIDogdGhpcy5jb2x1bW5zLFxuICAgICAgICBjb250YWluZXJXaWR0aFxuICAgICAgKTtcbiAgICAgIHJlc29sdmUocHJlcGFyZWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcmV2aWV3TGVmdFBpbm5lZENvbHVtbnMgPSBsZWZ0O1xuICAgIHRoaXMucHJldmlld0NlbnRlckNvbHVtbnMgPSBjZW50ZXI7XG4gICAgdGhpcy5wcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zID0gcmlnaHQ7XG4gICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBhc3luYyBTZXRDb2x1bW5zRGVmYXVsdFdpZHRoKCkge1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCB2aXNpYmxlQ291bnQgPSB2aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG5cbiAgICBpZiAodmlzaWJsZUNvdW50ID09PSAwKSByZXR1cm47XG5cbiAgICBsZXQgY29udGFpbmVyV2lkdGggPVxuICAgICAgdGhpcy5kYXRhR3JpZENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMDtcbiAgICBpZiAodGhpcy5zaG93U2VyaWFsTnVtYmVyKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBpZiAodGhpcy5zaG93U2lkZU1lbnUpIGNvbnRhaW5lcldpZHRoIC09IDI5O1xuICAgIC8vIGlmICh0aGlzLmdyaWRUeXBlID09ICdBc3NldHMnIHx8IHRoaXMuZ3JpZFR5cGUgPT0gJ1Rhc2tzJykgY29udGFpbmVyV2lkdGggLT0gMzA7XG4gICAgLy8gY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgLy8gaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgLy8gaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICAvLyBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIC8vIGNvbnRhaW5lcldpZHRoIC09IDU7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5TZXJ2aWNlLmFzc2lnbkRlZmF1bHRXaWR0aHMoXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICBjb250YWluZXJXaWR0aFxuICAgICk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDApKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHNldFNlY3Rpb25zV2lkdGgoKSB7XG4gICAgY29uc3QgbGVmdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sZWZ0LXBpbm5lZC1ib2R5JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgY2VudGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuY2VudGVyLXNjcm9sbGFibGUtYm9keSdcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnJpZ2h0LXBpbm5lZC1ib2R5JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKGxlZnQpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLmxlZnRQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgICBpZiAoY2VudGVyKSB7XG4gICAgICBsZWZ0LnN0eWxlLm1pbldpZHRoID0gYCR7dGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH1gO1xuICAgIH1cbiAgICBpZiAocmlnaHQpIHtcbiAgICAgIGxlZnQuc3R5bGUubWluV2lkdGggPSBgJHt0aGlzLnJpZ2h0UGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh9YDtcbiAgICB9XG4gIH1cblxuICAvLyBvbkNlbnRlckJvZHlTY3JvbGwoKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIGNvbnN0IHNjcm9sbExlZnQgPSB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gIC8vICAgLy8gU3luYyB2ZXJ0aWNhbCBzY3JvbGwgd2l0aCBsZWZ0ICYgcmlnaHQgcGlubmVkIGJvZGllc1xuICAvLyAgIHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5yaWdodFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG5cbiAgLy8gICAvLyBTeW5jIGhvcml6b250YWwgc2Nyb2xsIHdpdGggY2VudGVyIGhlYWRlclxuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJGYWtlU2Nyb2xsYmFyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gIC8vIH1cblxuICAvLyBvbkxlZnRCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMubGVmdFBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyB9XG4gIC8vIG9uUmlnaHRCb2R5U2Nyb2xsKCk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMucmlnaHRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAvLyAgIHRoaXMuY2VudGVyUGlubmVkQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgLy8gICB0aGlzLmxlZnRQaW5uZWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyB9XG5cbiAgZmFrZVNjcm9sbGJhclNjcm9sbExlZnQgPSAwO1xuICAvLyBvbkZha2VTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gIC8vICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAvLyAgIHRoaXMuZmFrZVNjcm9sbGJhclNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgLy8gICB0aGlzLmNlbnRlclBpbm5lZEJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vICAgdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gIC8vIH1cblxuXG5cblxuICAvLyBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueSB7XG4gIC8vICAgcmV0dXJuIGZpZWxkPy5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xuICAvLyB9XG5nZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueSB7XG4gIGlmICghb2JqIHx8ICFmaWVsZCkgcmV0dXJuIG51bGw7XG4gIFxuICAvLyBHZXQgdGhlIHJhdyB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIG9iaik7XG4gIFxuICAvLyDinIUgSWYgaXQncyBhIHN0YXR1cyBmaWVsZCwgY2FwaXRhbGl6ZSB0aGUgdmFsdWVcbiAgaWYgKHRoaXMuaXNTdGF0dXNGaWVsZChmaWVsZCkgJiYgdmFsdWUpIHtcbiAgICAvLyBIYW5kbGUgb2JqZWN0IHdpdGggdmFsdWUvbmFtZSBwcm9wZXJ0aWVzXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlID8gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlLnZhbHVlKSA6IHZhbHVlLnZhbHVlLFxuICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lID8gdGhpcy5jYXBpdGFsaXplU3RhdHVzKHZhbHVlLm5hbWUpIDogdmFsdWUubmFtZVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gSGFuZGxlIHBsYWluIHN0cmluZy9udW1iZXIgdmFsdWVzXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRoaXMuY2FwaXRhbGl6ZVN0YXR1cyh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gdmFsdWU7XG59XG4gIGlzTmVzdGVkVmFsdWVBcnJheShvYmo6IGFueSwgZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghb2JqIHx8ICFmaWVsZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHZhbHVlID0gZmllbGRcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAucmVkdWNlKChhY2MsIHBhcnQpID0+IChhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQgPyBhY2NbcGFydF0gOiB1bmRlZmluZWQpLCBvYmopO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfVxuXG4gIG9uUmVzaXplR3JvdXAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbDogYW55LCBpc1JpZ2h0UGlubmVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY29sLmNoaWxkcmVuIHx8IFtdO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBjaGlsZFdpZHRoczogeyBmaWVsZDogc3RyaW5nOyB3aWR0aDogbnVtYmVyIH1bXSA9IGNoaWxkcmVuLm1hcChcbiAgICAgIChjaGlsZDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICBgW2ZpZWxkPVwiJHtjaGlsZC5maWVsZH1cIl1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IGNoaWxkLmZpZWxkLFxuICAgICAgICAgIHdpZHRoOiBlbD8ub2Zmc2V0V2lkdGggfHwgMCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdG90YWxJbml0aWFsV2lkdGggPSBjaGlsZFdpZHRocy5yZWR1Y2UoXG4gICAgICAoc3VtLCBjb2wpID0+IHN1bSArIGNvbC53aWR0aCxcbiAgICAgIDBcbiAgICApO1xuXG4gICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBsZXQgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG5cbiAgICAgIGlmIChpc1JpZ2h0UGlubmVkKSB7XG4gICAgICAgIGRlbHRhWCA9IC1kZWx0YVg7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXZlbnQgc2hyaW5raW5nIHRvbyBzbWFsbFxuICAgICAgaWYgKHRvdGFsSW5pdGlhbFdpZHRoICsgZGVsdGFYIDwgY2hpbGRyZW4ubGVuZ3RoICogODApIHJldHVybjtcblxuICAgICAgbGV0IHRvdGFsTmV3V2lkdGggPSAwO1xuXG4gICAgICBjaGlsZFdpZHRocy5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCByYXRpbyA9IGNoaWxkLndpZHRoIC8gdG90YWxJbml0aWFsV2lkdGg7XG4gICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoY2hpbGQud2lkdGggKyBkZWx0YVggKiByYXRpbywgODApO1xuICAgICAgICB0b3RhbE5ld1dpZHRoICs9IG5ld1dpZHRoO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtjaGlsZC5maWVsZH1cIl1gKTtcbiAgICAgICAgY2hpbGRFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBlbEh0bWwgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBlbEh0bWwuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgICAgZWxIdG1sLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoSW5Tb3VyY2VCeUZpZWxkKGNoaWxkLmZpZWxkLCBuZXdXaWR0aCk7XG4gICAgICB9KTtcblxuICAgICAgLy8g4pyFIFVwZGF0ZSBncm91cCBoZWFkZXIgd2lkdGggaW4gRE9NXG4gICAgICBjb25zdCBncm91cEhlYWRlckVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFtncm91cD1cIiR7Y29sLmhlYWRlcn1cIl1gXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGdyb3VwSGVhZGVyRWwpIHtcbiAgICAgICAgZ3JvdXBIZWFkZXJFbC5zdHlsZS53aWR0aCA9IGAke3RvdGFsTmV3V2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdGFibGVfY29uZmlnOiB7XG4gICAgICAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkIHx8IGZhbHNlLFxuICAgICAgICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyIHx8IGZhbHNlLFxuICAgICAgICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHkgfHwgJ0ludGVyJyxcbiAgICAgICAgICAgaGVhZGVyVGV4dEZvbnRzU2l6ZTogdGhpcy5oZWFkZXJUZXh0Q29sb3IgfHwgMTQsXG4gICAgICAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtZCcsXG4gICAgICAgICAgIGJvZHlUZXh0Rm9udHNTaXplOiB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0LFxuICAgICAgICAgICBnbG9iYWxTZWFyY2g6IHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCxcbiAgICAgICAgICAgZmlsdGVyTmFtZXM6ICcnLFxuICAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgICBhY3RpdmVGaWx0ZXJzOiB0cnVlLFxuICAgICAgICAgICBvZGRSb3dzQmFja2dyb3VuZENvbG9yOiAnI2YxZjFmMSdcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoZmllbGQ6IHN0cmluZywgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICB1cGRhdGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgICAgY29sLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkYXRlKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZygpe1xuICAgIHJldHVybiB7XG4gICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdGFibGVfY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICByb3dTaGFkaW5nRW5hYmxlZDogdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHNob3dWZXJ0aWNhbEJvcmRlcjogdGhpcy5zaG93VmVydGljYWxCb3JkZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHkgIHx8ICdJbnRlcicsXG4gICAgICAgICAgICAgICAgICBoZWFkZXJUZXh0Rm9udHNTaXplOiBOdW1iZXIodGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplKSB8fCAxNCxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFibGVMYXlvdXQ6IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCB8fCAnbWVkaXVtZCcsXG4gICAgICAgICAgICAgICAgICBib2R5VGV4dEZvbnRzU2l6ZTogTnVtYmVyKHRoaXMuYm9keVRleHRGb250c1NpemUpIHx8IDE0LFxuICAgICAgICAgICAgICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLmdsb2JhbFNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lczogJycsXG4gICAgICAgICAgICAgICAgICB0b3RhbENvdW50OiAwLFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmlsdGVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6ICcjZjFmMWYxJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH1cbiAgfVxuXG4gIGNsZWFuQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfX3R5cGVuYW1lLFxuICAgICAgICBfaWQsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZSxcbiAgICAgICAgZmlsdGVyVmFsdWUsXG4gICAgICAgIGV4cGFuZGVkRmlsdGVyLFxuICAgICAgICBjZWxsUmVuZGVyZXIsXG4gICAgICAgIGZpbHRlclJlbmRlcmVyLFxuICAgICAgICBjZWxsQ29tcG9uZW50UmVmLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgaXNSb3dHcm91cGVkLFxuICAgICAgICAuLi5yZXN0XG4gICAgICB9ID0gY29sO1xuXG4gICAgICAvLyBDbGVhbiBkcm9wZG93biB2YWx1ZXMgKF9fdHlwZW5hbWUgcmVtb3ZlZClcbiAgICAgIGNvbnN0IGNsZWFuZWREcm9wZG93biA9IEFycmF5LmlzQXJyYXkoY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICA/IGNvbHVtbl9kcm9wZG93bl92YWx1ZS5tYXAoKHsgX190eXBlbmFtZSwgLi4uZFJlc3QgfSkgPT4gZFJlc3QpXG4gICAgICAgIDogY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgPyAoKHsgX190eXBlbmFtZSwgLi4uZFJlc3QgfSkgPT4gZFJlc3QpKGNvbHVtbl9kcm9wZG93bl92YWx1ZSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIC8vIENsZWFuIHF1ZXJ5IChfX3R5cGVuYW1lIHJlbW92ZWQpXG4gICAgICBjb25zdCBjbGVhbmVkUXVlcnkgPSBBcnJheS5pc0FycmF5KHF1ZXJ5KVxuICAgICAgICA/IHF1ZXJ5Lm1hcCgoeyBfX3R5cGVuYW1lLCAuLi5xUmVzdCB9KSA9PiBxUmVzdClcbiAgICAgICAgOiBxdWVyeVxuICAgICAgICAgID8gKCh7IF9fdHlwZW5hbWUsIF9pZHMsIC4uLnFSZXN0IH0pID0+IHFSZXN0KShxdWVyeSlcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnJlc3QsXG4gICAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY2xlYW5lZERyb3Bkb3duLFxuICAgICAgICBxdWVyeTogY2xlYW5lZFF1ZXJ5LFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVzaXplQ29sdW1uKGV2ZW50OiBNb3VzZUV2ZW50LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuXG4gICAgY29uc3QgdGFyZ2V0RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWBcbiAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRhcmdldEVsPy5vZmZzZXRXaWR0aCB8fCAxNTA7XG5cbiAgICBjb25zdCBtYXRjaGluZ0VscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWApO1xuXG4gICAgLy8g8J+RiSBBZGQgaGlnaGxpZ2h0IHdoaWxlIHJlc2l6aW5nXG4gICAgaWYgKGNvbD8ucGlubmVkID09ICdyaWdodCcpIHtcbiAgICAgIG1hdGNoaW5nRWxzLmZvckVhY2goKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmctaGlnaGxpZ2h0LXJpZ2h0Jyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hpbmdFbHMuZm9yRWFjaCgoZWw6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZy1oaWdobGlnaHQnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgbGV0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xuXG4gICAgICAvLyDwn5GJIFJldmVyc2UgaWYgdGhlIGNvbHVtbiBpcyBwaW5uZWQgdG8gdGhlIHJpZ2h0XG4gICAgICBpZiAoY29sLnBpbm5lZCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICBkZWx0YVggPSAtZGVsdGFYO1xuICAgICAgfVxuXG4gICAgICBsZXQgbmV3V2lkdGggPSBpbml0aWFsV2lkdGggKyBkZWx0YVg7XG4gICAgICBpZiAobmV3V2lkdGggPCA4MCkgcmV0dXJuO1xuXG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIG5ld1dpZHRoKTtcbiAgICAgIGNvbC53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHtcbiAgICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hIZWFkZXJzKCk7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgICBtYXRjaGluZ0Vscy5mb3JFYWNoKChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nLWhpZ2hsaWdodCcpO1xuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nLWhpZ2hsaWdodC1yaWdodCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cblxuXG4gIG9uUmVzaXplR3JvdXBCb3goZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3Qgc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblxuICAgIGNvbnN0IHRhcmdldEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwQm94SGVhZGVyRGl2Jyk7XG4gICAgY29uc3QgaW5pdGlhbFdpZHRoID0gdGFyZ2V0RWw/Lm9mZnNldFdpZHRoIHx8IDE1MDtcblxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XG5cbiAgICAgIGxldCBuZXdXaWR0aCA9IGluaXRpYWxXaWR0aCArIGRlbHRhWDtcbiAgICAgIGlmIChuZXdXaWR0aCA8IDEwMCkgbmV3V2lkdGggPSAxMDA7XG5cbiAgICAgIGlmICh0YXJnZXRFbCkge1xuICAgICAgICB0YXJnZXRFbC5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgdGFyZ2V0RWwuc3R5bGUubWluV2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XG4gICAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gbmV3V2lkdGg7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICB9XG5cbiAgb25QYXN0ZUluRmlsdGVyUm93U2VhcmNoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgY29sOiBhbnkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UoY29sKTtcbiAgICAgIHRoaXMuYXBwbHlEcm9wZG93bkZpbHRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXJDaGFuZ2UoY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNvbC5maWx0ZXJWYWx1ZT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuICAgIGlmICghY29sPy5xdWVyeSkge1xuICAgICAgY29sLnF1ZXJ5ID0ge1xuICAgICAgICBmaXJzdF9jb25kaXRpb246IGNvbC50eXBlID09ICdkYXRlJyA/ICdlcXVhbCcgOiAnY29udGFpbicsXG4gICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiBudWxsLFxuICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGwsXG4gICAgICAgIGNvbmRpdGlvbjogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICBjb2wucXVlcnkuZmlyc3RfdmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgICB0aGlzLmZpcnN0VmFsdWUgPSBmaWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIC8vIEdldCBCb2R5IEhlaWdodFxuICBnZXQgYm9keVdyYXBwZXJIZWlnaHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCByb3dzID0gdGhpcy5zaG93Q29sdW1uc0dyb3VwaW5nICYmIHRoaXMuc2hvd0ZpbHRlclJvdyA/IDMgOiAodGhpcy5zaG93Q29sdW1uc0dyb3VwaW5nIHx8IHRoaXMuc2hvd0ZpbHRlclJvdyA/IDIgOiAxKTtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmhlYWRlclJvd0hlaWdodCAqIHJvd3MgKyAodGhpcy5oYXNTY3JvbGwgPyAxNyA6IDApO1xuICAgIHJldHVybiBgY2FsYygxMDAlIC0gJHtvZmZzZXR9cHgpYDtcbiAgfVxuXG4gIC8vIFJvdyBIb3ZlciBMb2dpYyBIZXJlXG4gIGhvdmVyZWRSb3dJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIG9uUm93SG92ZXIocm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRSb3dJZCA9IHJvdy5faWQgfHwgcm93LmlkO1xuICB9XG5cbiAgb25Sb3dMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRSb3dJZCA9IG51bGw7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkluZGV4ID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5oYXNQYXJlbnRXaXRoQ2xhc3ModGFyZ2V0LCBbXG4gICAgICAgICd0aHJlZS1kb3RzJyxcbiAgICAgICAgJ2ZpbHRlci1pY29uLXdyYXBwZXInLFxuICAgICAgICAnY29sdW1uLW1lbnUnLFxuICAgICAgICAnZmlsdGVyLW1lbnUnLFxuICAgICAgXSlcbiAgICApIHtcbiAgICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duID0gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGluc2lkZVRvcEZpbHRlclJvdyA9IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLXRhZ3MnKSB8fCB0YXJnZXQuY2xvc2VzdCgnLmFkZC1maWx0ZXItYnV0dG9uLW1lbnUnKSB8fFxuICAgICAgdGFyZ2V0LmNsb3Nlc3QoJy50YWJsZS1yaWdodC10b3AtYWN0aW9ucycpIHx8IHRhcmdldC5jbG9zZXN0KCcudGFibGUtbGF5b3V0JykgfHwgdGFyZ2V0LmNsb3Nlc3QoJy5maWx0ZXItcm93LWZpbHRlci13cmFwcGVyJyk7XG4gICAgY29uc3QgaXNDbGlja2VkSW5zaWRlVGhyZWVEb3RzRmlsdGVyID0gdGFyZ2V0LmNsb3Nlc3QoJy50aHJlZS1kb3RzLWZpbHRlcicpIHx8IHRhcmdldC5jbG9zZXN0KCcuZmlsdGVyLW1lbnUtY29udGFpbmVyJyk7XG4gICAgaWYgKCFpc0NsaWNrZWRJbnNpZGVUaHJlZURvdHNGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY2xvc2VUaHJlZURvdHNNZW51RmlsdGVyKCk7XG4gICAgfVxuICAgIGlmICghaW5zaWRlVG9wRmlsdGVyUm93KSB7XG4gICAgICB0aGlzLmNsb3NlRmlsdGVyRHJvcGRvd25zKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLnNldC1kZWZhdWx0LXByZXNldCcpKSB7XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2V0LWRlZmF1bHQtcHJlc2V0Jyk/LmNsYXNzTGlzdD8ucmVtb3ZlKCdzaG93Jyk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQuY2xvc2VzdCgnLmZ1bGwtdGV4dC1ib3gnKSAmJiAhdGFyZ2V0LmNsb3Nlc3QoJy5kYXRhLWdyaWQtaGVhZGVyLXdyYXBwZXInKSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEV4cGFuZGVkQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLXRhYmxlLXdyYXBwZXInKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuYWN0aXZlQ2VsbCA9ICcnO1xuICAgIH1cblxuICAgICBpZiAoIXRhcmdldC5jbG9zZXN0KCcuZGF0YS1ncmlkLWJvZHknKSkge1xuICAgICAgdGhpcy5lZGl0aW5nS2V5ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGNsb3NlVGhyZWVEb3RzTWVudUZpbHRlcigpIHtcbiAgICB0aGlzLmlzVGhyZWVEb3RzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICB9XG5cblxuICBjbG9zZUZpbHRlckRyb3Bkb3ducyhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGhhc1BhcmVudFdpdGhDbGFzcyhcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBjbGFzc0xpc3Q6IHN0cmluZ1tdXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcblxuICAgIHdoaWxlIChlbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICBlbC5jbGFzc0xpc3QgJiZcbiAgICAgICAgY2xhc3NMaXN0LnNvbWUoKGNsYXNzTmFtZSkgPT4gZWwhLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzTWVudWVIaWRkZW4gPSBmYWxzZTtcbiAgb3BlblRocmVlRG90c01lbnUoZXZlbnQ6IE1vdXNlRXZlbnQsIGNoaWxkOiBhbnksIGtlZXBPcmlnaW5hbFBvc2l0aW9uID0gZmFsc2UpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNNZW51ZUhpZGRlbiA9IHRydWU7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aDtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IGNoaWxkO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFg7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbHVtbi1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBpZiAoeCA+IChjb250YWluZXJXaWR0aCAvIDIpKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7eCAtIDI0MH1weGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudCEuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTWVudWVIaWRkZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gQ29sdW1uIFRocmVlIERvdHMgQWN0aW9uc1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICBzb3J0QXNjKGNvbDogYW55KSB7XG4gICAgaWYgKCFjb2wuaXNfc29ydGFibGUpIHJldHVybjtcbiAgICBjb2whLm9yZGVyX2J5ID0gJ2FzYyc7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvcmRlcjogJ2FzYycsXG4gICAgICBjb2x1bW46IGNvbFxuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zb3J0aW5nT3JkZXJPcHRpb25zLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc29ydERlc2MoY29sOiBhbnkpIHtcbiAgICBpZiAoIWNvbC5pc19zb3J0YWJsZSkgcmV0dXJuO1xuICAgIGNvbCEub3JkZXJfYnkgPSAnZGVzYyc7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvcmRlcjogJ2Rlc2MnLFxuICAgICAgY29sdW1uOiBjb2xcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc29ydGluZ09yZGVyT3B0aW9ucy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHJlc2V0U29ydChjb2w6IGFueSkge1xuICAgIHRoaXMuc29ydGluZ0NvbmZpZyA9IHsgZmllbGQ6ICcnLCBvcmRlcl9ieTogJycgfTtcbiAgICBjb25zdCBldmVudCA9IHsgZmllbGQ6IG51bGwsIG9yZGVyX2J5OiBudWxsIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zb3J0aW5nT3JkZXJPcHRpb25zLmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICBhc3luYyB1cGRhdGVDb2x1bW5QaW5JblNvdXJjZUJ5RmllbGQoXG4gICAgY29sdW1uOiBhbnksXG4gICAgcGlubmVkOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCxcbiAgICBpc05lc3RlZFRhYmxlOiBhbnkgPSBmYWxzZSxcbiAgICBjb2x1bW5zPzogYW55XG4gICkge1xuICAgIGRlYnVnZ2VyXG4gICAgaWYgKGlzTmVzdGVkVGFibGUpIHtcbiAgICAgIHRoaXMucGluVW5waW5Db2x1bShjb2x1bW4sIHBpbm5lZCwgY29sdW1ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZSA9IChjb2x1bW5zOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICB1cGRhdGUoY29sLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIGNvbC5waW5uZWQgPSBwaW5uZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB1cGRhdGUodGhpcy5jb2x1bW5zKTtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5pc192aXNpYmxlKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgYXV0b3NpemVDb2x1bW4oY29sczogYW55IHwgYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICAvLyBOb3JtYWxpemUgaW5wdXQgdG8gYW4gYXJyYXlcbiAgICBjb25zdCBjb2x1bW5zVG9SZXNpemUgPSBBcnJheS5pc0FycmF5KGNvbHMpID8gY29scyA6IFtjb2xzXTtcblxuICAgIC8vIEhlbHBlcjogRmxhdHRlbiBhbGwgdmlzaWJsZSBsZWFmIGNvbHVtbnNcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUxlYWZDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvdW50ID0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoO1xuXG4gICAgaWYgKHZpc2libGVDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID1cbiAgICAgIHRoaXMuZGF0YUdyaWRDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDA7XG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpIGNvbnRhaW5lcldpZHRoIC09IDMwO1xuICAgIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGNvbnN0IGVxdWFsV2lkdGggPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gdmlzaWJsZUNvdW50KTtcblxuICAgIC8vIFJlc2l6ZSBlYWNoIHBhc3NlZCBjb2x1bW5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zVG9SZXNpemUpIHtcbiAgICAgIGlmIChjb2wgJiYgY29sLmZpZWxkKSB7XG4gICAgICAgIGNvbC53aWR0aCA9IGVxdWFsV2lkdGg7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH0sIDEwMDApO1xuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gIH1cblxuICBnZXRHcm91cFdpZHRoKGdyb3VwOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiAoXG4gICAgICBncm91cD8uY2hpbGRyZW5cbiAgICAgICAgPy5maWx0ZXIoKGNvbDogYW55KSA9PiBjb2w/LmlzX3Zpc2libGUpXG4gICAgICAgID8ucmVkdWNlKChhY2M6IG51bWJlciwgY29sOiBhbnkpID0+IGFjYyArIChjb2w/LndpZHRoIHx8IDApLCAwKSB8fCAwXG4gICAgKTtcbiAgfVxuXG4gIGF1dG9zaXplQWxsQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG5cbiAgICBjb25zdCBnZXRWaXNpYmxlTGVhZkNvbHVtbnMgPSAoY29sdW1uczogYW55W10pOiBhbnlbXSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRWaXNpYmxlTGVhZkNvbHVtbnMoY29sdW1uLmNoaWxkcmVuKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmlzX3Zpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb3VudCA9IHZpc2libGVDb2x1bW5zLmxlbmd0aDtcblxuICAgIGlmICh2aXNpYmxlQ291bnQgPT09IDApIHJldHVybjtcblxuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuICAgIGlmICh0aGlzLnNob3dTZXJpYWxOdW1iZXIpIGNvbnRhaW5lcldpZHRoIC09IDU1O1xuICAgIGlmICh0aGlzLnNob3dTaWRlTWVudSkgY29udGFpbmVyV2lkdGggLT0gMjk7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT0gJ0Fzc2V0cycgfHwgdGhpcy5ncmlkVHlwZSA9PSAnVGFza3MnKSBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICAgaWYodGhpcy5zaG93Q2hlY2tib3hlcykgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgY29uc3QgZXF1YWxXaWR0aCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyB2aXNpYmxlQ291bnQpLCAxNTApO1xuXG4gICAgLy8gVXBkYXRlIHdpZHRocyBmb3IgYWxsIHZpc2libGUgY29sdW1uc1xuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29sLndpZHRoID0gZXF1YWxXaWR0aDtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhJblNvdXJjZUJ5RmllbGQoY29sLmZpZWxkLCBlcXVhbFdpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtDb2x1bW5Bc0dyb3VwZWQoY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBpZiAoY29sLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICBjb2wuaXNSb3dHcm91cGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWFya0NvbHVtbkFzR3JvdXBlZChjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBncm91cEJ5KGNvbDogYW55KSB7XG4gICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgaWYgKCFjb2wpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBpZiAoY29sPy5pc19ncm91cGFibGUpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgdGhpcy5tYXJrQ29sdW1uQXNHcm91cGVkKHRoaXMuY29sdW1ucywgY29sLmZpZWxkKTtcbiAgICB9XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgIHRoaXMuZGF0YVNldCA9IGF3YWl0IHRoaXMuZ3JvdXBEYXRhQXN5bmModGhpcy5vcmlnaW5hbERhdGFTZXQsIGZpZWxkcyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDEwMCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBCb3hQYWRkaW5nID0gdGhpcy5jb2x1bW5zR3JvdXBlZEJveD8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKVxuICAgIH0sIDEwKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdyb3VwRGF0YUFzeW5jKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JvdXBEYXRhKGRhdGEsIGdyb3VwRmllbGRzKTtcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG4gIH1cblxuXG5cblxuICBjaG9vc2VDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcbiAgICB0aGlzLnNob3dDb2x1bW5QYW5lbCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zKCkge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIC8vIHRoaXMuY29sdW1ucyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLm9yaWdpbmFsQ29sdW1ucyk7XG4gICAgLy8gRGVlcCBjb3B5IG5lc3RlZCBvYmplY3RzIGJ1dCBrZWVwIGNsYXNzIHJlZnMgc2FmZVxuICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIC8vIERlZXAgY29weSBuZXN0ZWQgb2JqZWN0cyBidXQga2VlcCBjbGFzcyByZWZzIHNhZmVcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgIH0pKTtcblxuICAgIHRoaXMuU2V0Q29sdW1uc0RlZmF1bHRXaWR0aCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVyKGNvbDogYW55KSB7XG4gICAgY29sLmZpcnN0VmFsdWUgPSAnJztcbiAgICBjb2wuc2Vjb25kVmFsdWUgPSAnJztcbiAgICBjb2wuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgY29sLnNlY29uZENvbmRpdGlvbiA9IG51bGw7XG4gICAgY29sLmxvZ2ljID0gJ0FORCc7XG4gICAgY29sLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIGNvbC5zZWxlY3RlZE9wdGlvbnMgPSB7fTtcbiAgICBjb2wuc2VhcmNoVmFsdWUgPSAnJztcblxuICB9XG5cblxuICBhcHBseUZpbHRlcihjb2w6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQ29sdW1uc0xpc3QucHVzaChjb2wpO1xuICB9XG5cbiAgLy8gUm93cyBTZWxlY3Rpb24gTG9naWMgR29lcyBIZXJlXG5cbiAgc2VsZWN0ZWRSb3dzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblxuICAvKipcbiAgICogR2V0IG5vcm1hbGl6ZWQgSUQgZnJvbSByb3cuXG4gICAqL1xuICBwcml2YXRlIGdldFJvd0lkKHJvdzogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcm93LmlkID8/IHJvdy5faWQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGEgc2luZ2xlIHJvdyBzZWxlY3Rpb24uXG4gICAqL1xuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQocm93KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuXG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuXG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH07XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gIH1cblxuXG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGRhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgbGVhZlJvd3MgPSB0aGlzLmdldEFsbExlYWZSb3dzKGRhdGEpO1xuICAgIGNvbnN0IGFsbElkcyA9IGxlYWZSb3dzLm1hcChyID0+IHRoaXMuZ2V0Um93SWQocikpO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBhbGxJZHMuZXZlcnkoaWQgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKGlkKSk7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIGFsbElkcy5mb3JFYWNoKGlkID0+IHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGxJZHMuZm9yRWFjaChpZCA9PiB0aGlzLnNlbGVjdGVkUm93cy5hZGQoaWQpKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJvd3MpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgICAgb2JqOiBpZHNcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IFwib25TZWxlY3RSb3dcIixcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgdGhpcy5zYXZlU2VsZWN0aW9uKGlkcywgdGhpcy50YWJsZVR5cGUpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyb3cpKTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoZGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZ2V0QWxsTGVhZlJvd3MoZGF0YSk7XG4gICAgcmV0dXJuIGxlYWZSb3dzLmxlbmd0aCA+IDAgJiYgbGVhZlJvd3MuZXZlcnkociA9PiB0aGlzLnNlbGVjdGVkUm93cy5oYXModGhpcy5nZXRSb3dJZChyKSkpO1xuICB9XG5cblxuICBpc0luZGV0ZXJtaW5hdGVTdGF0ZShkYXRhOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlYWZSb3dzID0gdGhpcy5nZXRBbGxMZWFmUm93cyhkYXRhKTtcbiAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gbGVhZlJvd3MuZmlsdGVyKHIgPT4gdGhpcy5zZWxlY3RlZFJvd3MuaGFzKHRoaXMuZ2V0Um93SWQocikpKS5sZW5ndGg7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRDb3VudCA+IDAgJiYgc2VsZWN0ZWRDb3VudCA8IGxlYWZSb3dzLmxlbmd0aDtcbiAgfVxuXG5cbiAgZ2V0QWxsTGVhZlJvd3MoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgbGVhZjogYW55W10gPSBbXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgICAgIGlmIChub2RlLmlzR3JvdXApIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWFmLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRhdGEuZm9yRWFjaCh0cmF2ZXJzZSk7XG4gICAgcmV0dXJuIGxlYWY7XG4gIH1cblxuXG5cblxuICAvLyBTaWRlIE1lbnUgV29ya2luZyBHb2VzIEhlcmVcbiAgdG9nZ2xlU2lkZU1lbnUoY2xpY2tlZE9uOiAnY29scycgfCAnZmlsdHJzJykge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gY2xpY2tlZE9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPSBjbGlja2VkT247XG4gICAgICB0aGlzLnNpZGVNZW51VmlzaWJsZSA9ICF0aGlzLnNpZGVNZW51VmlzaWJsZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgJiZcbiAgICAgIGNsaWNrZWRPbiAhPSB0aGlzLmN1cnJlbnRPcGVuZWRTaWRlTWVudWVcbiAgICApIHtcbiAgICAgIHRoaXMuY3VycmVudE9wZW5lZFNpZGVNZW51ZSA9IGNsaWNrZWRPbjtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T3BlbmVkU2lkZU1lbnVlID0gY2xpY2tlZE9uO1xuICAgICAgdGhpcy5zaWRlTWVudVZpc2libGUgPSAhdGhpcy5zaWRlTWVudVZpc2libGU7XG4gICAgfVxuICAgIHRoaXMuaGFzU2Nyb2xsID0gdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlR3JvdXBWaXNpYmlsaXR5KGNvbDogYW55KSB7XG4gICAgY29uc3QgYWxsVmlzaWJsZSA9IGNvbC5jaGlsZHJlbi5ldmVyeSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfdmlzaWJsZSk7XG4gICAgY29sLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IChjaGlsZC5pc192aXNpYmxlID0gIWFsbFZpc2libGUpKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgICB0aGlzLlNldENvbHVtbnNEZWZhdWx0V2lkdGgoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBpc0NvbHVtblZpc2libGUoY29sdW1uczogYW55KSB7XG4gICAgaWYgKGNvbHVtbnM/LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5jaGlsZHJlbi5ldmVyeSgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmlzX3Zpc2libGUpO1xuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5zPy5pc192aXNpYmxlO1xuICB9XG5cbiAgLy8gYWxsQ29sdW1uc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAvLyAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIC8vICAgcmV0dXJuIGZsYXR0ZW4uZXZlcnkoKGNvbCkgPT4gY29sLmlzX3Zpc2libGUpO1xuICAvLyB9XG5hbGxDb2x1bW5zU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gIGNvbnN0IG5vbkFsd2F5c1Zpc2libGUgPSBmbGF0dGVuLmZpbHRlcihjb2wgPT4gIWNvbC5pc19hbHdheXNfdmlzaWJsZSk7XG4gIFxuICAvLyBSZXR1cm4gdHJ1ZSBpZiBhbGwgbm9uLWFsd2F5cy12aXNpYmxlIGNvbHVtbnMgYXJlIHZpc2libGVcbiAgcmV0dXJuIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoID4gMCAmJiBub25BbHdheXNWaXNpYmxlLmV2ZXJ5KGNvbCA9PiBjb2wuaXNfdmlzaWJsZSk7XG59XG5cbiAgcHJpdmF0ZSBmaW5kQ29sdW1uQnlGaWVsZChmaWVsZDogc3RyaW5nLCBjb2xzOiBhbnlbXSk6IGFueSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgIGlmIChjb2wuZmllbGQgPT09IGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbkJ5RmllbGQoZmllbGQsIGNvbC5jaGlsZHJlbik7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBhc3luYyB0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbHVtbjogYW55LCBpc1Zpc2libGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy52aXNpYmxlQ29sdW1ucygpPy5sZW5ndGggPD0gMiAmJiBjb2x1bW4uaXNfdmlzaWJsZSB8fCAoY29sdW1uPy5pc19hbHdheXNfdmlzaWJsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2wgPSB0aGlzLmZpbmRDb2x1bW5CeUZpZWxkKGNvbHVtbi5maWVsZCwgdGhpcy5jb2x1bW5zKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb2wuaXNfdmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIGlmICh0aGlzLnRhYmxlRmlsdGVyVmlld0lkKSB7XG4gICAgICB0aGlzLnNhdmVQcmVzZXQoJ21vdXNlVXAnKTtcbiAgICB9XG4gIH1cblxuYXN5bmMgdG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmbGF0dGVuID0gdGhpcy5mbGF0dGVuQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gZmxhdHRlbi5maWx0ZXIoY29sID0+IGNvbC5pc192aXNpYmxlKTtcbiAgICBcbiAgICAvLyBHZXQgY29sdW1ucyB0aGF0IGFyZSBub3QgYWx3YXlzIHZpc2libGVcbiAgICBjb25zdCBub25BbHdheXNWaXNpYmxlID0gZmxhdHRlbi5maWx0ZXIoY29sID0+ICFjb2wuaXNfYWx3YXlzX3Zpc2libGUpO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIGFsbCBub24tYWx3YXlzLXZpc2libGUgY29sdW1ucyBhcmUgY3VycmVudGx5IHZpc2libGVcbiAgICBjb25zdCBhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSA9IG5vbkFsd2F5c1Zpc2libGUuZXZlcnkoY29sID0+IGNvbC5pc192aXNpYmxlKTtcblxuICAgIGlmIChhbGxOb25BbHdheXNWaXNpYmxlQXJlVmlzaWJsZSkge1xuICAgICAgLy8gSElERSBBTEwgKGJ1dCBrZWVwIG1pbmltdW0gMiB2aXNpYmxlKVxuICAgICAgLy8gRmlyc3QsIGhpZGUgYWxsIG5vbi1hbHdheXMtdmlzaWJsZSBjb2x1bW5zXG4gICAgICBub25BbHdheXNWaXNpYmxlLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgY29sLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBUaGVuLCBtYWtlIHN1cmUgYXQgbGVhc3QgMiBjb2x1bW5zIGFyZSB2aXNpYmxlIChpbmNsdWRpbmcgYWx3YXlzLXZpc2libGUgb25lcylcbiAgICAgIGNvbnN0IGFsd2F5c1Zpc2libGVDb3VudCA9IGZsYXR0ZW4uZmlsdGVyKGNvbCA9PiBjb2wuaXNfYWx3YXlzX3Zpc2libGUpLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnNOZWVkZWQgPSBNYXRoLm1heCgwLCAyIC0gYWx3YXlzVmlzaWJsZUNvdW50KTtcbiAgICAgIFxuICAgICAgaWYgKGNvbHVtbnNOZWVkZWQgPiAwKSB7XG4gICAgICAgIC8vIFNob3cgdGhlIGZpcnN0ICdjb2x1bW5zTmVlZGVkJyBub24tYWx3YXlzLXZpc2libGUgY29sdW1uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKGNvbHVtbnNOZWVkZWQsIG5vbkFsd2F5c1Zpc2libGUubGVuZ3RoKTsgaSsrKSB7XG4gICAgICAgICAgbm9uQWx3YXlzVmlzaWJsZVtpXS5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTSE9XIEFMTCAtIG1ha2UgYWxsIGNvbHVtbnMgdmlzaWJsZVxuICAgICAgZmxhdHRlbi5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgIGNvbC5pc192aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICBcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlU2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIFxuICB9IGZpbmFsbHkge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuXG4gIHByaXZhdGUgd2FpdChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICB9XG5cblxuXG4gIHZpc2libGVDb2x1bW5zKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSB0aGlzLmZsYXR0ZW5Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBmbGF0dGVuLmZpbHRlcigoYzogYW55KSA9PiBjLmlzX3Zpc2libGUpO1xuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIGZsYXR0ZW5Db2x1bW5zKGNvbHM6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBjb2xzLnJlZHVjZSgoYWNjOiBhbnlbXSwgY29sOiBhbnkpID0+IHtcbiAgICAgIGlmIChjb2w/LmNoaWxkcmVuICYmIGNvbC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgZmxhdHRlbiBjaGlsZHJlblxuICAgICAgICByZXR1cm4gYWNjLmNvbmNhdCh0aGlzLmZsYXR0ZW5Db2x1bW5zKGNvbC5jaGlsZHJlbikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVhZiBjb2x1bW5cbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoY29sKTtcbiAgICAgIH1cbiAgICB9LCBbXSk7XG4gIH1cblxuXG4gIGZpbHRlcmVkQ29sdW1ucyhjb2xzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmNvbHVtblNlYXJjaC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiBjb2xzXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbHRlcmVkQ29sdW1ucyhjb2wuY2hpbGRyZW4pO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbC5oZWFkZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpIHx8XG4gICAgICAgICAgICBmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uY29sLCBjaGlsZHJlbjogZmlsdGVyZWRDaGlsZHJlbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY29sLmhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgPyBjb2wgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIGdldCBhY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWQpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIGdldCBmaWx0ZXJBY2NvcmRpb25TdGF0ZSgpOiAnYWxsJyB8ICdub25lJyB8ICdzb21lJyB7XG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5nZXRBbGxHcm91cENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBhbmRlZENvdW50ID0gZ3JvdXBzLmZpbHRlcigoY29sKSA9PiBjb2wuZXhwYW5kZWRGaWx0ZXIpLmxlbmd0aDtcblxuICAgIGlmIChleHBhbmRlZENvdW50ID09PSAwKSByZXR1cm4gJ25vbmUnO1xuICAgIGlmIChleHBhbmRlZENvdW50ID09PSBncm91cHMubGVuZ3RoKSByZXR1cm4gJ2FsbCc7XG4gICAgcmV0dXJuICdzb21lJztcbiAgfVxuXG4gIC8vIFJlY3Vyc2l2ZWx5IGNvbGxlY3QgYWxsIGdyb3VwIGNvbHVtbnNcbiAgcHJpdmF0ZSBnZXRBbGxHcm91cENvbHVtbnMoY29sczogYW55W10pOiBhbnlbXSB7XG4gICAgbGV0IGdyb3VwczogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBzLnB1c2goY29sKTtcbiAgICAgICAgZ3JvdXBzID0gZ3JvdXBzLmNvbmNhdCh0aGlzLmdldEFsbEdyb3VwQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIC8vIFRvZ2dsZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gIHRvZ2dsZUFsbEFjY29yZGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdGhpcy5hY2NvcmRpb25TdGF0ZSA9PT0gJ2FsbCcgPyBmYWxzZSA6IHRydWU7XG4gICAgdGhpcy5zZXRBY2NvcmRpb25TdGF0ZSh0aGlzLmNvbHVtbnMsIG5leHRTdGF0ZSk7XG4gIH1cblxuICB0b2dnbGVBbGxGaWx0ZXJBY2NvcmRpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMuZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnID8gZmFsc2UgOiB0cnVlO1xuICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUodGhpcy5jb2x1bW5zLCBuZXh0U3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY2NvcmRpb25TdGF0ZShjb2xzOiBhbnlbXSwgc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbC5leHBhbmRlZCA9IHN0YXRlO1xuICAgICAgICB0aGlzLnNldEFjY29yZGlvblN0YXRlKGNvbC5jaGlsZHJlbiwgc3RhdGUpOyAvLyBSZWN1cnNpdmVseSBoYW5kbGUgbmVzdGVkXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBwcml2YXRlIHNldEZpbHRlckFjY29yZGlvblN0YXRlKGNvbHM6IGFueVtdLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAobGV0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29sLmV4cGFuZGVkRmlsdGVyID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWNjb3JkaW9uU3RhdGUoY29sLmNoaWxkcmVuLCBzdGF0ZSk7IC8vIFJlY3Vyc2l2ZWx5IGhhbmRsZSBuZXN0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcblxuICBjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKSB7XG4gICAgdGhpcy5zaG93Q29sdW1uUGFuZWwgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuY2xvc2VNb2RhbENvbHVtblBhbmVsKCk7XG4gIH1cblxuICAvLyBDaGVjayBJZiAgQW55IGNvbHVtbiBoYXZlIHJpZ2h0IHBpbm5lZFxuICBnZXQgaGFzUmlnaHRQaW5uZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNSaWdodFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBoYXNMZWZ0UGlubmVkQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzTGVmdFBpbm5lZENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIGdldCBkYXRhU2V0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRFeHBhbmRlZFJvd0NvdW50KHRoaXMuZGF0YVNldCk7XG4gIH1cblxuXG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uUmVzaXplKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSkgdGhpcy5hdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk7XG4gICAgY29uc3QgaCA9IHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudD8uY2xpZW50SGVpZ2h0ID8/IDA7XG4gICAgdGhpcy52aWV3cG9ydFJvd3MgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoaCAvIHRoaXMucm93SGVpZ2h0KSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cyh0aGlzLm1haW5TY3JvbGw/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvcCk7XG4gICAgdGhpcy5oYXNTY3JvbGwgPSB0aGlzLmhhc0hvcml6b250YWxTY3JvbGxiYXIoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IH0sIDEwMCk7XG4gIH1cblxuICBhdXRvU2l6ZUNvbHVtbnNCeVJhdGlvKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlQ29sID0gbnVsbDtcblxuICAgIGNvbnN0IGdldFZpc2libGVMZWFmQ29sdW1ucyA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdDogYW55W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29sdW1uLmNoaWxkcmVuKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmdldFZpc2libGVMZWFmQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uaXNfdmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGdldFZpc2libGVMZWFmQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuXG4gICAgaWYgKHZpc2libGVDb2x1bW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGxldCBjb250YWluZXJXaWR0aCA9XG4gICAgICB0aGlzLmRhdGFHcmlkQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAwO1xuXG4gICAgaWYgKHRoaXMuc2hvd1NlcmlhbE51bWJlcikgY29udGFpbmVyV2lkdGggLT0gNTU7XG4gICAgaWYgKHRoaXMuc2hvd1NpZGVNZW51KSBjb250YWluZXJXaWR0aCAtPSAyOTtcbiAgICBpZiAodGhpcy5ncmlkVHlwZSA9PSAnQXNzZXRzJyB8fCB0aGlzLmdyaWRUeXBlID09ICdUYXNrcycpXG4gICAgICBjb250YWluZXJXaWR0aCAtPSAzMDtcbiAgICBpZih0aGlzLnNob3dDaGVja2JveGVzKSBjb250YWluZXJXaWR0aCAtPSA1NTtcbiAgICBjb25zdCB0b3RhbE9sZFdpZHRoID0gdmlzaWJsZUNvbHVtbnMucmVkdWNlKFxuICAgICAgKHN1bSwgY29sKSA9PiBzdW0gKyAoY29sLndpZHRoIHx8IDApLFxuICAgICAgMFxuICAgICk7XG4gICAgaWYgKHRvdGFsT2xkV2lkdGggPT09IDApIHJldHVybjtcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHJhdGlvID0gY29sLndpZHRoIC8gdG90YWxPbGRXaWR0aDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAqIHJhdGlvKSwgMTAwKTtcbiAgICAgIGNvbC53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aEluU291cmNlQnlGaWVsZChjb2wuZmllbGQsIG5ld1dpZHRoKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICB0aGlzLmhhc1Njcm9sbCA9IHRoaXMuaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgfSwgNDAwKTtcbiAgfVxuXG5cbiAgYXN5bmMgcmVmcmVzaEhlYWRlcnMoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDApKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBoYXNBbnlWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5nZXRoYXNWaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGhhc0FueUluVmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0aGFzSW5WaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0VG90YWxDb2x1bW5zTGVuZ3RoKHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICB0YWJsZUhlYWRlckFuZEJvZHlIZWlnaHQoKSB7XG4gICAgcmV0dXJuIGBjYWxjKDEwMCUgLSAke3RoaXMuZm9vdGVyUm93SGVpZ2h0fSlgO1xuICB9XG5cbiAgZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclNjcm9sbCcpIGNlbnRlclNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICB2aXNpYmxlUm93Q291bnQgPSAyNTtcbiAgc3RhcnRJbmRleCA9IDA7XG4gIHZpc2libGVSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgZmxhdHRlbkdyb3VwZWRSb3dzKFxuICAgIHJvd3M6IGFueVtdID0gW10sXG4gICAgbGV2ZWwgPSAwLFxuICAgIHJlc3VsdDogYW55W10gPSBbXVxuICApOiBhbnlbXSB7XG4gICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgcmVzdWx0LnB1c2goeyAuLi5yb3csIF9fZGVwdGg6IGxldmVsIH0pO1xuICAgICAgaWYgKHJvdy5pc0dyb3VwICYmIHJvdy5pc0V4cGFuZCAmJiByb3cuY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZsYXR0ZW5Hcm91cGVkUm93cyhyb3cuY2hpbGRyZW4sIGxldmVsICsgMSwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzc2lnblZpcnR1YWxJbmRleGVzKHRoaXMudmlzaWJsZVJvd3MpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3NpZ25WaXJ0dWFsSW5kZXhlcyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBsZXQgY3VycmVudEluZGV4ID0gMTtcbiAgICBjb25zdCB3YWxrID0gKGl0ZW1zOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGl0ZW0uX192aXJ0dWFsSW5kZXggPSBjdXJyZW50SW5kZXgrKztcbiAgICAgICAgaWYgKGl0ZW0/LmlzR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBncm91cCA9IGl0ZW07XG4gICAgICAgICAgaWYgKGdyb3VwLmlzRXhwYW5kICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICB3YWxrKGdyb3VwLmNoaWxkcmVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHdhbGsoZGF0YSk7XG4gICAgLy8gY29uc29sZS5sb2coJ1RoaXMgZGF0YXNldDogJywgdGhpcy52aXNpYmxlUm93cylcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG5cbiAgdXBkYXRlVmlzaWJsZVJvd3Moc2Nyb2xsVG9wOiBudW1iZXIpIHtcblxuICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmRhdGFTZXQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZsYXREYXRhID0gdGhpcy5mbGF0dGVuR3JvdXBlZFJvd3ModGhpcy5kYXRhU2V0KTtcblxuICAgIGlmICh0aGlzLmRhdGFTZXQ/Lmxlbmd0aCA8PSAxNSkge1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IGZsYXREYXRhO1xuICAgICAgdGhpcy5maXJzdEluZGV4ID0gMDtcbiAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlbmRlclN0YXJ0ID0gMDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG90YWwgPSBmbGF0RGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF4Rmlyc3QgPSBNYXRoLm1heCgwLCB0b3RhbCAtIHRoaXMudmlld3BvcnRSb3dzKTtcbiAgICBjb25zdCBmaXJzdCA9IE1hdGgubWluKE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpLCBtYXhGaXJzdCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBmaXJzdCk7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4odG90YWwsIGZpcnN0ICsgdGhpcy52aWV3cG9ydFJvd3MpO1xuXG4gICAgdGhpcy5maXJzdEluZGV4ID0gZmlyc3Q7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gZmlyc3Q7XG4gICAgdGhpcy5yZW5kZXJTdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmFzc2lnblZpcnR1YWxJbmRleGVzKHRoaXMudmlzaWJsZVJvd3MpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgdHJhY2tCeVJlbmRlcmVkSW5kZXggPSAoaTogbnVtYmVyLCBfcm93OiBhbnkpID0+IHRoaXMucmVuZGVyU3RhcnQgKyBpO1xuXG4gIHByaXZhdGUgaXNTeW5jaW5nRnJvbU1haW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N5bmNpbmdGcm9tRmFrZSA9IGZhbHNlO1xuICBwcml2YXRlIG1haW5TY3JvbGxSYWY6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5pZCB8fCBpdGVtLl9pZDtcbiAgfVxuXG4gIGZsYXR0ZW5lZERhdGE6IGFueVtdID0gW107XG5cbiAgdXBkYXRlRmxhdHRlbmVkRGF0YSgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgLy8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lIElEc1xuICBwcml2YXRlIGZha2VTY3JvbGxSYWY6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG5cbiAgLy8gb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IDA7XG4gIC8vICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgICAgcmV0dXJuO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3Qgb3ZlcnNjYW4gPSB0aGlzLm92ZXJzY2FuICogMjtcbiAgLy8gICAgIHRoaXMuc3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAvLyAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCB0aGlzLnN0YXJ0SW5kZXggLSBvdmVyc2Nhbik7XG4gIC8vICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbih0aGlzLmZsYXR0ZW5lZERhdGEubGVuZ3RoLCB0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnZpZXdwb3J0Um93cyArIG92ZXJzY2FuKTtcbiAgLy8gICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmZsYXR0ZW5lZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cbiAgdHJhbnNsYXRlWSA9IDA7XG5cbiAgbGFzdFNjcm9sbFRvcCA9IDA7XG4gIHBlbmRpbmdBbmltYXRpb25GcmFtZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgICBpZiAoTWF0aC5hYnMoc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKSA8ICgxMCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lKTtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nQW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsaW5nRG93biA9IHNjcm9sbFRvcCA+IHRoaXMubGFzdFNjcm9sbFRvcDtcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAgICAgY29uc3Qgb3ZlcnNjYW4gPSA1O1xuICAgICAgY29uc3QgbmV3U3RhcnRJbmRleCA9IE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gdGhpcy5yb3dIZWlnaHQpO1xuICAgICAgY29uc3QgZHluYW1pY092ZXJzY2FuID0gc2Nyb2xsaW5nRG93biA/IG92ZXJzY2FuIDogb3ZlcnNjYW47XG5cbiAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgbmV3U3RhcnRJbmRleCAtIGR5bmFtaWNPdmVyc2Nhbik7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihcbiAgICAgICAgdGhpcy5mbGF0dGVuZWREYXRhLmxlbmd0aCxcbiAgICAgICAgbmV3U3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgZHluYW1pY092ZXJzY2FuXG4gICAgICApO1xuICAgICAgdGhpcy50cmFuc2xhdGVZID0gc3RhcnQgKiB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggIT09IHN0YXJ0IHx8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoICE9PSBlbmQgLSBzdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydDtcbiAgICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZGF0YVNldC5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbkZyYW1lID0gbnVsbDtcbiAgICB9KTtcbiAgfVxuXG5cbiAgLy8gb25NYWluU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAvLyAgIHRoaXMuZXhwYW5kZWRDZWxscy5jbGVhcigpO1xuICAvLyAgIGlmICh0aGlzLmlzU3luY2luZ0Zyb21GYWtlKSB7XG4gIC8vICAgICB0aGlzLmlzU3luY2luZ0Zyb21GYWtlID0gZmFsc2U7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHNjcm9sbFRvcCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgLy8gICBpZiAoTWF0aC5hYnMoc2Nyb2xsVG9wIC0gdGhpcy5sYXN0U2Nyb2xsVG9wKSA8IHRoaXMucm93SGVpZ2h0IC8gMikgcmV0dXJuO1xuICAvLyAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcblxuICAvLyAgIGlmICh0aGlzLmZha2VTY3JvbGxSYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZmFrZVNjcm9sbFJhZik7XG5cbiAgLy8gICB0aGlzLmZha2VTY3JvbGxSYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAvLyAgICAgaWYgKHRoaXMuZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgLy8gICAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgLy8gICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgICAgICByZXR1cm47XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBmbGF0RGF0YSA9IHRoaXMuZmxhdHRlbkdyb3VwZWRSb3dzKHRoaXMuZGF0YVNldCk7XG4gIC8vICAgICBjb25zdCB0b3RhbFJvd3MgPSBmbGF0RGF0YS5sZW5ndGg7XG4gIC8vICAgICBjb25zdCBuZXdTdGFydEluZGV4ID0gTWF0aC5mbG9vcihzY3JvbGxUb3AgLyB0aGlzLnJvd0hlaWdodCk7XG4gIC8vICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIG5ld1N0YXJ0SW5kZXggLSAodGhpcy5vdmVyc2NhbiAqIDIpKTtcbiAgLy8gICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKHRvdGFsUm93cywgbmV3U3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgKHRoaXMub3ZlcnNjYW4gKiAyKSk7XG5cbiAgLy8gICAgIHRoaXMudHJhbnNsYXRlWSA9IHN0YXJ0ICogdGhpcy5yb3dIZWlnaHQ7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBzdGFydDtcbiAgLy8gICAgIHRoaXMudmlzaWJsZVJvd3MgPSBmbGF0RGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG5cbiAgZ2V0IGlzU2Nyb2xsYmFyVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMubWFpblNjcm9sbCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGVsID0gdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbEhlaWdodCA+IGVsLmNsaWVudEhlaWdodDtcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZChyb3c6IGFueSkge1xuICAgIGlmIChyb3cuZGV0YWlscykge1xuICAgICAgcm93LmlzRGV0YWlsc0V4cGFuZCA9ICFyb3cuaXNEZXRhaWxzRXhwYW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cuaXNFeHBhbmQgPSAhcm93LmlzRXhwYW5kO1xuICAgIH1cbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB9LCAxMDApO1xuICB9XG5cbiAgLy8gb25NYWluRmFrZVNjcm9sbChldmVudDogRXZlbnQpIHtcbiAgLy8gICBpZiAodGhpcy5pc1N5bmNpbmdGcm9tTWFpbikge1xuICAvLyAgICAgdGhpcy5pc1N5bmNpbmdGcm9tTWFpbiA9IGZhbHNlO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5ncm91cGVkQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgdGhpcy5zdGFydEluZGV4ID0gMDtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgY29uc3Qgc2Nyb2xsVG9wID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuc2Nyb2xsVG9wO1xuICAvLyAgIGlmICh0aGlzLm1haW5TY3JvbGxSYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMubWFpblNjcm9sbFJhZik7XG4gIC8vICAgdGhpcy5tYWluU2Nyb2xsUmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgIHRoaXMuaXNTeW5jaW5nRnJvbUZha2UgPSB0cnVlO1xuICAvLyAgICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAvLyAgICAgY29uc3Qgb3ZlcnNjYW4gPSB0aGlzLm92ZXJzY2FuID8/IDA7XG4gIC8vICAgICB0aGlzLnN0YXJ0SW5kZXggPSBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHRoaXMucm93SGVpZ2h0KTtcbiAgLy8gICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5zdGFydEluZGV4IC0gb3ZlcnNjYW4pO1xuICAvLyAgICAgY29uc3QgZW5kID0gTWF0aC5taW4oXG4gIC8vICAgICAgIHRoaXMuZmxhdHRlbmVkRGF0YS5sZW5ndGgsXG4gIC8vICAgICAgIHRoaXMuc3RhcnRJbmRleCArIHRoaXMudmlld3BvcnRSb3dzICsgb3ZlcnNjYW5cbiAgLy8gICAgICk7XG4gIC8vICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5mbGF0dGVuZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cblxuXG5cblxuICB2aWV3cG9ydFJvd3MgPSAwOyAvLyBob3cgbWFueSByb3dzIGZpdCBpbiB2aWV3cG9ydCAoY29tcHV0ZWQpXG4gIGZpcnN0SW5kZXggPSAwOyAvLyBpbmRleCBvZiB0aGUgZmlyc3QgdmlzaWJsZSByb3cgKGNsYW1wZWQpXG4gIHJlbmRlclN0YXJ0ID0gMDsgLy8gd2hlcmUgdGhlIHNsaWNlIGFjdHVhbGx5IHN0YXJ0cyAoZmlyc3RJbmRleCAtIG92ZXJzY2FuLCBjbGFtcGVkKVxuXG4gIHByaXZhdGUgc2Nyb2xsUmFmOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwZW5kaW5nU2Nyb2xsVG9wID0gMDtcblxuICBAVmlld0NoaWxkKCdtYWluU2Nyb2xsJykgbWFpblNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdmYWtlU2Nyb2xsJykgZmFrZVNjcm9sbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdob3JpemludGFsRmFrZVNjcm9sbCcpXG4gIGhvcml6aW50YWxGYWtlU2Nyb2xsITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NlbnRlclNjcm9sbGFibGVCb2R5JylcbiAgY2VudGVyU2Nyb2xsYWJsZUJvZHkhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgcHJpdmF0ZSBvdmVyc2NhbiA9IDEwOyAvLyBidWZmZXIgcm93cyBhYm92ZSBhbmQgYmVsb3dcblxuICBjb21wdXRlVmlld3BvcnRSb3dzKCkge1xuICAgIGlmICh0aGlzLmZha2VTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFpblNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5tYWluU2Nyb2xsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIGNvbnN0IGggPSB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgPz8gMDtcblxuICAgICAgLy8gcm93cyB2aXNpYmxlIGluIHZpZXdwb3J0XG4gICAgICBjb25zdCByb3dzSW5WaWV3cG9ydCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChoIC8gdGhpcy5yb3dIZWlnaHQpKTtcblxuICAgICAgLy8gYWRkIGJ1ZmZlciByb3dzIChvdmVyc2NhbilcbiAgICAgIHRoaXMudmlld3BvcnRSb3dzID0gcm93c0luVmlld3BvcnQgKyB0aGlzLm92ZXJzY2FuO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cblxuICBvbkhvcml6b250YWxGYWtlU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5zY3JvbGxMZWZ0O1xuICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICB9XG4gIH1cblxuICBvbkNlbnRlckJvZHlTY3JvbGwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5jZW50ZXJQaW5uZWRIZWFkZXIpIHtcbiAgICAgIHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0O1xuICAgIH1cbiAgICBpZiAodGhpcy5ob3JpemludGFsRmFrZVNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5ob3JpemludGFsRmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIG9uQ2VudGVySGVhZGVyU2Nyb2xsKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5ob3JpemludGFsRmFrZVNjcm9sbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5ob3JpemludGFsRmFrZVNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHk/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQ7XG4gICAgfVxuICB9XG5cbiAgLy8gRHJhZ2dpbmcgTG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZVxuICAvLyBwcml2YXRlIGluaXRpYWxJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgZHJhZ2dpbmdDb2x1bW46IGFueTtcbiAgZHJhZ1N0YXJ0SW5kZXg6IGFueSA9IDA7XG4gIC8vIG9uRHJhZ1N0YXJ0KGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBkYXRhLmNvbHVtbjtcbiAgLy8gICB0aGlzLmRyYWdTdGFydEluZGV4ID0gaW5kZXg7XG4gIC8vIH1cbiAgLy8gb25EcmFnTW92ZShkYXRhOiBhbnkpIHtcbiAgLy8gICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGRhdGEuZXZlbnQ7XG4gIC8vICAgY29uc3QgaGVhZGVycyA9IEFycmF5LmZyb20oXG4gIC8vICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub25lLXJvdy1oZWFkZXItY2VsbHMnKVxuICAvLyAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAvLyAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyRWwsIGlkeCkgPT4ge1xuICAvLyAgICAgY29uc3QgcmVjdCA9IGhlYWRlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBpZHggIT09IHRoaXMuZHJhZ1N0YXJ0SW5kZXggJiZcbiAgLy8gICAgICAgY2xpZW50WCA+IHJlY3QubGVmdCAmJlxuICAvLyAgICAgICBjbGllbnRYIDwgcmVjdC5yaWdodCAmJlxuICAvLyAgICAgICBjbGllbnRZID4gcmVjdC50b3AgJiZcbiAgLy8gICAgICAgY2xpZW50WSA8IHJlY3QuYm90dG9tXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29uc3Qgb3RoZXJJbmRleCA9IGlkeDtcbiAgLy8gICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5kcmFnU3RhcnRJbmRleH0gLS0+ICR7b3RoZXJJbmRleH1gKTtcbiAgLy8gICAgICAgdGhpcy5zd2FwQ29sdW1uKHRoaXMuZHJhZ1N0YXJ0SW5kZXgsIG90aGVySW5kZXgpO1xuICAvLyAgICAgICBjb25zb2xlLmxvZygnVXBkYXRlZCBDb2x1bW5zOiAnLCB0aGlzLmNvbHVtbnMpO1xuICAvLyAgICAgICB0aGlzLmRyYWdTdGFydEluZGV4ID0gb3RoZXJJbmRleDsgLy8gdXBkYXRlIGluZGV4XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICAvLyBzd2FwQ29sdW1uKHByZXZpdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcikge1xuICAvLyAgIGNvbnN0IGNvbHVtbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5jb2x1bW5zKTtcbiAgLy8gICBjb25zdCBmbGF0dGVuQ29sdW1ucyA9IHRoaXMuZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG5cbiAgLy8gICBjb25zdCB2aXNpYmxlRmxhdHRlbkNvbHVtbnMgPSBmbGF0dGVuQ29sdW1ucy5maWx0ZXIoXG4gIC8vICAgICAoY29sKSA9PiBjb2wuaXNfdmlzaWJsZVxuICAvLyAgICk7XG4gIC8vICAgY29uc3QgcHJldml1c0NvbHVtbiA9IHZpc2libGVGbGF0dGVuQ29sdW1uc1twcmV2aXVzSW5kZXhdO1xuICAvLyAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB2aXNpYmxlRmxhdHRlbkNvbHVtbnNbY3VycmVudEluZGV4XTtcblxuICAvLyAgIGNvbnNvbGUubG9nKCdQcmV2aXVzIENvbHVtbjogJywgcHJldml1c0NvbHVtbik7XG4gIC8vICAgY29uc29sZS5sb2coJ2N1cnJlbnQgY2x1bW46ICcsIGN1cnJlbnRDb2x1bW4pO1xuICAvLyB9XG5cbiAgLy8gb25EcmFnRW5kKGRhdGE6IGFueSkge1xuICAvLyAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBudWxsO1xuICAvLyAgIHRoaXMuZHJhZ1N0YXJ0SW5kZXggPSBudWxsO1xuICAvLyB9XG5cbiAgLy8gQ0RLIERSQUcgRFJPUCBMT0dJQyBHT0VTIEhFUkVcblxuXG4gIGNhbkVudGVyVG9Sb3dzR3JvdXBpbmcgPSAoZHJhZzogQ2RrRHJhZzxhbnk+LCBkcm9wOiBDZGtEcm9wTGlzdDxhbnk+KSA9PiB7XG4gICAgLy8gRXhhbXBsZTogQmxvY2sgaWYgYWxyZWFkeSBwaW5uZWQgbGVmdFxuICAgIGNvbnN0IGRhdGEgPSBkcmFnLmRhdGE7XG4gICAgaWYgKGRhdGE/LmNoaWxkcmVuICYmIGRhdGE/LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEuY2hpbGRyZW4uc29tZShcbiAgICAgICAgKGNvbDogYW55KSA9PiBjb2wuaXNfdmlzaWJsZSAmJiBjb2wuaXNfZ3JvdXBhYmxlXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5pc192aXNpYmxlICYmIGRhdGEuaXNfZ3JvdXBhYmxlO1xuICB9O1xuXG4gIC8vIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZTxhbnk+KSB7XG4gIC8vICAgY29uc3QgcG9pbnRlclggPSBldmVudC5wb2ludGVyUG9zaXRpb24ueDtcbiAgLy8gICBjb25zdCBwb2ludGVyWSA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55O1xuXG4gIC8vICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAvLyAgICAgJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lcidcbiAgLy8gICApO1xuXG4gIC8vICAgaWYgKHRhcmdldEVsZW1lbnQpIHtcbiAgLy8gICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIC8vICAgICBjb25zdCBpc092ZXJUYXJnZXQgPVxuICAvLyAgICAgICBwb2ludGVyWCA+PSByZWN0LmxlZnQgJiZcbiAgLy8gICAgICAgcG9pbnRlclggPD0gcmVjdC5yaWdodCAmJlxuICAvLyAgICAgICBwb2ludGVyWSA+PSByZWN0LnRvcCAmJlxuICAvLyAgICAgICBwb2ludGVyWSA8PSByZWN0LmJvdHRvbTtcblxuICAvLyAgICAgaWYgKGlzT3ZlclRhcmdldCkge1xuICAvLyAgICAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSB0cnVlO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gZmFsc2U7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgZW50ZXJUb1RvcFJvd0dyb3VwaW5nKGRyb3BMaXN0OiBDZGtEcmFnRW50ZXI8YW55Pikge1xuICAgIGNvbnN0IGRyYWdnaW5nRGF0YSA9IGRyb3BMaXN0Lml0ZW0uZGF0YTtcbiAgICB0aGlzLmRyYWdnaW5nSW5Hcm91cEFyZWEgPSB0cnVlO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiRHJhZ2dpbmcgaW4gZ3JvdXAgYXJlYVwiKVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRyYWdnaW5nRGF0YT8uY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCB0YXJnZXRHcm91cCA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09PSBkcmFnZ2luZ0RhdGEuaGVhZGVyXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldEdyb3VwKSB7XG4gICAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSB0YXJnZXRHcm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICBtYXRjaGluZ0NoaWxkLmlzUm93R3JvdXBlZCA9ICEhbWF0Y2hpbmdDaGlsZC5pc19ncm91cGFibGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvLyBUcnkgZmluZGluZyBpdCBpbiB0b3AtbGV2ZWwgY29sdW1ucyBmaXJzdFxuICAgICAgbGV0IHRhcmdldENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICApO1xuXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uKSB7XG4gICAgICAgIHRhcmdldENvbHVtbi5pc1Jvd0dyb3VwZWQgPSAhIXRhcmdldENvbHVtbi5pc19ncm91cGFibGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncm91cC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2hpbGQgPSBncm91cC5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnaW5nRGF0YS5maWVsZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChtYXRjaGluZ0NoaWxkKSB7XG4gICAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gISFtYXRjaGluZ0NoaWxkLmlzX2dyb3VwYWJsZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g4pyFIFJlZnJlc2ggVUlcbiAgICB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uRHJvcExpc3RFbnRlcihcbiAgICBkcm9wTGlzdDogQ2RrRHJhZ0VudGVyPGFueT4sXG4gICAgc2VjdGlvbjogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnXG4gICkge1xuICAgIGNvbnN0IGRyYWdnaW5nRGF0YSA9IGRyb3BMaXN0Lml0ZW0uZGF0YTtcblxuICAgIGNvbnN0IHRhcmdldENvbHVtbjogYW55ID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAoY29sKSA9PiBjb2wuaGVhZGVyID09IGRyYWdnaW5nRGF0YS5oZWFkZXJcbiAgICApO1xuXG4gICAgaWYgKCF0YXJnZXRDb2x1bW4pIHJldHVybjtcblxuICAgIGlmIChcbiAgICAgIEFycmF5LmlzQXJyYXkoZHJhZ2dpbmdEYXRhPy5jaGlsZHJlbikgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0Q29sdW1uPy5jaGlsZHJlbilcbiAgICApIHtcbiAgICAgIGRyYWdnaW5nRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChkcmFnZ2VkQ2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ0NoaWxkID0gdGFyZ2V0Q29sdW1uLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkID09PSBkcmFnZ2VkQ2hpbGQuZmllbGRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICBtYXRjaGluZ0NoaWxkLnBpbm5lZCA9IHNlY3Rpb24gPT09ICdjZW50ZXInID8gbnVsbCA6IHNlY3Rpb247XG4gICAgICAgICAgbWF0Y2hpbmdDaGlsZFsnaXNSb3dHcm91cGVkJ10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldENvbHVtbi5waW5uZWQgPSBzZWN0aW9uID09PSAnY2VudGVyJyA/IG51bGwgOiBzZWN0aW9uO1xuICAgICAgdGFyZ2V0Q29sdW1uWydpc1Jvd0dyb3VwZWQnXSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLy8gZW50ZXJUb1RvcEdyb3VwaW5nUm93KGRyb3BMaXN0OiBDZGtEcmFnRW50ZXI8YW55Pikge1xuICAvLyAgIHRoaXMuc2hvdWxkRGlzYWJsZURyb3BsaXN0U29ydGluZyA9IHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmc7XG4gIC8vICAgdGhpcy5kcmFnZ2luZ0luR3JvdXBBcmVhID0gdHJ1ZTtcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIGNvbnN0IGluZGV4ID0gdGhpcy5ncm91cGVkQ29sdW1ucy5maW5kSW5kZXgoXG4gIC8vICAgKGNvbCkgPT4gY29sLmZpZWxkID09PSBjb2x1bW4uZmllbGRcbiAgLy8gKTtcbiAgLy8gaWYgKGluZGV4ICE9PSAtMSkge1xuICAvLyAgIHRoaXMuZ3JvdXBlZENvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgLy8gfVxuXG4gIC8vIC8vIDIuIFRyYXZlcnNlIHRoaXMuY29sdW1ucyB0byBmaW5kIGFuZCB1cGRhdGUgdGhlIG1hdGNoaW5nIGNvbHVtblxuICAvLyB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgLy8gICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gIC8vICAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAvLyAgICAgICBpZiAoY2hpbGQuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAvLyAgICAgICAgIGNoaWxkLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9KTtcbiAgLy8gICB9IGVsc2UgaWYgKGdyb3VwLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgLy8gICAgIGdyb3VwLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAvLyAgIH1cbiAgLy8gfSk7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG5cbiAgZXhpdGVkRnJvbVRoZVRvcFJvdyhkcm9wTGlzdDogQ2RrRHJhZ0V4aXQ8YW55Pikge1xuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAgIHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnNob3VsZERpc2FibGVEcm9wbGlzdFNvcnRpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBkcmFnZ2luZ0RhdGEgPSBkcm9wTGlzdC5pdGVtLmRhdGE7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZHJhZ2dpbmdEYXRhPy5jaGlsZHJlbikpIHtcbiAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gdGhpcy5jb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGRyYWdnaW5nRGF0YS5oZWFkZXJcbiAgICAgICk7XG4gICAgICBpZiAodGFyZ2V0R3JvdXApIHtcbiAgICAgICAgZHJhZ2dpbmdEYXRhLmNoaWxkcmVuLmZvckVhY2goKGRyYWdnZWRDaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IHRhcmdldEdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuZmllbGQgPT09IGRyYWdnZWRDaGlsZC5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhcmdldENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICApO1xuXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uKSB7XG4gICAgICAgIHRhcmdldENvbHVtbi5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGdyb3VwIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyb3VwLmNoaWxkcmVuKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdDaGlsZCA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAgIChjaGlsZDogYW55KSA9PiBjaGlsZC5maWVsZCA9PT0gZHJhZ2dpbmdEYXRhLmZpZWxkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nQ2hpbGQpIHtcbiAgICAgICAgICAgICAgbWF0Y2hpbmdDaGlsZC5pc1Jvd0dyb3VwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFByZXZpZXdDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2hvdWxkRGlzYWJsZURyb3BsaXN0U29ydGluZyA9IGZhbHNlO1xuICBpc0Rpc2FibGVDb2x1bW5Hcm91cGluZyA9IGZhbHNlO1xuICBjaGVja0NvbHVtbkdyb3VwaW5nU3RhdHVzKGNvbDogYW55KSB7XG4gICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pKSB7XG4gICAgICBjb25zdCBhbGxDaGlsZHJlbkRpc2FibGVkID0gY29sLmNoaWxkcmVuLmV2ZXJ5KFxuICAgICAgICAoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaXNfZ3JvdXBhYmxlID09PSBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMuaXNEaXNhYmxlQ29sdW1uR3JvdXBpbmcgPSBhbGxDaGlsZHJlbkRpc2FibGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nID0gY29sLmlzX2dyb3VwYWJsZSA9PT0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGN1cnJlbnREcmFnZ2luZ0NvbHVtbjogYW55ID0gbnVsbDtcbiAgZHJhZ1N0YXJ0T25Hcm91cChjb2w6IGFueSkge1xuICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gY29sO1xuICB9XG5cbiAgb25Tb3J0R3JvdXAgPSBhc3luYyAoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55Piwgc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgY29sdW1ucyA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl07XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkgcmV0dXJuO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoKGNvbDogYW55KSA9PiB7XG4gICAgICBpZiAoY29sPy5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbikpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZC5pc192aXNpYmxlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wuaXNfdmlzaWJsZTtcbiAgICB9KTtcbiAgICBjb25zdCBwcmV2aW91c0hlYWRlciA9IHZpc2libGVDb2x1bW5zW2V2ZW50LnByZXZpb3VzSW5kZXhdLmhlYWRlcjtcbiAgICBjb25zdCBjdXJyZW50SGVhZGVyID0gdmlzaWJsZUNvbHVtbnNbZXZlbnQuY3VycmVudEluZGV4XS5oZWFkZXI7XG4gICAgY29uc3QgdmlzaWJsZVByZXZJbmRleCA9IHZpc2libGVDb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gcHJldmlvdXNIZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IHZpc2libGVDdXJySW5kZXggPSB2aXNpYmxlQ29sdW1ucy5maW5kSW5kZXgoXG4gICAgICAoY29sOiBhbnkpID0+IGNvbC5oZWFkZXIgPT09IGN1cnJlbnRIZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IGdldEZpZWxkcyA9IChpdGVtOiBhbnkpOiBzdHJpbmdbXSA9PiB7XG4gICAgICBpZiAoaXRlbT8uY2hpbGRyZW4gJiYgQXJyYXkuaXNBcnJheShpdGVtLmNoaWxkcmVuKSkge1xuICAgICAgICByZXR1cm4gaXRlbS5jaGlsZHJlbi5tYXAoKGNoaWxkOiBhbnkpID0+IGNoaWxkLmZpZWxkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbaXRlbS5maWVsZF07XG4gICAgfTtcbiAgICBjb25zdCBwcmV2RmllbGRzID0gZ2V0RmllbGRzKHZpc2libGVDb2x1bW5zW3Zpc2libGVQcmV2SW5kZXhdKTtcbiAgICBjb25zdCBjdXJyRmllbGRzID0gZ2V0RmllbGRzKHZpc2libGVDb2x1bW5zW3Zpc2libGVDdXJySW5kZXhdKTtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSBbLi4ucHJldkZpZWxkcywgLi4uY3VyckZpZWxkc107XG4gICAgY29uc3QgY2VsbHMgPSBhbGxGaWVsZHMubGVuZ3RoXG4gICAgICA/IChbXSBhcyBIVE1MRWxlbWVudFtdKS5jb25jYXQoXG4gICAgICAgIC4uLmFsbEZpZWxkcy5tYXAoKGZpZWxkKSA9PlxuICAgICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IGZpcnN0UG9zaXRpb25zID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgbnVtYmVyPigpO1xuICAgIGNlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoKHRoaXMgYXMgYW55KVtzZWN0aW9uXSwgdmlzaWJsZVByZXZJbmRleCwgdmlzaWJsZUN1cnJJbmRleCk7XG4gICAgY29uc3QgcHJldkNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBwcmV2aW91c0hlYWRlcik7XG4gICAgY29uc3QgY3VyckNvbEluZGV4SW5Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaGVhZGVyID09PSBjdXJyZW50SGVhZGVyKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb2x1bW5zLCBwcmV2Q29sSW5kZXhJbkNvbHVtbnMsIGN1cnJDb2xJbmRleEluQ29sdW1ucyk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2ZpZWxkfVwiXWApXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB1cGRhdGVkQ2VsbHMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICBjb25zdCBvbGRMZWZ0ID0gZmlyc3RQb3NpdGlvbnMuZ2V0KGVsKTtcbiAgICAgICAgICBpZiAob2xkTGVmdCA9PSBudWxsKSByZXR1cm47IFxuXG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3QgZGVsdGFYID0gb2xkTGVmdCAtIG5ld0xlZnQ7XG5cbiAgICAgICAgICBpZiAoZGVsdGFYICE9PSAwKSB7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtkZWx0YVh9cHgpYDtcblxuICAgICAgICAgICAgLy8gRm9yY2UgcmVmbG93XG4gICAgICAgICAgICB2b2lkIGVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ3RyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKDApJztcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvLyB9KTtcbiAgfVxuXG5cbiAgb25Ecm9wR3JvdXAoKSB7XG4gICAgdGhpcy5sZWZ0UGlubmVkQ29sdW1ucyA9IHRoaXMuZGVlcENsb25lQ29sdW1ucyh0aGlzLnByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyk7XG4gICAgdGhpcy5jZW50ZXJDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld0NlbnRlckNvbHVtbnMpO1xuICAgIHRoaXMucmlnaHRQaW5uZWRDb2x1bW5zID0gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKHRoaXMucHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyk7XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKCksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVlcENsb25lQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sdW1ucykpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBjb2x1bW5zLm1hcChjb2wgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIHF1ZXJ5OiBjb2wucXVlcnkgPyB7IC4uLmNvbC5xdWVyeSB9IDogbnVsbCxcbiAgICAgIGNvbHVtbl9kcm9wZG93bl92YWx1ZTogQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKVxuICAgICAgICA/IFsuLi5jb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXVxuICAgICAgICA6IFtdLFxuICAgICAgLy8gUmVjdXJzaXZlbHkgZGVlcCBjbG9uZSBjaGlsZHJlbiBpZiBwcmVzZW50XG4gICAgICBjaGlsZHJlbjogQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pXG4gICAgICAgID8gdGhpcy5kZWVwQ2xvbmVDb2x1bW5zKGNvbC5jaGlsZHJlbilcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9XG5cblxuICBhc3luYyBvbkRyb3BUb3BHcm91cChldmVudDogQ2RrRHJhZ0Ryb3A8YW55Pikge1xuICAgIGlmICh0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikgcmV0dXJuO1xuICAgIHRoaXMubWFpblNjcm9sbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBkcmFnZ2VkRGF0YSA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBpZiAoZHJhZ2dlZERhdGE/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZHJhZ2dlZERhdGEuY2hpbGRyZW4pKSB7XG4gICAgICBkcmFnZ2VkRGF0YS5jaGlsZHJlbi5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sLmlzX3Zpc2libGUgJiYgY29sLmlzX2dyb3VwYWJsZSkge1xuICAgICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGRyYWdnZWREYXRhLmlzX3Zpc2libGUgJiYgZHJhZ2dlZERhdGEuaXNfZ3JvdXBhYmxlKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnMucHVzaChkcmFnZ2VkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dpbmdJbkdyb3VwQXJlYSA9IGZhbHNlO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHRoaXMudXBkYXRlRmxhdHRlbmVkRGF0YSgpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGhzQW5kR3JvdXBzKCk7XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVSb3dzKDApO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwMCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgb25Hcm91cFJlb3JkZXIoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmdyb3VwZWRDb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZ3JvdXBlZENvbHVtbnMubWFwKChpdGVtKSA9PiBpdGVtLmZpZWxkKTtcbiAgICB0aGlzLmRhdGFTZXQgPSBhd2FpdCB0aGlzLmdyb3VwRGF0YUFzeW5jKHRoaXMub3JpZ2luYWxEYXRhU2V0LCBmaWVsZHMpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVGbGF0dGVuZWREYXRhKCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3MoMCk7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwQm94UGFkZGluZyA9IHRoaXMuY29sdW1uc0dyb3VwZWRCb3g/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKClcbiAgICB9LCAxMCk7XG4gIH1cblxuICBhc3luYyB1bmdyb3VwQ29sdW1uKGNvbHVtbjogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtbnMuZmluZEluZGV4KFxuICAgICAgICAoY29sKSA9PiBjb2wuZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5ncm91cGVkQ29sdW1ucy5tYXAoKGl0ZW0pID0+IGl0ZW0uZmllbGQpO1xuICAgICAgdGhpcy5kYXRhU2V0ID0gYXdhaXQgdGhpcy5ncm91cERhdGFBc3luYyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgZmllbGRzKTtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoZ3JvdXAuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkLmZpZWxkID09PSBjb2x1bW4uZmllbGQpIHtcbiAgICAgICAgICAgICAgY2hpbGQuaXNSb3dHcm91cGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZ3JvdXAuZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgIGdyb3VwLmlzUm93R3JvdXBlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZsYXR0ZW5lZERhdGEoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5XaWR0aHNBbmRHcm91cHMoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlUm93cygwKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sIDEwMDApO1xuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gdW5ncm91cENvbHVtbjpcIiwgZXJyKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIHNob3VsZFRoZUdyb3VwSGVhZGVyU2hvdyhncm91cDogYW55KSB7XG4gICAgaWYgKGdyb3VwPy5jaGlsZHJlbiAmJiBncm91cC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBncm91cC5jaGlsZHJlbi5zb21lKFxuICAgICAgICAoY29sOiBhbnkpID0+IGNvbC5pc192aXNpYmxlICYmICFjb2w/LmlzUm93R3JvdXBlZFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwPy5pc192aXNpYmxlICYmICFncm91cD8uaXNSb3dHcm91cGVkO1xuICB9XG5cblxuICAvLyBvbkNoaWxkRHJhZ1N0YXJ0KCkge1xuICAvLyAgIGRlYnVnZ2VyO1xuICAvLyB9XG5cbiAgLy8gZHJvcExpc3RJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gZ2VuZXJhdGVEcm9wTGlzdElkcygpIHtcbiAgLy8gICB0aGlzLmRyb3BMaXN0SWRzID0gW107XG5cbiAgLy8gICBjb25zdCBzZWN0aW9uS2V5cyA9IFtcbiAgLy8gICAgICdsZWZ0UGlubmVkQ29sdW1ucycsXG4gIC8vICAgICAnY2VudGVyQ29sdW1ucycsXG4gIC8vICAgICAncmlnaHRQaW5uZWRDb2x1bW5zJyxcbiAgLy8gICBdO1xuXG4gIC8vICAgc2VjdGlvbktleXMuZm9yRWFjaCgoc2VjdGlvbktleSkgPT4ge1xuICAvLyAgICAgY29uc3Qgc2VjdGlvbkNvbHMgPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25LZXldO1xuXG4gIC8vICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAvLyAgICAgICBpZiAoY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAvLyAgICAgICAgIGNvbC5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55LCBjaGlsZEluZGV4OiBudW1iZXIpID0+IHtcbiAgLy8gICAgICAgICAgIGlmIChjaGlsZD8uaXNfdmlzaWJsZSAmJiAhY2hpbGQuaXNSb3dHcm91cGVkKSB7XG4gIC8vICAgICAgICAgICAgIGNvbnN0IGlkID0gYCR7c2VjdGlvbktleX0ke2l9YDtcbiAgLy8gICAgICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9KTtcbiAgLy8gICAgICAgfSBlbHNlIGlmIChjb2w/LmlzX3Zpc2libGUgJiYgIWNvbC5pc1Jvd0dyb3VwZWQpIHtcbiAgLy8gICAgICAgICBjb25zdCBpZCA9IGAke3NlY3Rpb25LZXl9JHtpfWA7XG4gIC8vICAgICAgICAgdGhpcy5kcm9wTGlzdElkcy5wdXNoKGlkKTtcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSk7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICBvbkNoaWxkRHJvcGxpc3RTb3J0ZWQgPSBhc3luYyAoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55Piwgc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGlubmVkID1cbiAgICAgIHNlY3Rpb24gPT0gJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucydcbiAgICAgICAgPyAnbGVmdCdcbiAgICAgICAgOiBzZWN0aW9uID09ICdwcmV2aWV3UmlnaHRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICAgID8gJ3JpZ2h0J1xuICAgICAgICAgIDogXCJcIjtcblxuICAgIGNvbnN0IGNvbHVtbiA9IGV2ZW50Lml0ZW0uZGF0YTtcbiAgICBsZXQgZ3JvdXAgPSB0aGlzLmNvbHVtbnMuZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcbiAgICBjb25zdCBncm91cEluZGV4ID0gdGhpcy5jb2x1bW5zLmZpbmRJbmRleChcbiAgICAgIChjb2wpID0+IGNvbC5oZWFkZXIgPT09IGdyb3VwLmhlYWRlclxuICAgICk7XG4gICAgY29uc3QgZmlsdGVyZWRHcm91cCA9IGdyb3VwPy5jaGlsZHJlbi5maWx0ZXIoKGNvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpc1Bpbm5lZE1hdGNoID1cbiAgICAgICAgKHBpbm5lZCA9PT0gXCJcIiAmJiAoIWNvbD8ucGlubmVkIHx8IGNvbD8ucGlubmVkID09PSBcIlwiKSkgfHwgY29sPy5waW5uZWQgPT09IHBpbm5lZDtcbiAgICAgIHJldHVybiBpc1Bpbm5lZE1hdGNoICYmIGNvbD8uaXNfdmlzaWJsZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHByZXZpb3VzRmllbGQgPSBmaWx0ZXJlZEdyb3VwW2V2ZW50LnByZXZpb3VzSW5kZXhdLmZpZWxkO1xuICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcmVkR3JvdXBbZXZlbnQuY3VycmVudEluZGV4XS5maWVsZDtcbiAgICBjb25zdCB2aXNpYmxlUHJldkluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KFxuICAgICAgKGNvbDogYW55KSA9PiBjb2wuZmllbGQgPT0gcHJldmlvdXNGaWVsZFxuICAgICk7XG4gICAgY29uc3QgdmlzaWJsZUN1cnJJbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmZpZWxkID09IGN1cnJlbnRGaWVsZFxuICAgICk7XG4gICAgY29uc3QgYWxsRmllbGRzID0gW3ByZXZpb3VzRmllbGQsIGN1cnJlbnRGaWVsZF07XG4gICAgY29uc3QgY2VsbHMgPSBhbGxGaWVsZHMubGVuZ3RoXG4gICAgICA/IChbXSBhcyBIVE1MRWxlbWVudFtdKS5jb25jYXQoXG4gICAgICAgIC4uLmFsbEZpZWxkcy5tYXAoKGZpZWxkKSA9PlxuICAgICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2ZpZWxkPVwiJHtmaWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXVxuICAgICAgICApXG4gICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgY29uc3QgZ3JvdXBJblNlY3Rpb24gPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmQoXG4gICAgICAoY29sOiBhbnkpID0+XG4gICAgICAgIEFycmF5LmlzQXJyYXkoY29sLmNoaWxkcmVuKSAmJlxuICAgICAgICBjb2wuY2hpbGRyZW4uc29tZSgoY2hpbGQ6IGFueSkgPT4gY2hpbGQ/LmZpZWxkID09PSBjb2x1bW4/LmZpZWxkKVxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJHcm91cEluU2VjdGlvbiA9ICh0aGlzIGFzIGFueSlbc2VjdGlvbl0uZmluZChcbiAgICAgIChjb2w6IGFueSkgPT5cbiAgICAgICAgQXJyYXkuaXNBcnJheShjb2wuY2hpbGRyZW4pICYmXG4gICAgICAgIGNvbC5jaGlsZHJlbi5zb21lKChjaGlsZDogYW55KSA9PiBjaGlsZD8uZmllbGQgPT09IGNvbHVtbj8uZmllbGQpXG4gICAgKTtcblxuICAgIGNvbnN0IGdyb3VwSW5TZWN0aW9uSW5kZXggPSAodGhpcyBhcyBhbnkpW3NlY3Rpb25dLmZpbmRJbmRleChcbiAgICAgIChjb2w6IGFueSkgPT4gY29sLmhlYWRlciA9PT0gZ3JvdXBJblNlY3Rpb24uaGVhZGVyXG4gICAgKTtcblxuICAgIGNvbnN0IGZpcnN0UG9zaXRpb25zID0gbmV3IE1hcDxIVE1MRWxlbWVudCwgbnVtYmVyPigpO1xuICAgIGNlbGxzLmZvckVhY2goKGVsKSA9PiBmaXJzdFBvc2l0aW9ucy5zZXQoZWwsIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpKTtcbiAgICBtb3ZlSXRlbUluQXJyYXkoXG4gICAgICB0aGlzLmNvbHVtbnNbZ3JvdXBJbmRleF0/LmNoaWxkcmVuLFxuICAgICAgdmlzaWJsZVByZXZJbmRleCxcbiAgICAgIHZpc2libGVDdXJySW5kZXhcbiAgICApO1xuXG4gICAgbW92ZUl0ZW1JbkFycmF5KFxuICAgICAgKHRoaXMgYXMgYW55KVtzZWN0aW9uXT8uW2dyb3VwSW5TZWN0aW9uSW5kZXhdLmNoaWxkcmVuLFxuICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxuICAgICk7XG5cbiAgICAvLyBhd2FpdCB0aGlzLnJlZnJlc2hQcmV2aWV3Q29sdW1ucygpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMubmdab25lLm9uU3RhYmxlKTtcbiAgICBhbGxGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDZWxscyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkhO1xuICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcbiAgICAgICAgaWYgKGRlbHRhWCAhPT0gMCkge1xuICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICBlbC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7ZGVsdGFYfXB4KWA7XG4gICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICd0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSc7XG4gICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gKCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJyc7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgaGFuZGxlKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBoYW5kbGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGFsbEZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkQ2VsbHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7ZmllbGR9XCJdYClcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuXG4gICAgICAgIHVwZGF0ZWRDZWxscy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9sZExlZnQgPSBmaXJzdFBvc2l0aW9ucy5nZXQoZWwpO1xuICAgICAgICAgIGlmIChvbGRMZWZ0ID09IG51bGwpIHJldHVybjsgLy8gc2FmZXR5IGNoZWNrXG5cbiAgICAgICAgICBjb25zdCBuZXdMZWZ0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAndHJhbnNmb3JtJztcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuXG4gICAgICAgICAgICAvLyBGb3JjZSByZWZsb3dcbiAgICAgICAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSknO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnJztcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGhhbmRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gY29uc29sZS5ncm91cCgnR3JvdXA6ICcsIGdyb3VwKTtcbiAgfVxuXG5cbiAgb25DaGlsZERyb3BsaXN0RHJvcGVkKGNka0RyYWdEcm9wZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoc0FuZEdyb3VwcygpO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpLFxuICAgICAgbm9fb2ZfcmVjb3JkczogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2VTaXplLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyKTtcbiAgfVxuXG4gIC8vIFJvd3MgR3JvdXBpbmcgTG9naWMgR29lcyBIZXJlXG5cbiAgZ3JvdXBEYXRhKGRhdGE6IGFueVtdLCBncm91cEZpZWxkczogc3RyaW5nW10pOiBhbnlbXSB7XG4gICAgbGV0IGRhdGFTZXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XG4gICAgaWYgKCFncm91cEZpZWxkcy5sZW5ndGgpIHJldHVybiBkYXRhO1xuICAgIGNvbnN0IFtjdXJyZW50RmllbGQsIC4uLnJlc3RGaWVsZHNdID0gZ3JvdXBGaWVsZHM7XG4gICAgY29uc3QgZ3JvdXBlZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNldCkge1xuICAgICAgbGV0IGtleVZhbHVlID0gY3VycmVudEZpZWxkLnNwbGl0KCcuJykucmVkdWNlKChvYmosIGspID0+IG9iaj8uW2tdLCBpdGVtKTtcbiAgICAgIGxldCBncm91cEtleTogc3RyaW5nO1xuICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGlzX2RlbGV0ZWQgZmllbGRcbiAgICAgIGlmIChjdXJyZW50RmllbGQgPT09ICdpc19kZWxldGVkJyB8fCBjdXJyZW50RmllbGQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaXNfZGVsZXRlZCcpKSB7XG4gICAgICBpZiAoa2V5VmFsdWUgPT09IHRydWUgfHwga2V5VmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICBncm91cEtleSA9ICdBcmNoaXZlZCc7XG4gICAgICB9IGVsc2UgaWYgKGtleVZhbHVlID09PSBmYWxzZSB8fCBrZXlWYWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBncm91cEtleSA9ICdVbmFyY2hpdmVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0gXCJfQmxhbmtcIjtcbiAgICAgIH1cbiAgICAgICB9XG4gICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5VmFsdWUpKSB7XG4gICAgICAgIGlmIChrZXlWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBncm91cEtleSA9IFwiX0JsYW5rXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleVZhbHVlWzBdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcChvYmogPT4gKG9iaj8uZGVwYXJ0bWVudF9uYW1lIHx8IG9iai5yb2xlTmFtZSB8fCBvYmo/LmZ1bGxfbmFtZSB8fCAgb2JqPy52YWx1ZSB8fCBvYmo/Lm5hbWUpID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBLZXkgPSBrZXlWYWx1ZVxuICAgICAgICAgICAgLm1hcCh2YWwgPT4gdmFsID8/IFwiX0JsYW5rXCIpXG4gICAgICAgICAgICAuam9pbihcIixcIik7XG4gICAgICAgIH1cbiAgICAgIH0gXG4gICAgICAgLy8gQ2hlY2sgZm9yIERhdGUgb2JqZWN0IE9SIGRhdGUgc3RyaW5nXG4gICAgZWxzZSBpZiAoa2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8ICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpKSB7XG4gICAgICBjb25zdCBkYXRlT2JqID0ga2V5VmFsdWUgaW5zdGFuY2VvZiBEYXRlID8ga2V5VmFsdWUgOiBuZXcgRGF0ZShrZXlWYWx1ZSk7XG4gICAgICBncm91cEtleSA9IHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZShkYXRlT2JqLCB0aGlzLmRhdGVGb3JtYXQgfHwgJ2RkL01NL3l5eXknKTtcbiAgICB9IFxuICAgICAvLyAgSGFuZGxlIG9iamVjdHMgKGxpa2Uge2lkLCBuYW1lLCB2YWx1ZX0pXG4gICAgZWxzZSBpZiAodHlwZW9mIGtleVZhbHVlID09PSAnb2JqZWN0JyAmJiBrZXlWYWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShrZXlWYWx1ZSkpIHtcbiAgICAgIC8vIFRyeSBjb21tb24gcHJvcGVydHkgbmFtZXMgZm9yIG9iamVjdHNcbiAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWUudmFsdWUgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlLm5hbWUgPz8gXG4gICAgICAgICAgICAgICAgIGtleVZhbHVlLmlkID8/IFxuICAgICAgICAgICAgICAgICBrZXlWYWx1ZS5sYWJlbCA/PyBcbiAgICAgICAgICAgICAgICAga2V5VmFsdWVbT2JqZWN0LmtleXMoa2V5VmFsdWUpWzBdXSA/PyBcbiAgICAgICAgICAgICAgICAgXCJfQmxhbmtcIjtcbiAgICAgIFxuICAgICAgLy8gSWYgaXQncyBzdGlsbCBhbiBvYmplY3QgYWZ0ZXIgZXh0cmFjdGlvbiwgY29udmVydCB0byBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgZ3JvdXBLZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGdyb3VwS2V5ID0gXCJfQmxhbmtcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0gdGhpcy50b1RpdGxlQ2FzZShTdHJpbmcoZ3JvdXBLZXkpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGdyb3VwS2V5ID0ga2V5VmFsdWUgPyB0aGlzLnRvVGl0bGVDYXNlKFN0cmluZyhrZXlWYWx1ZSkudHJpbSgpKSA6IFwiX0JsYW5rXCI7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIGlmICh0eXBlb2Yga2V5VmFsdWUgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKGtleVZhbHVlKSkpIHtcbiAgICAgIC8vICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKGtleVZhbHVlKTtcbiAgICAgIC8vICAgZ3JvdXBLZXkgPSB0aGlzLmNvbW1vblNldmljZS5mb3JtYXREYXRlVmFsdWUoZGF0ZU9iaiwgdGhpcy5kYXRlRm9ybWF0IHx8ICdkZC9NTS95eXl5Jyk7XG4gICAgICAvLyB9XG5cbiAgICAgIGlmICghZ3JvdXBlZE1hcC5oYXMoZ3JvdXBLZXkpKSBncm91cGVkTWFwLnNldChncm91cEtleSwgW10pO1xuICAgICAgZ3JvdXBlZE1hcC5nZXQoZ3JvdXBLZXkpIS5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkTWFwLmVudHJpZXMoKSkubWFwKChbZ3JvdXBWYWx1ZSwgZ3JvdXBJdGVtc10pID0+ICh7XG4gICAgICBpc0dyb3VwOiB0cnVlLFxuICAgICAgZ3JvdXBGaWVsZDogY3VycmVudEZpZWxkLFxuICAgICAgZ3JvdXBWYWx1ZSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmdyb3VwRGF0YShncm91cEl0ZW1zLCByZXN0RmllbGRzKSxcbiAgICAgIGlzRXhwYW5kOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB0b1RpdGxlQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgPy50b0xvd2VyQ2FzZSgpXG4gICAgICA/LnNwbGl0KCcgJylcbiAgICAgID8ubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgICA/LmpvaW4oJyAnKTtcbiAgfVxuXG5cbiAgY291bnRMZWFmUm93cyhncm91cDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoIWdyb3VwLmNoaWxkcmVuIHx8ICFncm91cC5jaGlsZHJlbi5sZW5ndGgpIHJldHVybiAwO1xuXG4gICAgcmV0dXJuIGdyb3VwLmNoaWxkcmVuLnJlZHVjZSgoY291bnQ6IG51bWJlciwgY2hpbGQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKGNoaWxkLmlzR3JvdXAgPyB0aGlzLmNvdW50TGVhZlJvd3MoY2hpbGQpIDogMSk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgdG9nZ2xlQWN0aXZlRmlsdGVyKCkge1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gIXRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuO1xuICB9XG5cbiAgdG9nZ2xlQWN0aW9ucyh0eXBlOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZSA9PT0gdGhpcy5hY3RpdmVUb3BCdXR0b24pIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICBlbHNlIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gdHlwZTtcbiAgICB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYWN0aXZlU3ViQnV0dG9uID0gJyc7XG4gIHRvZ2dsZVN1YkFjdGlvbnModHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCA/ICAodGhpcy5wcmVzZXROYW1lID0gJycpIDogKCB0aGlzLnByZXNldE5hbWUgPSAgdGhpcy5zdG9yZVByZXNldE5hbWUpXG4gICAgaWYgKHR5cGUgPT09IHRoaXMuYWN0aXZlU3ViQnV0dG9uKSB0aGlzLmFjdGl2ZVN1YkJ1dHRvbiA9ICcnO1xuICAgIGVsc2UgdGhpcy5hY3RpdmVTdWJCdXR0b24gPSB0eXBlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvbnNEcm9wZG93bigpIHtcbiAgICB0aGlzLnNob3dBY3Rpb25zRHJvcERvd24gPSAhdGhpcy5zaG93QWN0aW9uc0Ryb3BEb3duO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuICBhc3luYyBjaGFuZ2VUYWJsZUxheW91dChldmVudDogRXZlbnQsIGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmICh0YXJnZXQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0ID0gbGF5b3V0VHlwZTtcbiAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQobGF5b3V0VHlwZSlcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZVJvd3ModGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxUb3ApO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICAgIHRoaXMub25Gb250Q2hhbmdlKClcbiAgfVxuXG4gIHNldFRhYmxlTGF5b3V0KGxheW91dFR5cGU6IHN0cmluZykge1xuICAgIGlmICghbGF5b3V0VHlwZSkgcmV0dXJuO1xuICAgIGlmIChsYXlvdXRUeXBlID09PSAnc21hbGwnKSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDM2O1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA0MDtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDEwO1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDEwO1xuXG4gICAgfSBlbHNlIGlmIChsYXlvdXRUeXBlID09PSAnbWVkaXVtJykge1xuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0NDtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ID0gNDQ7XG4gICAgICB0aGlzLmJvZHlUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSB8fCAxNDtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSB8fCAxNDtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDYwO1xuICAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSA1MjtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSB0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE2O1xuICAgIH1cbiAgICAvLyB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBnZXQgc3RhcnRJbmRleERhdGEoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpICogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0O1xuICB9XG5cbiAgZ2V0IGVuZEluZGV4KCkge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQsIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVQYWdlcygpOiAobnVtYmVyIHwgc3RyaW5nKVtdIHtcbiAgICBjb25zdCBwYWdlczogKG51bWJlciB8IHN0cmluZylbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIDw9IDcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzOyBpKyspIHtcbiAgICAgICAgcGFnZXMucHVzaChpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFnZXMucHVzaCgxKTtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA+IDMpIHtcbiAgICAgICAgcGFnZXMucHVzaCgnLi4uJyk7XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgyLCB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpO1xuICAgICAgbGV0IGVuZCA9IE1hdGgubWluKHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMSwgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgKyAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VzLnB1c2goaSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA8IHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VzIC0gMikge1xuICAgICAgICBwYWdlcy5wdXNoKCcuLi4nKTtcbiAgICAgIH1cbiAgICAgIHBhZ2VzLnB1c2godGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWdlcztcbiAgfVxuXG5cbiAgc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duID0gJyc7XG4gIHRvZ2dsZUNvbHVtbkluRmlsdGVyRHJvcGRvd24oY29sOiBhbnkpIHtcblxuICB9XG5cbiAgcmVtb3ZlQ29sdW1uRnJvbUZpbHRlcihvcHRpb246IGFueSkge1xuXG4gIH1cblxuICBoYW5kbGVCYWNrc3BhY2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gSWYgc2VhcmNoIGlzIGVtcHR5LCByZW1vdmUgbGFzdCB0YWdcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duICYmIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zW3RoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihsYXN0KTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51ZVNlYXJjaElucHV0JykgZmlsdGVyTWVudWVTZWFyY2hJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD5cbiAgQFZpZXdDaGlsZCgnZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCcpIGZpbHRlck1lbnVlVGV4dGNoSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+XG5cbiAgb3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sOiBhbnkpIHtcbiAgICBpZiAoY29sLnR5cGUgPT0gJ2ltYWdlJyB8fCAhY29sPy50eXBlIHx8ICFjb2wuaXNfc2VhcmNoX2FibGUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyID0gY29sO1xuICAgIHRoaXMuaXNUaHJlZURvdHNGaWx0ZXJPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgaWYgKGNvbC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbC50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0KSB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSBjb2wucXVlcnkuZmlyc3RfY29uZGl0aW9uID8gY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IGNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5jb25kaXRpb24gfHwgJ25vbmUnO1xuICAgICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfY29uZGl0aW9uID8gY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA6ICgoY29sLnR5cGUgPT0gJ2RhdGUnIHx8IGNvbC50eXBlID09ICd0aW1lJyB8fCBjb2wudHlwZSA9PSAnbnVtYmVyJykgPyAnZXF1YWwnIDogJ2NvbnRhaW4nKTtcbiAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUgfHwgJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyTWVudWVUZXh0Y2hJbnB1dCl7XG4gICAgICAgICAgdGhpcy5maWx0ZXJNZW51ZVRleHRjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNGaWx0ZXJPcGVuID0gZmFsc2VcbiAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI6IGFueTtcbiAgc2hvd0ZpbHRlcnMgPSB0aGlzLnNob3dTaWRlTWVudSA/IGZhbHNlIDogZmFsc2U7XG5cblxuICBvcGVuRmlsdGVyRnJvbURpc2FibGVkU2VhcmNoZWRJbnB1dChjb2w6IGFueSkge1xuICAgIGlmIChjb2wudHlwZSAhPT0gJ2Ryb3Bkb3duJyAmJiBjb2wudHlwZSAhPT0gJ2FycmF5JyB8fCAhY29sLmlzX3NlYXJjaF9hYmxlKSByZXR1cm47XG4gICAgdGhpcy5vcGVuRmlsdGVyKGNvbCk7XG4gIH1cblxuICBvcGVuRmlsdGVyKGNvbDogYW55KSB7XG4gICAgaWYoIWNvbC5pc19zZWFyY2hfYWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IGNvbDtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGxcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5zZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gPSAnJztcbiAgICB0aGlzLmFkZEZpbHRlckNvbHVtbklucHV0ID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlciA9IGNvbDtcblxuICAgIGlmIChjb2wudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2wudHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcy5jbGVhcigpO1xuICAgICAgY29uc3Qgc2F2ZWRJZHMgPSBjb2w/LnF1ZXJ5Py5faWRzIHx8IFtdO1xuICAgICAgc2F2ZWRJZHMuZm9yRWFjaCgoaWQ6IHN0cmluZykgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJPcHRpb25zID0gdGhpcy5zZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5maWx0ZXIoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJywgJ3RpbWUnXS5pbmNsdWRlcyhjb2wudHlwZSkpIHtcbiAgICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPVxuICAgICAgICBjb2w/LnF1ZXJ5Py5maXJzdF9jb25kaXRpb24gPz9cbiAgICAgICAgKChjb2wudHlwZSA9PT0gJ251bWJlcicgfHwgY29sLnR5cGUgPT09ICd0aW1lJyB8fCBjb2wudHlwZSA9PT0gJ2RhdGUnKVxuICAgICAgICAgID8gJ2VxdWFsJ1xuICAgICAgICAgIDogJ2NvbnRhaW4nKTtcblxuICAgICAgdGhpcy5maXJzdFZhbHVlID0gY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgJyc7XG4gICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbD8ucXVlcnk/LmNvbmRpdGlvbiB8fCAnbm9uZSc7XG4gICAgICB0aGlzLnNlY29uZENvbmRpdGlvbiA9XG4gICAgICAgICAgY29sPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbiA/P1xuICAgICAgICAgICgoY29sLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbC50eXBlID09PSAndGltZScgfHwgY29sLnR5cGUgPT09ICdkYXRlJylcbiAgICAgICAgICAgID8gJ2VxdWFsJ1xuICAgICAgICAgICAgOiAnY29udGFpbicpO1xuICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IGNvbD8ucXVlcnk/LnNlY29uZF92YWx1ZSB8fCAnJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cblxuICBmaXJzdFZhbHVlOiBhbnkgPSAnJztcbiAgZmlyc3RDb25kaXRpb24gPSAnJztcbiAgc2Vjb25kVmFsdWU6IGFueSA9ICcnO1xuICBzZWNvbmRDb25kaXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjb25kaXRpb246IHN0cmluZyB8IG51bGwgPSAnJztcblxuICByZXNldFRleHRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuZmlyc3RDb25kaXRpb24gPSAnY29udGFpbic7XG4gICAgdGhpcy5maXJzdFZhbHVlID0gJyc7XG4gICAgdGhpcy5jb25kaXRpb24gPSAnbm9uZSc7XG4gICAgdGhpcy5zZWNvbmRDb25kaXRpb24gPSBudWxsO1xuICAgIHRoaXMuc2Vjb25kVmFsdWUgPSAnJztcbiAgICB0aGlzLmlzRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmVUb3BCdXR0b24gPSAnJztcbiAgfVxuXG4gIHRvZ2dsZUFsbFZhbHVzU2VsZWN0aW9uSW5Ecm9wZG93bkZpbHRlcihjb2x1bW46IGFueSkge1xuXG4gIH1cblxuXG4gIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogYW55W10gPSBbXVxuXG4gIGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKG9wdGlvbjogYW55KSB7XG4gICAgZGVidWdnZXJcbiAgICBjb25zdCBpZCA9IG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbjtcbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuYWRkKGlkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlck9wdGlvbnMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWUuZmlsdGVyKChvcHRpb246IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKG9wdGlvbi5pZCB8fCBvcHRpb24uX2lkIHx8IG9wdGlvbikpXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJDaGFuZ2VzKCkge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyT3B0aW9ucyEubGVuZ3RoID0gMDtcbiAgICB0aGlzLmlzQWN0aXZlRmlsdGVyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVG9wQnV0dG9uID0gJyc7XG4gICAgLy8gY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJGaWx0ZXJlZCBDb2x1bW5zIEFyZTogXCIsIGZpbHRlcmVkQ29sdW1ucyk7XG4gIH1cblxuICBhcHBseURyb3Bkb3duRmlsdGVyKCkge1xuICAgICAgICAgLy8gLS0tIFZBTElEQVRJT04gQkVGT1JFIEFOWVRISU5HIC0tLVxuICBjb25zdCBjb2x1bW5zcyA9IHRoaXMuZmluZENvbHVtbih0aGlzLmNvbHVtbnMsIHRoaXMuc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXIuZmllbGQpO1xuICBpZiAoIWNvbHVtbnNzKSByZXR1cm47XG5cbiAgaWYgKGNvbHVtbnNzLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uc3MudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgIGlmICghdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgfHwgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChbJ3N0cmluZycsICdudW1iZXInLCAnZGF0ZScsICd0aW1lJ10uaW5jbHVkZXMoY29sdW1uc3MudHlwZSkpIHtcbiAgICBjb25zdCBpc0VtcHR5ID1cbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5maXJzdFZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9PT0gJyc7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICAgIHRoaXMuY2xvc2VBbGxGaWx0ZXJNZW51cygpO1xuICAgIHRoaXMuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmZpbmRDb2x1bW4odGhpcy5jb2x1bW5zLCB0aGlzLnNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmZpZWxkKTtcbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSBjb2x1bW4ucXVlcnkgfHwge307XG4gICAgICAgIGNvbHVtbi5xdWVyeS5faWRzID0gY29sdW1uLnF1ZXJ5Ll9pZHMgfHwgW107XG5cbiAgICAgICAgLy8gUmVtb3ZlIHN0YWxlIElEcyAobm90IHByZXNlbnQgaW4gU2V0KVxuICAgICAgICBjb2x1bW4ucXVlcnkuX2lkcyA9IGNvbHVtbi5xdWVyeS5faWRzLmZpbHRlcihcbiAgICAgICAgICAoaWQ6IGFueSkgPT4gdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGlkKSAgIC8vIDwtLSB1c2UgLmhhcygpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIG5ldyBvbmVzIGlmIG1pc3NpbmdcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgaWYgKCFjb2x1bW4ucXVlcnkuX2lkcy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5xdWVyeS5faWRzLnB1c2goaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIH0gZWxzZSBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2RhdGUnLCAndGltZSddLmluY2x1ZGVzKGNvbHVtbi50eXBlKSkge1xuICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgZmlyc3RfY29uZGl0aW9uOiB0aGlzLmZpcnN0Q29uZGl0aW9uIHx8ICdjb250YWluJyxcbiAgICAgICAgICBmaXJzdF92YWx1ZTogdGhpcy5maXJzdFZhbHVlIHx8IG51bGwsXG4gICAgICAgICAgY29uZGl0aW9uOiB0aGlzLnNlY29uZFZhbHVlID8gdGhpcy5jb25kaXRpb24gOiAnbm9uZScsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogdGhpcy5zZWNvbmRWYWx1ZSA/IHRoaXMuc2Vjb25kQ29uZGl0aW9uIDogbnVsbCxcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IHRoaXMuc2Vjb25kVmFsdWUgfHwgbnVsbCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2x1bW4uc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbHVtbi5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbHVtbi50eXBlLFxuICAgICAgX2lkczogY29sdW1uLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuXG4gICAgdGhpcy5pc0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5wcml2YXRlIGZpbmRDb2x1bW4oY29sdW1uczogYW55W10sIGZpZWxkOiBzdHJpbmcpOiBhbnkge1xuICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgaWYgKGNvbC5maWVsZCA9PT0gZmllbGQpIHJldHVybiBjb2w7XG4gICAgaWYgKGNvbC5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZENvbHVtbihjb2wuY2hpbGRyZW4sIGZpZWxkKTtcbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiAgLy8gYXBwbHlGaWx0ZXJGcm9tRmlsdGVyUm93KGNvbHVtbjogYW55KSB7XG4gIC8vICAgY29uc3QgZmlsdGVyID0ge1xuICAvLyAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgLy8gICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgLy8gICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gIC8vICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgLy8gICAgIF9pZHM6IGNvbHVtbi5faWRzXG4gIC8vICAgfTtcbiAgLy8gICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAvLyAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gIC8vICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAvLyAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gIC8vICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgLy8gICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAvLyAgIHRoaXMuZmlsdGVyT3B0aW9ucy5lbWl0KGZpbHRlcmVkQ29sdW1ucyk7XG4gIC8vIH1cblxuICBpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2x1bW46IGFueSkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnNDb25maWc/LnNvbWUoY29sID0+IGNvbC5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgfVxuXG4gIC8vIFNpZGUgRmlsdGVycyBMb2dpYyBpcyBoZXJlXG5cbiAgdG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8uY2hlY2tlZDtcblxuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5tYXAoXG4gICAgICAgIChvcHQ6IGFueSkgPT4gb3B0LmlkIHx8IG9wdC5faWQgfHwgb3B0XG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oY29sLnF1ZXJ5Ll9pZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wucXVlcnkuX2lkcyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuXG4gIGlzQWxsU2lkZUZpbHRlck9wdGlvbnNTZWxlY3RlZChjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghY29sPy5xdWVyeT8uX2lkcyB8fCAhQXJyYXkuaXNBcnJheShjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2wucXVlcnkuX2lkcy5sZW5ndGggPT09IGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUubGVuZ3RoO1xuICB9XG5cbiAgb25PcHRpb25Ub2dnbGUoY29sOiBhbnksIG9wdGlvbjogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uSWQgPSBvcHRpb24uaWQgfHwgb3B0aW9uLl9pZCB8fCBvcHRpb247XG4gICAgaWYgKCFjb2wucXVlcnkuX2lkcykge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgaWR4ID0gY29sLnF1ZXJ5Ll9pZHMuaW5kZXhPZihvcHRpb25JZCk7XG4gICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICBjb2wucXVlcnkuX2lkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sLnF1ZXJ5Ll9pZHMucHVzaChvcHRpb25JZCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIHJlc2V0U2lkZUZpbHRlcihjb2w6IGFueSkge1xuICAgIGNvbnN0IHJlc2V0Q29sdW1uUmVjdXJzaXZlbHkgPSAoY29sdW1uczogYW55W10pOiBib29sZWFuID0+IHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZCA9PT0gY29sLmZpZWxkKSB7XG4gICAgICAgICAgY29sdW1uLnF1ZXJ5ID0ge1xuICAgICAgICAgICAgX2lkczogW10sXG4gICAgICAgICAgICBmaXJzdF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIGZpcnN0X3ZhbHVlOiBudWxsLFxuICAgICAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgICAgICBzZWNvbmRfY29uZGl0aW9uOiAnY29udGFpbicsXG4gICAgICAgICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbj8uY2hpbGRyZW4pICYmIGNvbHVtbj8uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGlmIChyZXNldENvbHVtblJlY3Vyc2l2ZWx5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmVzZXRDb2x1bW5SZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maWx0ZXJzQ29uZmlnLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUZpbHRlckNlbGwgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNsZWFuRmlsdGVyZENvbHVtbnMoKSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG5cbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jbGVhbkZpbHRlcmRDb2x1bW5zKClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICBjbGVhckFsbEZpbHRlcnMoc2hvdWxkVXBkYXRlQ29uZmlnTGlzdGluZyA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcbiAgICBjb25zdCByZXNldEFsbFJlY3Vyc2l2ZWx5ID0gKGNvbHVtbnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgICAgIGlmIChjb2x1bW4ucXVlcnkpIHtcbiAgICAgICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgICAgICBfaWRzOiBbXSxcbiAgICAgICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICAgICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgICAgICAgIHNlY29uZF9jb25kaXRpb246ICdjb250YWluJyxcbiAgICAgICAgICAgIHNlY29uZF92YWx1ZTogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uPy5jaGlsZHJlbikgJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIHJlc2V0QWxsUmVjdXJzaXZlbHkoY29sdW1uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgcmVzZXRBbGxSZWN1cnNpdmVseSh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXJzQ29uZmlnID0gW107XG4gICAgdGhpcy5yZWZyZXNoUHJldmlld0NvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIC8vIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZmFsc2U7XG4gICAgLy8gdGhpcy5mb250RmFpbWx5ID0gJ0ludGVyJztcbiAgICAvLyB0aGlzLmhlYWRlclRleHRGb250c1NpemUgPSAxNDtcbiAgICAvLyB0aGlzLnNlbGVjdGVkVGFibGVMYXlvdXQgPSAnbWVkaXVtZCc7XG4gICAgLy8gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSA9IDE0O1xuICAgIC8vIHRoaXMuZ2xvYmFsU2VhcmNoVGV4dCA9ICcnO1xuICAgIGNvbnN0IGV2ZW50ID0geyBldmVudFR5cGU6ICdyZXNldCcsIGRhdGE6IHsgdGFibGVUeXBlOiB0aGlzLnRhYmxlVHlwZSB9IH07XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogW10sXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudCk7XG4gICAgICAgaWYoIXNob3VsZFVwZGF0ZUNvbmZpZ0xpc3Rpbmcpe1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9LCAzMDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXBwbHlTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgYXBwbHlpbmcgc2lkZSBmaWx0ZXJcbiAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgIHNlYXJjaDogY29sdW1uLnNlYXJjaCxcbiAgICAgIHF1ZXJ5OiBjb2x1bW4ucXVlcnksXG4gICAgICB0eXBlOiBjb2x1bW4udHlwZSxcbiAgICAgIF9pZHM6IGNvbHVtbi5faWRzIHx8IFtdXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLmZpbHRlcnNDb25maWcuZmluZEluZGV4KGYgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcblxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCBuZXcgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiBOdW1iZXIodGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0KSxcbiAgICAgIHR5cGU6IHRoaXMudGFibGVUeXBlLFxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVVcGRhdGVDb25maWdMaXN0aW5nLmVtaXQodGhpcy5jcmVhdGVVcGRhdGVDb2x1bW5Db25maWcpO1xuXG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuICByZW1vdmVTaWRlRmlsdGVyKGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4ucXVlcnkuZmlyc3RfdmFsdWUgJiYgIWNvbHVtbj8ucXVlcnk/Ll9pZHMubGVuZ3RoKSByZXR1cm47XG4gICAgLy8gQ2xvc2UgZXhwYW5kZWQgcm93cyBiZWZvcmUgcmVtb3ZpbmcgZmlsdGVyXG4gICAgdGhpcy5jbG9zZUFsbEV4cGFuZGVkUm93cygpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5maWx0ZXJzQ29uZmlnLnNwbGljZShleGlzdGluZ0luZGV4LCAxKTtcbiAgICB9XG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKS5tYXAoKHsgcXVlcnksIC4uLnJlc3QgfSkgPT4ge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgdGhpcy5jb21tb25TZXZpY2UubWFpbkNvbnRhaW5lckxlZnQgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgY29sbGFwc2VBbGxFeHBhbmRlZENlbGxzKCkge1xuICAgIGlmICh0aGlzLmV4cGFuZGVkQ2VsbHM/LnNpemUgPiAwKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2VsbHMuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgdHJhY2tCeUZpZWxkKGluZGV4OiBudW1iZXIsIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29sPy5maWVsZDtcbiAgfVxuXG4gIGdldCBhY3RpdmVGaWx0ZXJlZENvbHVtbnMoKTogYW55W10ge1xuICAgIGNvbnN0IGNvbGxlY3RGaWx0ZXJlZCA9IChjb2x1bW5zOiBhbnlbXSk6IGFueVtdID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgIGNvbHVtbnM/LmZvckVhY2goY29sID0+IHtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbiAmJiBjb2wuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChjb2xsZWN0RmlsdGVyZWQoY29sLmNoaWxkcmVuKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0luRmlsdGVyc0NvbmZpZyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5zb21lKGYgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICAgICAgaWYgKGlzSW5GaWx0ZXJzQ29uZmlnKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goY29sKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIHJldHVybiBjb2xsZWN0RmlsdGVyZWQodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG5cblxuXG4gIHRvZ2dsZU9wZW5GaWx0ZXIoKSB7XG4gICAgdGhpcy5zaG93RmlsdGVycyA9ICF0aGlzLnNob3dGaWx0ZXJzO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cblxuXG4gIC8vIENlbGwgRWRpdGluZyBXb3JrIHN0YXJ0IGhlcmVcblxuICBlZGl0aW5nS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgYWN0aXZlQ2VsbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgc2V0QWN0aXZlQ2VsbChyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSAoKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIGNvbHVtbi5maWVsZCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaXNBY3RpdmVDZWxsKHJvdzogYW55LCBjb2w6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUNlbGwgPT09ICgocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3RleHRBcmVhZElucHV0JykgdGV4dEFyZWFkSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+O1xuICBtZW51UmVhZHkgPSBmYWxzZTtcbiAgZW5hYmxlRWRpdChyb3c6IGFueSwgY29sdW1uOiBhbnksIGNsaWNrZWRGcm9tRGV0YWlsc0JveCA9IGZhbHNlLCBjZWxsQ29udGFpbmVyPzogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmVkaXRpbkRyb3Bkb3duU2VhcmNoID0gJyc7XG4gICAgaWYgKHJvdz8uX192aXJ0dWFsSW5kZXggPT0gMCkgcmV0dXJuO1xuICAgIGlmICghY29sdW1uPy5pc19lZGl0YWJsZSkgcmV0dXJuO1xuICAgIHRoaXMubWVudVJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0aW5nS2V5ID0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2x1bW4uZmllbGQpO1xuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZWxsLWVkaXRpbmctZHJvcGRvd24tbWVudScpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoZHJvcGRvd25NZW51KSB7XG4gICAgICAgICAgY29uc3QgcmVjdCA9IGRyb3Bkb3duTWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldEhlaWdodDtcblxuICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgICAgICAgZHJvcGRvd25NZW51LnN0eWxlLnRvcCA9IGAtJHtyZWN0LmhlaWdodH1weGA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWVudS5zdHlsZS50b3AgPSAnMTAwJSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVudVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFjbGlja2VkRnJvbURldGFpbHNCb3ggJiYgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbi5maWVsZCk/Lmxlbmd0aCA+IDUwKSB7XG4gICAgICB0aGlzLnRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KHJvdywgY29sdW1uLCB0aGlzLmNvbHVtbnMsIGZhbHNlKVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCFjZWxsQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmlsZUlucHV0ID0gY2VsbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICdpbnB1dFt0eXBlPVwiZmlsZVwiXSdcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICAgICAgICAvLyDinIUgSWYgZmlsZSBpbnB1dCBleGlzdHMg4oaSIG9wZW4gZmlsZSBkaWFsb2cgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKGZpbGVJbnB1dCkge1xuICAgICAgICAgIGZpbGVJbnB1dC5jbGljaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOKchSBPdGhlcndpc2UsIG5vcm1hbCBmb2N1cyBiZWhhdmlvclxuICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBjZWxsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJ2lucHV0Om5vdChbdHlwZT1cImZpbGVcIl0pLCB0ZXh0YXJlYSwgc2VsZWN0LCBbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICAgICAgKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICAgICAgaWYgKGZvY3VzYWJsZSkge1xuICAgICAgICAgIGZvY3VzYWJsZS5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICBmb2N1c2FibGUuZm9jdXMoKTtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvY3VzYWJsZSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgfHxcbiAgICAgICAgICAgIGZvY3VzYWJsZSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZS5zZWxlY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gaXNWYWx1ZVZhbGlkKHJvdzogYW55LCBjb2x1bW46IGFueSwgY29udHJvbDogYW55KXtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uc1NlcnZpY2UuaXNWYWx1ZVZhbGlkKHJvdywgY29sdW1uLCBjb250cm9sPy5jb250cm9sPy52YWx1ZSlcbiAgfVxuXG4gIGRpc2FibGVFZGl0KHJvdzogYW55LCBjb2x1bW46IGFueSwgY29udHJvbD86IGFueSkge1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgaWYgKCF0aGlzLmVkaXRpbmdLZXkpIHJldHVyblxuICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wucHJpc3RpbmUpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0tleSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbD8uY29udHJvbD8udmFsdWU7XG4gICAgY29uc3QgdmlzaWJsZVJvdyA9IHRoaXMudmlzaWJsZVJvd3MuZmluZChyID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKSk7XG4gICAgaWYgKHZpc2libGVSb3cpIHtcbiAgICAgIHRoaXMuc2V0TmVzdGVkRmxhdFZhbHVlKHZpc2libGVSb3csIGNvbHVtbj8uZmllbGQsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChyb3csIGNvbHVtbiwgdmFsdWUpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdGhpcy5yb2xsQmFja0NlbGxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKHJvdywgY29sdW1uLCByb3dbY29sdW1uLmZpZWxkXSlcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbj8uZmllbGQpO1xuICAgIGlmICghY3VycmVudCB8fCAoY29sdW1uLnR5cGUgPT0gJ2VtYWlsJyAmJiAhdGhpcy52YWxpZGF0ZUVtYWlsKGN1cnJlbnQpKSkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsRGF0YVNldC5maW5kKGl0ZW0gPT4gKChpdGVtLmlkICYmIGl0ZW0uaWQgPT0gcm93LmlkKSB8fCAoaXRlbS5pZCAmJiBpdGVtLmlkID09IHJvdy5faWQpKSk7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUob3JpZ2luYWxSb3csIGNvbHVtbj8uZmllbGQpO1xuICAgICAgdGhpcy5zZXROZXN0ZWRWYWx1ZShyb3csIGNvbHVtbiwgb3JpZ2luYWwpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uSW1hZ2VDaGFuZ2UoZXZlbnQ6IEV2ZW50LCByb3c6IGFueSwgY29sOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmICghaW5wdXQuZmlsZXMgfHwgIWlucHV0LmZpbGVzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzWzBdO1xuXG4gICAgLy8gT3B0aW9uYWwgdmFsaWRhdGlvblxuICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXZpZXcgKGJhc2U2NClcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNldE5lc3RlZEZsYXRWYWx1ZShyb3csIGNvbC5maWVsZCwgcmVhZGVyLnJlc3VsdCk7XG4gICAgICB0aGlzLmNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3csIGNvbCwgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpO1xuICAgIH07XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gIH1cblxuICBzZXROZXN0ZWRGbGF0VmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm47XG5cbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpITtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGlmICghYWNjW2tleV0pIGFjY1trZXldID0ge307XG4gICAgICByZXR1cm4gYWNjW2tleV07XG4gICAgfSwgb2JqKTtcblxuICAgIHBhcmVudFtsYXN0S2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgZW1haWxSZWdleCA9IC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLztcbiAgdmFsaWRhdGVFbWFpbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW1haWxSZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuICBhbGxvd09ubHlOdW1iZXJzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCA/IGV2ZW50LndoaWNoIDogZXZlbnQua2V5Q29kZTtcbiAgICBpZiAoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrUm93RWRpdEFuZEVtaXRWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlPzogYW55KSB7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsRGF0YVNldD8uZmluZChcbiAgICAgIChyOiBhbnkpID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKVxuICAgICk7XG4gICAgaWYgKCFvcmlnaW5hbFJvdykgcmV0dXJuO1xuICAgIC8vIGNvbnN0IGNsZWFuID0gKG9iajogYW55KSA9PiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgIC8vIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2x1bW4uZmllbGQpO1xuICAgIC8vIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4uZmllbGQpO1xuICAgIGNvbnN0IG9yaWdpblZhbHVlID0gdGhpcy5kYXRhU2V0Py5maW5kKChyOiBhbnkpID0+IChyLmlkICYmIHIuaWQgPT09IHJvdy5pZCkgfHwgKHIuX2lkICYmIHIuX2lkID09PSByb3cuX2lkKSk7XG4gICAgY29uc3QgY2hhbmdlZFZhbHVlID0gb3JpZ2luVmFsdWUudmVyaWZpZWQgPT0gdmFsdWU7XG4gICAgLy8gaWYgKGNoYW5nZWRWYWx1ZSkgcmV0dXJuO1xuICAgIC8vIGNvbnN0IGhhc0NoYW5nZWQgPSB0aGlzLmNvbW1vblNldmljZS5oYXNGaWVsZENoYW5nZWQoY3VycmVudFZhbHVlLCBvcmlnaW5hbFZhbHVlLCBjb2x1bW4udHlwZSk7XG4gICAgLy8gaWYgKCFoYXNDaGFuZ2VkKSByZXR1cm47XG4gICAgLy8gdGhpcy5zZXROZXN0ZWRWYWx1ZShvcmlnaW5hbFJvdywgY29sdW1uLCB2YWx1ZSk7XG5cbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YTogeyAuLi5vcmlnaW5WYWx1ZSB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25DZWxsRWRpdCcsXG4gICAgICB2YWx1ZTogY29sdW1uLnR5cGUgIT09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICB2YWx1ZXM6IGNvbHVtbi50eXBlID09ICdhcnJheScgPyB2YWx1ZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoc2VuZE9iailcbiAgICAvLyB9LCAxMDApO1xuICB9XG5cblxuICBpc0VkaXRpbmcocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ0tleSA9PT0gKChyb3cuaWQgfHwgcm93Ll9pZCkgKyAnLScgKyBjb2wuZmllbGQpO1xuICB9XG5cbiAgc2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIGNvbHVtbjogYW55LCBvcHRpb246IGFueSwgY2FsbGVkRnJvbUlucHV0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgY29uc3QgaXNWYWxpZCA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmlzVmFsdWVWYWxpZChvYmosIGNvbHVtbiwgb3B0aW9uKTtcbiAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFZhbGlkYXRpb24gRXJyb3Igb24gZmllbGQgJHtjb2x1bW59YClcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IGNvbHVtbi5maWVsZDtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgb2JqKTtcblxuICAgIGlmIChwYXJlbnQgJiYgbGFzdEtleSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uKSkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBwYXJlbnRbbGFzdEtleV0gPSBvcHRpb24ubWFwKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZCA9IHR5cGVvZiBzZWxlY3RlZEl0ZW0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHNlbGVjdGVkSXRlbS5pZCA/PyBzZWxlY3RlZEl0ZW0uX2lkID8/IHNlbGVjdGVkSXRlbS52YWx1ZSA/PyBzZWxlY3RlZEl0ZW0ubmFtZSA/PyBzZWxlY3RlZEl0ZW1cbiAgICAgICAgICAgIDogc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+XG4gICAgICAgICAgICAob3B0Ll9pZCAmJiBvcHQuX2lkID09PSBzZWxlY3RlZElkKSB8fCAob3B0LmlkICYmIG9wdC5pZCA9PT0gc2VsZWN0ZWRJZClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIG1hdGNoID8geyAuLi5tYXRjaCB9IDogeyBpZDogc2VsZWN0ZWRJZCwgdmFsdWU6IHNlbGVjdGVkSWQgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIG9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBsb29rdXAgPSBjb2x1bW4uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZElkID0gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQgPz8gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/IG9wdGlvbjtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBsb29rdXAuZmluZCgob3B0OiBhbnkpID0+IChvcHQuX2lkICYmIG9wdC5faWQgPT09IHNlbGVjdGVkSWQpIHx8IChvcHQuaWQgJiYgb3B0LmlkID09PSBzZWxlY3RlZElkKSk7XG5cbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0gbWF0Y2ggPyB7IC4uLm1hdGNoIH0gOiB7IGlkOiBzZWxlY3RlZElkLCB2YWx1ZTogc2VsZWN0ZWRJZCB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50W2xhc3RLZXldID0geyBpZDogb3B0aW9uLCB2YWx1ZTogb3B0aW9uIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JpZ2luYWxEYXRhU2V0ICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcmlnaW5hbERhdGFTZXQpKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJvd0luZGV4ID0gdGhpcy5vcmlnaW5hbERhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKG9yaWdpbmFsUm93SW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUGFyZW50ID0ga2V5cy5yZWR1Y2UoKGFjYzogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlcikgPT4gYWNjW2tleV0gPz89IHt9LCB0aGlzLm9yaWdpbmFsRGF0YVNldFtvcmlnaW5hbFJvd0luZGV4XSk7XG4gICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgb3JpZ2luYWxQYXJlbnRbbGFzdEtleV0gPSBwYXJlbnRbbGFzdEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gM++4j+KDoyBVcGRhdGUgY3VycmVudCBkYXRhc2V0XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGlmICh0aGlzLmRhdGFTZXQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTZXQpKSB7XG4gICAgICBjb25zdCBkYXRhc2V0Um93SW5kZXggPSB0aGlzLmRhdGFTZXQuZmluZEluZGV4KHIgPT5cbiAgICAgICAgci5pZCA9PT0gb2JqLmlkIHx8IHIuX2lkID09PSBvYmouX2lkXG4gICAgICApO1xuICAgICAgaWYgKGRhdGFzZXRSb3dJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgZGF0YXNldFBhcmVudCA9IGtleXMucmVkdWNlKChhY2M6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIpID0+IGFjY1trZXldID8/PSB7fSwgdGhpcy5kYXRhU2V0W2RhdGFzZXRSb3dJbmRleF0pO1xuICAgICAgICBpZiAoZGF0YXNldFBhcmVudCAmJiBsYXN0S2V5KSB7XG4gICAgICAgICAgZGF0YXNldFBhcmVudFtsYXN0S2V5XSA9IHBhcmVudFtsYXN0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjYWxsZWRGcm9tSW5wdXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSb3dFZGl0QW5kRW1pdFZhbHVlKG9iaiwgY29sdW1uLCBvcHRpb24pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHJvbGxCYWNrQ2VsbFZhbHVlKHJvdzogYW55LCBjb2x1bW46IGFueSk6IHZvaWQge1xuICAgIGlmICghcm93IHx8ICFjb2x1bW4pIHJldHVybjtcbiAgICBjb25zdCBvcmlnaW5hbFJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLm9yaWdpbmFsRGF0YVNldCwgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmICghb3JpZ2luYWxSb3cpIHJldHVybjtcblxuICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKG9yaWdpbmFsUm93LCBjb2x1bW4uZmllbGQpO1xuXG4gICAgY29uc3QgdmlzaWJsZVJvdyA9IHRoaXMudmFsaWRhdGlvbnNTZXJ2aWNlLmZpbmRPcmlnaW5hbFJvdyh0aGlzLnZpc2libGVSb3dzLCByb3cuaWQgPz8gcm93Ll9pZCk7XG4gICAgaWYgKHZpc2libGVSb3cpIHZpc2libGVSb3dbY29sdW1uLmZpZWxkXSA9IG9yaWdpbmFsVmFsdWU7XG5cbiAgICBjb25zdCBkYXRhUm93ID0gdGhpcy52YWxpZGF0aW9uc1NlcnZpY2UuZmluZE9yaWdpbmFsUm93KHRoaXMuZGF0YVNldCwgcm93LmlkID8/IHJvdy5faWQpO1xuICAgIGlmIChkYXRhUm93KSBkYXRhUm93W2NvbHVtbi5maWVsZF0gPSBvcmlnaW5hbFZhbHVlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG5cbiAgYXJyYXlUZW1wTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuXG4gIHByaXZhdGUgYXJyYXlLZXkocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7cm93LmlkIHx8IHJvdy5faWR9XyR7Y29sLmZpZWxkfWA7XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbklkKG9wdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLmlkID8/IG9wdGlvbi5faWQ7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb247XG4gIH1cblxuICBnZXRBcnJheU9wdGlvbkxhYmVsKG9wdGlvbjogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gb3B0aW9uLnZhbHVlID8/IG9wdGlvbi5uYW1lID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKG9wdGlvbik7XG4gIH1cblxuICBnZXRBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuYXJyYXlLZXkocm93LCBjb2wpO1xuXG4gICAgaWYgKCF0aGlzLmFycmF5VGVtcE1hcC5oYXMoa2V5KSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gQXJyYXkuaXNBcnJheShjdXJyZW50KVxuICAgICAgICA/IGN1cnJlbnQubWFwKHYgPT4gdGhpcy5nZXRBcnJheU9wdGlvbklkKHYpKVxuICAgICAgICA6IFtdO1xuXG4gICAgICB0aGlzLmFycmF5VGVtcE1hcC5zZXQoa2V5LCBub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcnJheVRlbXBNYXAuZ2V0KGtleSkhO1xuICB9XG5cblxuICBpc0FycmF5U2VsZWN0ZWQocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKS5pbmNsdWRlcyhpZCk7XG4gIH1cblxuICB0b2dnbGVBcnJheVRlbXAocm93OiBhbnksIGNvbDogYW55LCBvcHRpb246IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdGlvbik7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZ2V0QXJyYXlUZW1wKHJvdywgY29sKTtcblxuICAgIHRoaXMuYXJyYXlUZW1wTWFwLnNldChcbiAgICAgIHRoaXMuYXJyYXlLZXkocm93LCBjb2wpLFxuICAgICAgbGlzdC5pbmNsdWRlcyhpZCkgPyBsaXN0LmZpbHRlcih2ID0+IHYgIT09IGlkKSA6IFsuLi5saXN0LCBpZF1cbiAgICApO1xuICB9XG5cbiAgY29tbWl0QXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuICAgIHRoaXMuc2V0TmVzdGVkVmFsdWUocm93LCBjb2wsIGlkcywgdHJ1ZSk7XG4gIH1cblxuXG4gIG9uQXJyYXlCbHVyKHJvdzogYW55LCBjb2w6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29tbWl0QXJyYXkocm93LCBjb2wpO1xuICB9XG5cblxuICBjbGVhbnVwQXJyYXkocm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hcnJheVRlbXBNYXAuZGVsZXRlKHRoaXMuYXJyYXlLZXkocm93LCBjb2wpKTtcbiAgICB0aGlzLmVkaXRpbmdLZXkgPSBudWxsO1xuICB9XG5cblxuICBkaXNwbGF5QXJyYXlWYWx1ZXMoaWRzOiBhbnlbXSwgY29sPzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbCkgcmV0dXJuIGlkcy5qb2luKCcsICcpO1xuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIGFueT4oKTtcbiAgICAoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8fCBbXSkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcbiAgICAgIG1hcC5zZXQodGhpcy5nZXRBcnJheU9wdGlvbklkKG9wdCksIG9wdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzXG4gICAgICAubWFwKGlkID0+IG1hcC5nZXQoaWQpPy52YWx1ZSA/PyBtYXAuZ2V0KGlkKT8ubmFtZSA/PyBpZClcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgZGlzcGxheUFycmF5TGFiZWxzKHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgaWRzID0gdGhpcy5nZXRBcnJheVRlbXAocm93LCBjb2wpO1xuXG4gICAgaWYgKCFpZHMubGVuZ3RoKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgIChjb2wuY29sdW1uX2Ryb3Bkb3duX3ZhbHVlIHx8IFtdKS5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xuICAgICAgbWFwLnNldCh0aGlzLmdldEFycmF5T3B0aW9uSWQob3B0KSwgb3B0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpZHNcbiAgICAgIC5tYXAoaWQgPT4gbWFwLmdldChpZCk/LnZhbHVlID8/IG1hcC5nZXQoaWQpPy5uYW1lID8/IGlkKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuXG5cblxuXG4gIGdvVG9QYWdlKHBhZ2U6IGFueSkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWc/LnBhZ2UgPT0gcGFnZSkgcmV0dXJuO1xuICAgIGlmIChwYWdlIDwgMSB8fCBwYWdlID4gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSA9IHBhZ2U7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdwYWdlQ2hhbmdlJyxcbiAgICB9O1xuICAgIHRoaXMuY29tbW9uU2V2aWNlLm1haW5Db250YWluZXJMZWZ0ID0gdGhpcy5jZW50ZXJTY3JvbGxhYmxlQm9keS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPSAxO1xuICAgIGNvbnN0IHNlbmREYXRhID0ge1xuICAgICAgY29sdW1uczogdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29tbW9uU2V2aWNlLmdldEZpbHRlcnNGcm9tQ29sdW1ucyh0aGlzLmNvbHVtbnMsIHRoaXMuZmlsdGVyc0NvbmZpZykubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgb2JqOiB7XG4gICAgICAgICAgbGltaXQ6IHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCxcbiAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZSxcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRUeXBlOiAncGFnZUNoYW5nZScsXG4gICAgICB9O1xuICAgICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICB9LCA3MDApO1xuICB9XG5cbiAgYWN0aW9uUHJlc2V0KGRhdGE6IGFueSwgdHlwZTogYW55KSB7XG4gICAgZGF0YS5jb2x1bW5zID0gZGF0YT8uY29sdW1ucz8ubWFwKCh7IF9pZCwgZmlsdGVyVmFsdWUsIHNlYXJjaCwgY29sdW1uX2Ryb3Bkb3duX3ZhbHVlLCBxdWVyeSwgX190eXBlbmFtZSwgLi4ucmVzdCB9OiBhbnkpID0+IHJlc3QpO1xuICAgIHRoaXMudGFibGVWaWV3Py5mb3JFYWNoKChlbGUpID0+IHsgZWxlLmlzX3RlbXAgPSBmYWxzZSB9KTtcblxuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YT8uZmlsdGVycz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgZGVsZXRlIGVsZW1lbnQuX190eXBlbmFtZTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgfVxuICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgIGRlbGV0ZSBkYXRhPy5pc190ZW1wO1xuICAgIGRlbGV0ZSBkYXRhPy5jb25maWcuX190eXBlbmFtZTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiB0eXBlXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBjdXJyZW50SWRGb3JVcGRhdGVQcmVzZXQgPSAnJztcbiAgY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlOiBhbnk7XG4gIHRlbXBfc3RhdGUgPSB7XG4gICAgaWQ6ICcnLFxuICAgIGlzX3RlbXA6IGZhbHNlXG4gIH1cbiAgYXN5bmMgc2VsZWN0RmlsdGVyKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGVtcF9zdGF0ZSA9IHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgaXNfdGVtcDogdHJ1ZVxuICAgIH1cbiAgICB0aGlzLnRhYmxlVmlldz8uZm9yRWFjaCgoZWxlKSA9PiB7IGVsZS5pc190ZW1wID0gZmFsc2UgfSk7XG4gICAgdGhpcy50YWJsZVZpZXcgPSB0aGlzLnRhYmxlVmlldy5tYXAoaXRlbSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGlzX3RlbXA6IGl0ZW0uaWQgPT0gZGF0YT8uaWRcbiAgICB9KSk7XG4gICAgdGhpcy5jb2x1bW5zID0gZGF0YS5jb2x1bW5zO1xuICAgIHtcbiAgICAgIHRoaXMuYm9keVRleHRGb250c1NpemUgPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgICAgdGhpcy5mb250RmFpbWx5ID0gZGF0YS5jb25maWcuZm9udEZhaW1seSxcbiAgICAgICAgZGF0YS5maWx0ZXJzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50Ll9fdHlwZW5hbWU7XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5xdWVyeSkge1xuICAgICAgICAgICAgZGVsZXRlIGVsZW1lbnQucXVlcnkuX190eXBlbmFtZTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW1lbnQucXVlcnkgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQucXVlcnkgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoZWxlbWVudC5xdWVyeSkubGVuZ3RoID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5xdWVyeSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5nbG9iYWxTZWFyY2ggPSBkYXRhLmNvbmZpZy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgIHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9IGRhdGEuY29uZmlnLmhlYWRlclRleHRGb250c1NpemUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dCA9IGRhdGEuY29uZmlnLnNlbGVjdGVkVGFibGVMYXlvdXQsXG4gICAgICAgIHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyID0gZGF0YS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgICB0aGlzLmN1cnJlbnRJZEZvclVwZGF0ZVByZXNldCA9IGRhdGEuaWQ7XG4gICAgICB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZSA9IHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbiAgICAgIHRoaXMucHJlc2V0TmFtZSA9IGRhdGE/Lm5hbWU7XG4gICAgICB0aGlzLnByZXNldEZpbHRlciA9IGRhdGE/LmFjdGl2ZUZpbHRlcnMgfHwgZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcgPSBkYXRhLmZpbHRlcnM7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5RmlsdGVyb3B0aW9uTGlzdCgpO1xuICAgICAgdGhpcy5yZWZyZXNoSGVhZGVycygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgZGF0YS5jb2x1bW5zID0gdGhpcy5jbGVhbkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgIGRlbGV0ZSBkYXRhPy5fX3R5cGVuYW1lO1xuICAgICAgZGVsZXRlIGRhdGE/LmlzX3RlbXA7XG4gICAgICBkZWxldGUgZGF0YT8uY29uZmlnLl9fdHlwZW5hbWU7XG4gICAgfVxuICAgIGlmIChkYXRhPy5pc19kZWFmdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3Rpb25QcmVzZXQoZGF0YSwgJ3NldFByZXNldCcpXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGRhdGFcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6ICdzZWxlY3QnXG4gICAgfVxuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBzYXZlUHJlc2V0KGNvbnRyb2w/OiBhbnkpIHtcbiAgICBpZiAoY29udHJvbD8uaW52YWxpZCkge1xuICAgICAgY29udHJvbD8uY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBuYW1lcyA9IHRoaXMuZ2V0RmlsdGVySGVhZGVycyh0aGlzLmZpbHRlcnNDb25maWcsIHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy5wcmVzZXRGaWx0ZXIgPSB0aGlzLnRhYmxlRmlsdGVyVmlld0lkID8gdHJ1ZSA6IHRoaXMucHJlc2V0RmlsdGVyO1xuICAgIGxldCBzZWxlY3RlZERhdGE6IGFueSA9IHRoaXMudGFibGVWaWV3LmZpbmQoKGVsZSkgPT4gZWxlLmlkID09IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQpO1xuICAgIGxldCBjb25maWcgPSB7XG4gICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBib2R5VGV4dEZvbnRzU2l6ZTogKyh0aGlzLmJvZHlUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIGhlYWRlclRleHRGb250c1NpemU6ICsodGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplIHx8IDE0KSxcbiAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB1bmRlZmluZWQsXG4gICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoLFxuICAgICAgZmlsdGVyTmFtZXM6IG5hbWVzLFxuICAgICAgdG90YWxDb3VudDogdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyxcbiAgICAgIHJvd1NoYWRpbmdFbmFibGVkOiB0aGlzLnJvd1NoYWRpbmdFbmFibGVkXG5cbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogdGhpcy50YWJsZUZpbHRlclZpZXdJZCA/IHNlbGVjdGVkRGF0YT8ubmFtZSA6IHRoaXMucHJlc2V0TmFtZSxcbiAgICAgICAgYWN0aXZlRmlsdGVyczogdGhpcy5wcmVzZXRGaWx0ZXIsXG4gICAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMucHJlc2V0RmlsdGVyXG4gICAgICAgICAgPyB0aGlzLmZpbHRlcnNDb25maWc/Lm1hcCgoeyBfX3R5cGVuYW1lLCBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IF9fdHlwZW5hbWU6IF9faW5uZXIsIC4uLmNsZWFuUXVlcnkgfSA9IHF1ZXJ5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgcXVlcnk6IGNsZWFuUXVlcnkgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogW10sXG4gICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICBpZDogdGhpcy50YWJsZUZpbHRlclZpZXdJZCB8fCB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZT8uaWQsXG4gICAgICAgIGxvYWRpbmdDYWxsOiBjb250cm9sID09ICdtb3VzZVVwJyA/IGZhbHNlIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGVcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHRoaXMudGFibGVGaWx0ZXJWaWV3SWQgfHwgIXRoaXMuaXNUYWJsZVByZXNldE5vdENoYW5nZWQgPyAndXBkYXRlUHJlc2V0JyA6ICdjcmVhdGVQcmVzZXQnXG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zLFxuICAgICAgbm9fb2ZfcmVjb3JkczogTnVtYmVyKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCksXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpXG4gICAgfSwgNTAwKTtcbiAgfVxuXG5cbiAgZ2V0RmlsdGVySGVhZGVycyhmaWx0ZXJzOiBhbnlbXSwgY29sdW1uczogYW55W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZWRIZWFkZXJzID0gZmlsdGVyc1xuICAgICAgLm1hcChmID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZi5maWVsZCk7XG4gICAgICAgIHJldHVybiBjb2x1bW4gPyBjb2x1bW4uaGVhZGVyIDogbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGhlYWRlciA9PiAhIWhlYWRlcik7XG5cbiAgICByZXR1cm4gbWF0Y2hlZEhlYWRlcnMuam9pbignLCAnKTtcbiAgfVxuXG5cbiAgdG9nZ2xlUm93U2hhZGluZygpIHtcbiAgICB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkID8gJyNmMWYxZjEnIDogdW5kZWZpbmVkO1xuICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gIH1cblxuICB0cmFja0J5VGFibGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIGFjdGl2ZVJvdzogYW55XG4gIGFjdGl2ZVJvd0NvbDogYW55O1xuXG4gIC8vIFRyYWNrIGV4cGFuZGVkIGNlbGxzIGFzIGEgU2V0IG9mIHVuaXF1ZSByb3crY29sIGlkZW50aWZpZXJzXG5cbiAgZ2V0Q2VsbEtleShyb3c6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmdldFJvd0lkKHJvdyl9XyR7Y29sPy5maWVsZH1gO1xuICB9XG5cbiAgZXhwYW5kZWRDZWxscyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHByaXZhdGUgekNvdW50ZXIgPSAyMTtcblxuICBzaG93RGV0YWlsc0JveCA9IGZhbHNlO1xuXG4gIHRvZ2dsZUV4cGFuZE9mTG9uZ0NlbGxUZXh0KFxuICAgIHJvdzogYW55LFxuICAgIGNvbDogYW55LFxuICAgIGNvbHVtbnM6IGFueVtdLFxuICAgIGV4cGFuZFdob2xlUm93ID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgZXhwYW5kQ2VsbHMgPSAodGFyZ2V0Um93OiBhbnkpID0+IHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGFyZ2V0Um93W2MuZmllbGRdO1xuXG4gICAgICAgIGlmICgodHlwZW9mIHRleHQgPT09ICdzdHJpbmcnICYmIHRleHQubGVuZ3RoID4gNTApIHx8IChBcnJheS5pc0FycmF5KHRleHQpICYmIHRleHQ/Lmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRSb3dJZCh0YXJnZXRSb3cpICsgJy0nICsgYy5maWVsZDtcbiAgICAgICAgICB0aGlzLnpDb3VudGVyKys7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCBjb2xsZWN0S2V5c0ZvclJvdyA9ICh0YXJnZXRSb3c6IGFueSkgPT4ge1xuICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKGMudHlwZSA9PT0gJ2ltYWdlJykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHRleHQgPSB0YXJnZXRSb3dbYy5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycgJiYgdGV4dC5sZW5ndGggPiA1MCB8fCAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Py5sZW5ndGggPiAxKSkge1xuICAgICAgICAgIGtleXMucHVzaCh0aGlzLmdldFJvd0lkKHRhcmdldFJvdykgKyAnLScgKyBjLmZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4ga2V5cztcbiAgICB9O1xuXG4gICAgaWYgKGV4cGFuZFdob2xlUm93KSB7XG4gICAgICBsZXQgcm93S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmdldE5lc3RlZFZhbHVlKHJvdywgY29sPy5maWVsZCk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZXh0KSAmJiB0ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgcm93S2V5cyA9IGNvbGxlY3RLZXlzRm9yUm93KHJvdyk7XG4gICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICByb3dLZXlzLnB1c2goLi4uY29sbGVjdEtleXNGb3JSb3coY2hpbGQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dLZXlzID0gY29sbGVjdEtleXNGb3JSb3cocm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsbEV4cGFuZGVkID0gcm93S2V5cy5ldmVyeShrID0+IHRoaXMuZXhwYW5kZWRDZWxscy5oYXMoaykpO1xuICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICBpZiAoIWFsbEV4cGFuZGVkKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvdy5jaGlsZHJlbikgJiYgcm93LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBleHBhbmRDZWxscyhyb3cpO1xuICAgICAgICAgIHJvdz8uY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IGV4cGFuZENlbGxzKGNoaWxkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXhwYW5kQ2VsbHMocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmdldFJvd0lkKHJvdykgKyAnLScgKyBjb2wuZmllbGQ7XG4gICAgICBpZiAoY29sLnR5cGUgPT09ICdpbWFnZScpIHJldHVybjtcblxuICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkQ2VsbHMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuekNvdW50ZXIrKztcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLnNldChrZXksIHRoaXMuekNvdW50ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZENlbGxzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2hvd0RldGFpbHNCb3ggPSBmYWxzZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNPcGVuVG9Ub3Aocm93KVxuICAgIH0sIDApO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGlzT3BlblRvVG9wKHJvdzogYW55KSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhLWdyaWQtYm9keScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoIXdyYXBwZXIpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gKHJvdy5pZCB8fCByb3cuX2lkKSArICctJyArIChjb2wuaWQgfHwgY29sLl9pZCk7XG4gICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoIWJveCkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgYm94UmVjdCA9IGJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHdyYXBwZXJSZWN0ID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdCb3R0b20gPSBib3hSZWN0LmJvdHRvbSA+IHdyYXBwZXJSZWN0LmJvdHRvbTtcbiAgICAgIGNvbnN0IGlzT3ZlcmZsb3dpbmdUb3AgPSBib3hSZWN0LnRvcCA8IHdyYXBwZXJSZWN0LnRvcDtcbiAgICAgIGlmIChpc092ZXJmbG93aW5nQm90dG9tICYmICFpc092ZXJmbG93aW5nVG9wKSB7XG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IGJveC5vZmZzZXRIZWlnaHQgfHwgMDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm94SGVpZ2h0ICsgNDtcbiAgICAgICAgYm94LnN0eWxlLnRvcCA9IGAkey1vZmZzZXR9cHhgO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib3guc3R5bGUuYm90dG9tID0gYGF1dG9gO1xuICAgICAgICBib3guc3R5bGUudG9wID0gYDEwMCVgO1xuICAgICAgICBib3guc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoMClgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pXG4gICAgdGhpcy5zaG93RGV0YWlsc0JveCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuXG5cblxuXG4gIGlzRXhwYW5kZWQocm93OiBhbnksIGNvbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDZWxscy5oYXModGhpcy5nZXRSb3dJZChyb3cpICsgJy0nICsgY29sLmZpZWxkKTtcbiAgfVxuXG4gIGdldFpJbmRleChyb3c6IGFueSwgY29sOiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2VsbHMuZ2V0KHRoaXMuZ2V0Um93SWQocm93KSArICctJyArIGNvbC5maWVsZCkgPz8gMjE7XG4gIH1cblxuICBpc092ZXJmbG93aW5nKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghZWxlbWVudCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBlbGVtZW50LnNjcm9sbFdpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgfVxuXG5cbiAgLy8gUGljdHVyZSBjZWxsIExvZ2ljXG4gIGNvbG9yQ29tYmluYXRpb24gPSBbJ3BpYy1jb21iMScsICdwaWMtY29tYjInLCAncGljLWNvbWI0J107XG4gIGdldER5bmFtaWNDbGFzcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuIHRoaXMuY29sb3JDb21iaW5hdGlvblswXTtcbiAgICBjb25zdCBoYXNoID0gQXJyYXkuZnJvbShuYW1lKS5yZWR1Y2UoKGFjYywgY2hhcikgPT4gYWNjICsgY2hhci5jaGFyQ29kZUF0KDApLCAwKTtcbiAgICBjb25zdCBpbmRleCA9IGhhc2ggJSB0aGlzLmNvbG9yQ29tYmluYXRpb24/Lmxlbmd0aDtcbiAgICByZXR1cm4gdGhpcy5jb2xvckNvbWJpbmF0aW9uW2luZGV4XTtcbiAgfVxuXG4gIGdldEluaXRpYWxzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJ05BJztcbiAgICBjb25zdCBwYXJ0cyA9IG5hbWUudHJpbSgpLnNwbGl0KCcgJyk7XG4gICAgcmV0dXJuIChwYXJ0c1swXVswXSArIChwYXJ0c1sxXT8uWzBdIHx8ICcnKSkudG9VcHBlckNhc2UoKTtcbiAgfVxuXG5cbiAgYWN0aW9uSGlkZTogYm9vbGVhbiA9IHRydWU7XG4gIHhQb3MgPSAwO1xuICB5UG9zID0gMDtcbiAgaXNWaXNpYmxlID0gZmFsc2U7XG4gIGRlYXRpbHNMaXN0OiBhbnk7XG4gIG9wZW5FeHBlbmRJbmRleDogYW55O1xuICBwb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG5cbiBvblJpZ2h0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgYW55LCBkZWF0aWxzTGlzdDogYW55KTogYm9vbGVhbiB7XG4gICAgIC8vIFN0b3JlIG9yaWdpbmFsIGFjdGlvbnMgb24gZmlyc3QgaW5pdGlhbGl6YXRpb24gaWYgbm90IGFscmVhZHkgc3RvcmVkXG4gIGlmICh0aGlzLm9yaWdpbmFsQWN0aW9ucz8ubGVuZ3RoID09PSAwICYmIHRoaXMudmFsaWRhdGVJY29uKSB7XG4gICAgdGhpcy5vcmlnaW5hbEFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zXTsgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsXG4gIH1cbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnZhbGlkYXRlSWNvbiBcbiAgICAgID8gdGhpcy5nZXRWYWxpZEFjdGlvbnMoZGVhdGlsc0xpc3QpIFxuICAgICAgOiAoZGVhdGlsc0xpc3Q/LmFjdGlvbnM/Lmxlbmd0aCA/IGRlYXRpbHNMaXN0LmFjdGlvbnMgOiB0aGlzLmFjdGlvbnMpO1xuXG4gICAgaWYgKCEoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGRlYXRpbHNMaXN0Ll9fdmlydHVhbEluZGV4ID09IDApIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIC8vIEdldCB0aGUgaW5pdGlhbCBjbGljayBwb3NpdGlvblxuICAgIGNvbnN0IGNsaWNrWCA9IChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpID8gZXZlbnQuY2xpZW50WCA6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICBjb25zdCBjbGlja1kgPSAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSA/IGV2ZW50LmNsaWVudFkgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgXG4gICAgdGhpcy54UG9zID0gY2xpY2tYO1xuICAgIHRoaXMueVBvcyA9IGNsaWNrWTtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gZmFsc2U7XG4gICAgdGhpcy5kZWF0aWxzTGlzdCA9IGRlYXRpbHNMaXN0O1xuICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbWVudUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGV4dC1tZW51JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoIW1lbnVFbGVtZW50KSByZXR1cm47XG4gICAgICBjb25zdCBtZW51V2lkdGggPSBtZW51RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IG1lbnVIZWlnaHQgPSBtZW51RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBcbiAgICAgIC8vIEdldCB0YWJsZSBjb250YWluZXIgYm91bmRzXG4gICAgICBjb25zdCB0YWJsZVJlY3QgPSB0aGlzLmRhdGFHcmlkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB0YWJsZVRvcCA9IHRhYmxlUmVjdC50b3A7XG4gICAgICBjb25zdCB0YWJsZUJvdHRvbSA9IHRhYmxlUmVjdC5ib3R0b207XG4gICAgICBjb25zdCB0YWJsZUhlaWdodCA9IHRhYmxlUmVjdC5oZWlnaHQ7XG4gICAgICBcbiAgICAgIGxldCB4ID0gY2xpY2tYO1xuICAgICAgbGV0IHkgPSBjbGlja1k7XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBYIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIGhvcml6b250YWxseVxuICAgICAgaWYgKHggKyBtZW51V2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIHggPSB2aWV3cG9ydFdpZHRoIC0gbWVudVdpZHRoIC0gMTA7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEFkanVzdCBZIHBvc2l0aW9uIGlmIG1lbnUgb3ZlcmZsb3dzIHRhYmxlIHZlcnRpY2FsbHlcbiAgICAgIC8vIENoZWNrIGlmIG1lbnUgd291bGQgZ28gYmVsb3cgdGFibGUgYm90dG9tXG4gICAgICBpZiAoeSArIG1lbnVIZWlnaHQgPiB0YWJsZUJvdHRvbSkge1xuICAgICAgICAvLyBUcnkgdG8gcG9zaXRpb24gYWJvdmUgY2xpY2sgcG9pbnRcbiAgICAgICAgeSA9IGNsaWNrWSAtIG1lbnVIZWlnaHQ7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aGF0IGdvZXMgYWJvdmUgdGFibGUgdG9wLCBwb3NpdGlvbiBhdCB0YWJsZSBib3R0b21cbiAgICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICAgIHkgPSB0YWJsZUJvdHRvbSAtIG1lbnVIZWlnaHQgLSAxMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbnN1cmUgbWVudSBkb2Vzbid0IGdvIGFib3ZlIHRhYmxlIHRvcFxuICAgICAgaWYgKHkgPCB0YWJsZVRvcCkge1xuICAgICAgICB5ID0gdGFibGVUb3AgKyAxMDtcbiAgICAgIH1cbiAgICAgIHRoaXMueFBvcyA9IHg7XG4gICAgICB0aGlzLnlQb3MgPSB5O1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbmVkWWV0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgICBcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4gIG9uQWN0aW9uQ2xpY2soYWN0aW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgb2JqOiB0aGlzLmRlYXRpbHNMaXN0LFxuICAgICAgZXZlbnRUeXBlOiBhY3Rpb24sXG4gICAgfTtcbiAgICB0aGlzLnBvc2l0aW9uZWRZZXQgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChzZW5kT2JqKTtcbiAgfVxuXG5cbiAgb25WZXJpZnlDbGljayh0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZXh0ID0gdHlwZT8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGV4dCA9PSAnYXJjaGl2ZScgfHwgdGV4dCA9PSAndW5hcmNoaXZlJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGVsZXRlJyB8fCB0ZXh0ID09ICdyZXN0b3JlJyB8fCB0ZXh0ID09ICdyZW1vdmUnIHx8IHRleHQgPT0gJ2RlYWN0aXZhdGUnIHx8IHRleHQgPT0gJ2FjdGl2YXRlJyB8fCB0ZXh0ID09ICdibG9jaycgfHwgdGV4dCA9PSAndW5ibG9jaydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VuYWJsZScgfHwgdGV4dCA9PSAnZGlzYWJsZScgfHwgdGV4dCA9PSAnYXBwcm92ZScgfHwgdGV4dCA9PSAncmVqZWN0JyB8fCB0ZXh0ID09ICdwdWJsaXNoJyB8fCB0ZXh0ID09ICd1bnB1Ymxpc2gnIHx8IHRleHQgPT0gJ2xvY2snIHx8IHRleHQgPT0gJ3VubG9jaycgfHwgdGV4dCA9PSAnY29tcGxldGUnIHx8IHRleHQgPT0gJ2luY29tcGxldGUnXG4gICAgICAvLyB8fCB0ZXh0ID09ICdzZW5kIHRvIHJldmlldycgfHwgdGV4dCA9PSAnbWFyayBhcyBwYWlkJyB8fCB0ZXh0ID09ICdtYXJrIGFzIHVucGFpZCcgfHwgdGV4dCA9PSAnZnVsZmlsbCcgfHwgdGV4dCA9PSAndW5mdWxmaWxsJyB8fCB0ZXh0ID09ICdyZWZ1bmQnIHx8IHRleHQgPT0gJ2NhbmNlbCcgfHwgdGV4dCA9PSAncmVzZW5kJyB8fCB0ZXh0ID09ICdjaGFyZ2ViYWNrJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnZGlzcHV0ZScgfHwgdGV4dCA9PSAnZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2RlZXNjYWxhdGUnIHx8IHRleHQgPT0gJ2ZsYWcnIHx8IHRleHQgPT0gJ3VuZmxhZycgfHwgdGV4dCA9PSAndmVyaWZ5JyB8fCB0ZXh0ID09ICd1bnZlcmlmeScgfHwgdGV4dCA9PSAnc3Vic2NyaWJlJyB8fCB0ZXh0ID09ICd1bnN1YnNjcmliZScgfHwgdGV4dCA9PSAnZm9sbG93JyB8fCB0ZXh0ID09ICd1bmZvbGxvdydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2xpa2UnIHx8IHRleHQgPT0gJ3VubGlrZScgfHwgdGV4dCA9PSAnc2hhcmUnIHx8IHRleHQgPT0gJ3Vuc2hhcmUnIHx8IHRleHQgPT0gJ2NvbW1lbnQnIHx8IHRleHQgPT0gJ3VuY29tbWVudCcgfHwgdGV4dCA9PSAndGFnJyB8fCB0ZXh0ID09ICd1bnRhZycgfHwgdGV4dCA9PSAnYXNzaWduJyB8fCB0ZXh0ID09ICd1bmFzc2lnbicgfHwgdGV4dCA9PSAnbGluaycgfHwgdGV4dCA9PSAndW5saW5rJ1xuICAgICAgLy8gfHwgdGV4dCA9PSAnc3luYycgfHwgdGV4dCA9PSAndW5zeW5jJyB8fCB0ZXh0ID09ICdiYWNrdXAnIHx8IHRleHQgPT0gJ3Jlc3RvcmUgYmFja3VwJyB8fCB0ZXh0ID09ICdtaWdyYXRlJyB8fCB0ZXh0ID09ICdpbXBvcnQnIHx8IHRleHQgPT0gJ2V4cG9ydCcgfHwgdGV4dCA9PSAnZ2VuZXJhdGUgcmVwb3J0JyB8fCB0ZXh0ID09ICdkb3dubG9hZCByZXBvcnQnIHx8IHRleHQgPT0gJ3ZpZXcgZGV0YWlscydcbiAgICAgIC8vIHx8IHRleHQgPT0gJ2VkaXQgZGV0YWlscycgfHwgdGV4dCA9PSAndXBkYXRlIGRldGFpbHMnIHx8IHRleHQgPT0gJ2NoYW5nZSBzdGF0dXMnIHx8IHRleHQgPT0gJ3Jlc2V0IHBhc3N3b3JkJyB8fCB0ZXh0ID09ICdzZW5kIG5vdGlmaWNhdGlvbicgfHwgdGV4dCA9PSAnc2NoZWR1bGUnIHx8IHRleHQgPT0gJ3Jlc2NoZWR1bGUnIHx8IHRleHQgPT0gJ2NhbmNlbCBzY2hlZHVsZScgfHwgdGV4dCA9PSAnc3RhcnQnIHx8IHRleHQgPT0gJ3N0b3AnIHx8IHRleHQgPT0gJ3BhdXNlJyB8fCB0ZXh0ID09ICdyZXN1bWUnXG4gICAgKSB7XG4gICAgICAvLyB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdGUodGhpcy50YWJsZVR5cGUpO1xuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJvd3MuY2xlYXIoKTtcbiAgICB9XG4gICAgY29uc3QgaWRzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgICBjb25zdCBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGU6IGFueVtdID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MuZm9yRWFjaChpZCA9PiB7XG4gICAgICBhcnJheU9mT2JqZWN0c1dpdGhUYWJsZVR5cGUucHVzaCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZW5kT2JqID0ge1xuICAgICAgZGF0YToge1xuICAgICAgICBvYmo6IGlkc0FycmF5LFxuICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICBsaXN0aW5nVHlwZTogdGhpcy5saXN0aW5nVHlwZSxcbiAgICAgIH0sXG4gICAgICBldmVudFR5cGU6IHR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHNlbmRPYmopXG4gIH1cblxuXG4gIGdldENlbGxDbGFzc2VzKGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXZpY2UuZ2V0Q2VsbENsYXNzZXMoY29sdW1uLCB2YWx1ZSk7XG4gIH1cblxuXG4gIHJlbW92ZUNvbHVtbkZpbHRlckZyb21Db2x1bW4oY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoIWNvbHVtbikgcmV0dXJuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnZHJvcGRvd24nfHwgY29sdW1uLnR5cGUgPT0gJ2FycmF5Jykge1xuICAgICAgY29sdW1uLnF1ZXJ5Ll9pZHMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKFsnc3RyaW5nJywgJ251bWJlcicsICdkYXRlJ10uaW5jbHVkZXMoY29sdW1uLnR5cGUpKSB7XG4gICAgICBjb2x1bW4ucXVlcnkgPSB7XG4gICAgICAgIGZpcnN0X2NvbmRpdGlvbjogJ2NvbnRhaW4nLFxuICAgICAgICBmaXJzdF92YWx1ZTogbnVsbCxcbiAgICAgICAgY29uZGl0aW9uOiAnbm9uZScsXG4gICAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICAgIHNlY29uZF92YWx1ZTogbnVsbCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sdW1uLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpO1xuICAgIGNvbnN0IGNsZWFuZWRGaWx0ZXJlZENvbHVtbnMgPSBmaWx0ZXJlZENvbHVtbnMubWFwKCh7IHF1ZXJ5LCAuLi5yZXN0IH0pID0+IHtcbiAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICBkZWxldGUgcXVlcnkuX190eXBlbmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VuZERhdGEgPSB7XG4gICAgICBjb2x1bW5zOiB0aGlzLmNsZWFuQ29sdW1ucyh0aGlzLmNvbHVtbnMpLFxuICAgICAgZmlsdGVyczogY2xlYW5lZEZpbHRlcmVkQ29sdW1ucyxcbiAgICAgIG5vX29mX3JlY29yZHM6IE51bWJlcih0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQpLFxuICAgICAgdHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zO1xuICAgICAgdGhpcy5maWx0ZXJPcHRpb25zLmVtaXQoZmlsdGVyZWRDb2x1bW5zKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgb25TaWRlTWVudUNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgIHRoaXMucmVmcmVzaEhlYWRlcnMoKTtcbiAgICBjb25zdCBzZW5kRGF0YSA9IHtcbiAgICAgIGNvbHVtbnM6IHRoaXMuY2xlYW5Db2x1bW5zKHRoaXMuY29sdW1ucyksXG4gICAgICBmaWx0ZXJzOiB0aGlzLmNvbW1vblNldmljZS5nZXRGaWx0ZXJzRnJvbUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmZpbHRlcnNDb25maWcpLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGRlbGV0ZSBxdWVyeS5fX3R5cGVuYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcXVlcnksXG4gICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBub19vZl9yZWNvcmRzOiB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZVNpemUsXG4gICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIGNsZWFuRmlsdGVyZENvbHVtbnMoKSB7XG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5jb21tb25TZXZpY2UuZ2V0RmlsdGVyc0Zyb21Db2x1bW5zKHRoaXMuY29sdW1ucywgdGhpcy5maWx0ZXJzQ29uZmlnKTtcbiAgICBjb25zdCBjbGVhbmVkRmlsdGVyZWRDb2x1bW5zID0gZmlsdGVyZWRDb2x1bW5zLm1hcCgoeyBxdWVyeSwgLi4ucmVzdCB9KSA9PiB7XG4gICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgZGVsZXRlIHF1ZXJ5Ll9fdHlwZW5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLi4ucmVzdCxcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xlYW5lZEZpbHRlcmVkQ29sdW1ucztcbiAgfVxuXG4gIGRvd25sb2FkQ3N2KHR5cGU6ICdjc3YnIHwgJ3hsc3gnKSB7XG4gICAgY29uc3QgY29uZmlnOiBhbnkgPSB7XG4gICAgICBoZWFkZXJCZ0NvbG9yOiB0aGlzLmhlYWRlckJhY2tncm91bmRDb2xvcixcbiAgICAgIGhlYWRlclRleHRDb2xvcjogdGhpcy5oZWFkZXJUZXh0Q29sb3IsXG4gICAgICBib2R5VGV4dENvbG9yOiAnIzAwMDAwMCcsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICAgIHpvb21TY2FsZTogMTI1LFxuICAgICAgaGVhZGVyUm93SGVpZ2h0OiAzMFxuICAgIH1cbiAgICBpZiAodGhpcy5lbmFibGVFeHBvcnQpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBkZCA9IFN0cmluZyhub3cuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgbW0gPSBTdHJpbmcobm93LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgeXl5eSA9IG5vdy5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgSEggPSBTdHJpbmcobm93LmdldEhvdXJzKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBNTSA9IFN0cmluZyhub3cuZ2V0TWludXRlcygpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkID1cbiAgICAgICAgYCR7dGhpcy50YWJsZVR5cGV9XyR7ZGR9LSR7bW19LSR7eXl5eX1fJHtISH0tJHtNTX1gO1xuXG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXR0ZWQpO1xuXG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YVNldCwgZm9ybWF0dGVkLCB0eXBlLCB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcywgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLFxuICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ2Rvd25sb2FkQ3N2J1xuICAgIH1cbiAgICBpZiAodHlwZSA9PSAneGxzeCcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KVxuXG4gIH1cblxuICBvbkZvbnRDaGFuZ2UoKSB7XG4gICAgdGhpcy5oZWFkZXJUZXh0Rm9udHNTaXplID0gdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZTtcbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBmb250RmFpbWx5OiB0aGlzLmZvbnRGYWltbHksXG4gICAgICBib2R5VGV4dEZvbnRzU2l6ZTogdGhpcy5ib2R5VGV4dEZvbnRzU2l6ZSxcbiAgICAgIGhlYWRlclRleHRGb250c1NpemU6IHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSxcbiAgICAgIG9kZFJvd3NCYWNrZ3JvdW5kQ29sb3I6IHRoaXMucm93U2hhZGluZ0VuYWJsZWQgPyB0aGlzLm9kZFJvd3NCYWNrZ3JvdW5kQ29sb3IgOiB1bmRlZmluZWQsXG4gICAgICBzaG93VmVydGljYWxCb3JkZXI6IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyLFxuICAgICAgc2VsZWN0ZWRUYWJsZUxheW91dDogdGhpcy5zZWxlY3RlZFRhYmxlTGF5b3V0LFxuICAgICAgZ2xvYmFsU2VhcmNoOiB0aGlzLnRhYmxlU2VhcmNoXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGRhdGE6IGNvbmZpZ1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ2NvbmZpZydcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcblxuICAgIHRoaXMuY3JlYXRlVXBkYXRlQ29uZmlnTGlzdGluZy5lbWl0KHRoaXMuY3JlYXRlVXBkYXRlQ29sdW1uQ29uZmlnKTtcbiAgfVxuXG4gIG9uR2xvYmFsU2VhcmNoKCkge1xuICAgIC8vIENsb3NlIGV4cGFuZGVkIHJvd3MgYmVmb3JlIHNlYXJjaGluZ1xuICB0aGlzLmNsb3NlQWxsRXhwYW5kZWRSb3dzKCk7XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIG9iajoge1xuICAgICAgICB0YWJsZVNlYXJjaDogdGhpcy50YWJsZVNlYXJjaFxuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogJ3NlYXJjaCdcbiAgICB9XG4gICAgdGhpcy5nZW5lcmljRXZlbnQuZW1pdChldmVudClcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkge1xuICAgICAgdGhpcy5zYXZlUHJlc2V0KCdtb3VzZVVwJyk7XG4gICAgfVxuICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUNvbmZpZ0xpc3RpbmcuZW1pdCh0aGlzLmNyZWF0ZVVwZGF0ZUNvbHVtbkNvbmZpZyk7XG4gIH1cblxuICBvblNlYXJjaElucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZygnU2VhcmNoIHZhbHVlOicsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudGFibGVTZWFyY2ggPSAnJztcbiAgICAgIHRoaXMub25HbG9iYWxTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZpbHRlckNoYW5nZXNFZmZlY3QoKTogYW55IHtcbiAgICBpZiAoIXRoaXMudGFibGVGaWx0ZXJWaWV3SWQpIHJldHVybiB0cnVlXG4gICAgY29uc3QgZmluZERlZmF1bHRGaWx0ZXIgPSB0aGlzLnRhYmxlVmlldz8uZmluZCgoZWxlOiBhbnkpID0+IGVsZT8uaWQgPT0gdGhpcy50YWJsZUZpbHRlclZpZXdJZCk7XG4gICAgY29uc3Qgbm9ybWFsaXplRmlsdGVycyA9IChmaWx0ZXJzOiBhbnlbXSB8IHVuZGVmaW5lZCk6IGFueVtdID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkgcmV0dXJuIFtdO1xuICAgICAgY29uc3QgY2xvbmVkID0gZmlsdGVycy5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGYgPz8ge30pKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW0uX2lkcykpIGl0ZW0uX2lkcyA9IFtdO1xuICAgICAgICBpdGVtLl9pZHMgPSBpdGVtLl9pZHMuc2xpY2UoKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgcmV0dXJuICgnJyArIGEpLmxvY2FsZUNvbXBhcmUoJycgKyBiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGl0ZW0ucXVlcnkgPT09IG51bGwpIHtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbS5xdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbS5xdWVyeS5faWRzKSkgaXRlbS5xdWVyeS5faWRzID0gW107XG4gICAgICAgICAgaXRlbS5xdWVyeS5faWRzID0gaXRlbS5xdWVyeS5faWRzLnNsaWNlKCkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgICByZXR1cm4gKCcnICsgYSkubG9jYWxlQ29tcGFyZSgnJyArIGIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcbiAgICAgIGNsb25lZC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBmYSA9IChhLmZpZWxkIHx8ICcnKSArICd8JyArIChhLnR5cGUgfHwgJycpO1xuICAgICAgICBjb25zdCBmYiA9IChiLmZpZWxkIHx8ICcnKSArICd8JyArIChiLnR5cGUgfHwgJycpO1xuICAgICAgICByZXR1cm4gZmEubG9jYWxlQ29tcGFyZShmYik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9O1xuXG4gICAgY29uc3QgZGVlcEVxdWFsID0gKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgYSA9PT0gbnVsbCB8fCB0eXBlb2YgYiAhPT0gJ29iamVjdCcgfHwgYiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgIT09IEFycmF5LmlzQXJyYXkoYikpIHJldHVybiBmYWxzZTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgICAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRBID0gbm9ybWFsaXplRmlsdGVycyhmaW5kRGVmYXVsdEZpbHRlcj8uZmlsdGVycyk7XG4gICAgY29uc3Qgbm9ybWFsaXplZEIgPSBub3JtYWxpemVGaWx0ZXJzKHRoaXMuZmlsdGVyc0NvbmZpZyk7XG4gICAgY29uc3QgaXNTYW1lID0gZGVlcEVxdWFsKG5vcm1hbGl6ZWRBLCBub3JtYWxpemVkQik7XG4gICAgcmV0dXJuIGlzU2FtZTtcbiAgfVxuXG5cblxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vIENlbGwgU2VsZWN0aW9uIEltcGxlbWVudGVkIEhlcmUgSW1wbGVtZW50ZWQgSGVyZVxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgc2VsZWN0ZWRDZWxsczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRLZXlzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgc2VsZWN0aW9uU3RhcnQ6IGFueSA9IG51bGw7XG4gIGlzU2VsZWN0aW5nID0gZmFsc2U7XG4gIHN0YXJ0U2VsZWN0aW9uKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sSW5kZXg6IG51bWJlcixcbiAgICBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgIHNlY3Rpb246IHN0cmluZ1xuICApIHtcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3Qga2V5ID0gYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtmaWVsZH1gO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydCA9IHsgcm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleDogc2FmZVN1YiwgZmllbGQsIGtleSB9O1xuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRLZXlzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuYWRkKGtleSk7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW3RoaXMuc2VsZWN0aW9uU3RhcnRdO1xuICAgIGNvbnN0IG1vdXNlVXBIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5lbmRTZWxlY3Rpb24oKTtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpXG4gIH1cblxuXG4gIGV4dGVuZFNlbGVjdGlvbihcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIGNvbEluZGV4OiBudW1iZXIsXG4gICAgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBldmVudDogTW91c2VFdmVudCxcbiAgICBzZWN0aW9uOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0aW5nIHx8ICF0aGlzLnNlbGVjdGlvblN0YXJ0KSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3QgdGFyZ2V0U3ViQ29sSW5kZXggPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IG5ld0tleXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAgIGNvbnN0IG5ld0NlbGxzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IG1pblJvdyA9IE1hdGgubWluKHN0YXJ0LnJvd0luZGV4LCByb3dJbmRleCk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnQucm93SW5kZXgsIHJvd0luZGV4KTtcbiAgICBjb25zdCBjb2x1bW5zVG9TZWxlY3QgPSB0aGlzLmdldENvbHVtblNlbGVjdGlvblJhbmdlKHN0YXJ0LmNvbEluZGV4LCBjb2xJbmRleCwgc3RhcnQuc3ViQ29sSW5kZXgsIHRhcmdldFN1YkNvbEluZGV4KTtcblxuICAgIGZvciAobGV0IHIgPSBtaW5Sb3c7IHIgPD0gbWF4Um93OyByKyspIHtcbiAgICAgIGZvciAoY29uc3QgY29sSW5mbyBvZiBjb2x1bW5zVG9TZWxlY3QpIHtcbiAgICAgICAgY29uc3QgayA9IGAke3J9LSR7Y29sSW5mby5jb2xJbmRleH0tJHtjb2xJbmZvLnN1YkNvbEluZGV4fS0ke3NlY3Rpb259YDtcbiAgICAgICAgbmV3S2V5cy5hZGQoayk7XG4gICAgICAgIG5ld0NlbGxzLnB1c2goe1xuICAgICAgICAgIHJvd0luZGV4OiByLFxuICAgICAgICAgIGNvbEluZGV4OiBjb2xJbmZvLmNvbEluZGV4LFxuICAgICAgICAgIHN1YkNvbEluZGV4OiBjb2xJbmZvLnN1YkNvbEluZGV4LFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGtleToga1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IG5ld0tleXM7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gbmV3Q2VsbHM7XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgLy8gQWRkIGF1dG8tc2Nyb2xsaW5nIGxvZ2ljXG4gICAgdGhpcy5oYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudCk7XG4gIH1cblxuXG5cblxuICBnZXRDb2x1bW5TZWxlY3Rpb25SYW5nZShcbiAgICBzdGFydENvbDogbnVtYmVyLFxuICAgIGVuZENvbDogbnVtYmVyLFxuICAgIHN0YXJ0U3ViOiBudW1iZXIsXG4gICAgZW5kU3ViOiBudW1iZXJcbiAgKTogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH1bXSB7XG4gICAgY29uc3QgcmVzdWx0OiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfVtdID0gW107XG4gICAgY29uc3QgbWluQ29sID0gTWF0aC5taW4oc3RhcnRDb2wsIGVuZENvbCk7XG4gICAgY29uc3QgbWF4Q29sID0gTWF0aC5tYXgoc3RhcnRDb2wsIGVuZENvbCk7XG5cbiAgICBjb25zdCBpc0xlZnRUb1JpZ2h0ID0gc3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgIGZvciAobGV0IGMgPSBtaW5Db2w7IGMgPD0gbWF4Q29sOyBjKyspIHtcbiAgICAgIGNvbnN0IHN1YkNvbENvdW50ID0gdGhpcy5nZXRTdWJDb2x1bW5Db3VudChjKTtcblxuICAgICAgaWYgKGMgPT09IHN0YXJ0Q29sICYmIGMgPT09IGVuZENvbCkge1xuICAgICAgICBjb25zdCBtaW5TdWIgPSBNYXRoLm1pbihzdGFydFN1YiwgZW5kU3ViKTtcbiAgICAgICAgY29uc3QgbWF4U3ViID0gTWF0aC5tYXgoc3RhcnRTdWIsIGVuZFN1Yik7XG4gICAgICAgIGZvciAobGV0IHMgPSBtaW5TdWI7IHMgPD0gbWF4U3ViICYmIHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IHN0YXJ0Q29sKSB7XG4gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0KSB7XG4gICAgICAgICAgZm9yIChsZXQgcyA9IHN0YXJ0U3ViOyBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IHN0YXJ0U3ViICYmIHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IGVuZENvbCkge1xuICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodCkge1xuICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDw9IGVuZFN1YiAmJiBzIDwgc3ViQ29sQ291bnQ7IHMrKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goeyBjb2xJbmRleDogYywgc3ViQ29sSW5kZXg6IHMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvciAobGV0IHMgPSBlbmRTdWI7IHMgPCBzdWJDb2xDb3VudDsgcysrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IHN1YkNvbENvdW50OyBzKyspIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh7IGNvbEluZGV4OiBjLCBzdWJDb2xJbmRleDogcyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRTdWJDb2x1bW5Db3VudChjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuY29sdW1ucyB8fCBjb2xJbmRleCA8IDAgfHwgY29sSW5kZXggPj0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tjb2xJbmRleF07XG4gICAgaWYgKGNvbHVtbi5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbHVtbi5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiBjb2x1bW4uY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gMTtcbiAgfVxuICBpc0dyb3VwQ29sdW1uKGNvbEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdWJDb2x1bW5Db3VudChjb2xJbmRleCkgPiAxO1xuICB9XG4gIGVuZFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLmlzU2VsZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdG9wQXV0b1Njcm9sbCgpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uQm91bmRhcmllcygpO1xuICB9XG4gIGlzU2VsZWN0ZWQoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2xJbmRleDogbnVtYmVyLFxuICAgIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgc2VjdGlvbjogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoa2V5KTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25Cb3VuZHM6IHtcbiAgICB0b3A6IG51bWJlciB8IG51bGw7XG4gICAgYm90dG9tOiBudW1iZXIgfCBudWxsO1xuICAgIGxlZnQ6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbDtcbiAgICByaWdodDogeyBjb2xJbmRleDogbnVtYmVyOyBzdWJDb2xJbmRleDogbnVtYmVyIH0gfCBudWxsO1xuICB9ID0geyB0b3A6IG51bGwsIGJvdHRvbTogbnVsbCwgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwgfTtcblxuICB1cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcyA9IHsgdG9wOiBudWxsLCBib3R0b206IG51bGwsIGxlZnQ6IG51bGwsIHJpZ2h0OiBudWxsIH07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGFsbCB1bmlxdWUgcm93IGluZGljZXMgYW5kIGZpbmQgbWluL21heFxuICAgIGNvbnN0IHJvd0luZGljZXMgPSBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5yb3dJbmRleCkpXTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3AgPSBNYXRoLm1pbiguLi5yb3dJbmRpY2VzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5ib3R0b20gPSBNYXRoLm1heCguLi5yb3dJbmRpY2VzKTtcblxuICAgIC8vIEZvciBsZWZ0L3JpZ2h0IGJvdW5kYXJpZXMsIHdlIG5lZWQgdG8gY29uc2lkZXIgYm90aCBjb2xJbmRleCBhbmQgc3ViQ29sSW5kZXhcbiAgICBjb25zdCBsZWZ0TW9zdCA9IHRoaXMuZmluZExlZnRNb3N0Q2VsbCgpO1xuICAgIGNvbnN0IHJpZ2h0TW9zdCA9IHRoaXMuZmluZFJpZ2h0TW9zdENlbGwoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQgPSBsZWZ0TW9zdDtcbiAgICB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCA9IHJpZ2h0TW9zdDtcbiAgfVxuICBmaW5kTGVmdE1vc3RDZWxsKCk6IHsgY29sSW5kZXg6IG51bWJlcjsgc3ViQ29sSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbWluQ29sSW5kZXggPSBNYXRoLm1pbiguLi50aGlzLnNlbGVjdGVkQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5jb2xJbmRleCkpO1xuICAgIGNvbnN0IGxlZnRDb2xDZWxscyA9IHRoaXMuc2VsZWN0ZWRDZWxscy5maWx0ZXIoY2VsbCA9PiBjZWxsLmNvbEluZGV4ID09PSBtaW5Db2xJbmRleCk7XG4gICAgY29uc3QgbWluU3ViQ29sSW5kZXggPSBNYXRoLm1pbiguLi5sZWZ0Q29sQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5zdWJDb2xJbmRleCkpO1xuXG4gICAgcmV0dXJuIHsgY29sSW5kZXg6IG1pbkNvbEluZGV4LCBzdWJDb2xJbmRleDogbWluU3ViQ29sSW5kZXggfTtcbiAgfVxuICBmaW5kUmlnaHRNb3N0Q2VsbCgpOiB7IGNvbEluZGV4OiBudW1iZXI7IHN1YkNvbEluZGV4OiBudW1iZXIgfSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG1heENvbEluZGV4ID0gTWF0aC5tYXgoLi4udGhpcy5zZWxlY3RlZENlbGxzLm1hcChjZWxsID0+IGNlbGwuY29sSW5kZXgpKTtcbiAgICBjb25zdCByaWdodENvbENlbGxzID0gdGhpcy5zZWxlY3RlZENlbGxzLmZpbHRlcihjZWxsID0+IGNlbGwuY29sSW5kZXggPT09IG1heENvbEluZGV4KTtcbiAgICBjb25zdCBtYXhTdWJDb2xJbmRleCA9IE1hdGgubWF4KC4uLnJpZ2h0Q29sQ2VsbHMubWFwKGNlbGwgPT4gY2VsbC5zdWJDb2xJbmRleCkpO1xuXG4gICAgcmV0dXJuIHsgY29sSW5kZXg6IG1heENvbEluZGV4LCBzdWJDb2xJbmRleDogbWF4U3ViQ29sSW5kZXggfTtcbiAgfVxuICBpc1RvcEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMudG9wICE9PSBudWxsICYmIHJvd0luZGV4ID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy50b3A7XG4gIH1cbiAgaXNCb3R0b21Cb3JkZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVTdWIgPSBzdWJDb2xJbmRleCA/PyAwO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkS2V5cy5oYXMoYCR7cm93SW5kZXh9LSR7Y29sSW5kZXh9LSR7c2FmZVN1Yn0tJHtzZWN0aW9ufWApO1xuICAgIHJldHVybiBpc1NlbGVjdGVkICYmIHRoaXMuc2VsZWN0aW9uQm91bmRzLmJvdHRvbSAhPT0gbnVsbCAmJiByb3dJbmRleCA9PT0gdGhpcy5zZWxlY3Rpb25Cb3VuZHMuYm90dG9tO1xuICB9XG4gIGlzTGVmdEJvcmRlcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2FmZVN1YiA9IHN1YkNvbEluZGV4ID8/IDA7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRLZXlzLmhhcyhgJHtyb3dJbmRleH0tJHtjb2xJbmRleH0tJHtzYWZlU3VifS0ke3NlY3Rpb259YCk7XG4gICAgcmV0dXJuIGlzU2VsZWN0ZWQgJiYgdGhpcy5zZWxlY3Rpb25Cb3VuZHMubGVmdCAhPT0gbnVsbCAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQuY29sSW5kZXggJiZcbiAgICAgIHNhZmVTdWIgPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLmxlZnQuc3ViQ29sSW5kZXg7XG4gIH1cblxuICBpc1JpZ2h0Qm9yZGVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzYWZlU3ViID0gc3ViQ29sSW5kZXggPz8gMDtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEtleXMuaGFzKGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3NhZmVTdWJ9LSR7c2VjdGlvbn1gKTtcbiAgICByZXR1cm4gaXNTZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodCAhPT0gbnVsbCAmJlxuICAgICAgY29sSW5kZXggPT09IHRoaXMuc2VsZWN0aW9uQm91bmRzLnJpZ2h0LmNvbEluZGV4ICYmXG4gICAgICBzYWZlU3ViID09PSB0aGlzLnNlbGVjdGlvbkJvdW5kcy5yaWdodC5zdWJDb2xJbmRleDtcbiAgfVxuXG4gIGlzVG9wTGVmdENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNUb3BCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc0xlZnRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuICBpc1RvcFJpZ2h0Q29ybmVyKHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIgfCBudWxsLCBzZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1RvcEJvcmRlcihyb3dJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKSAmJiB0aGlzLmlzUmlnaHRCb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbik7XG4gIH1cblxuICBpc0JvdHRvbUxlZnRDb3JuZXIocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwgc3ViQ29sSW5kZXg6IG51bWJlciB8IG51bGwsIHNlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQm90dG9tQm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pICYmIHRoaXMuaXNMZWZ0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cbiAgaXNCb3R0b21SaWdodENvcm5lcihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBzdWJDb2xJbmRleDogbnVtYmVyIHwgbnVsbCwgc2VjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCb3R0b21Cb3JkZXIocm93SW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbikgJiYgdGhpcy5pc1JpZ2h0Qm9yZGVyKHJvd0luZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pO1xuICB9XG5cblxuICBjZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHNjcm9sbFNwZWVkID0gMTUwO1xuICBwcml2YXRlIHNjcm9sbE1hcmdpbiA9IDMwO1xuICBoYW5kbGVDZWxsQXV0b1Njcm9sbChldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGhvcml6b250YWxDb250YWluZXIgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdmVydGljYWxDb250YWluZXIgPSB0aGlzLm1haW5TY3JvbGwubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvcml6b250YWxDb250YWluZXIgfHwgIXZlcnRpY2FsQ29udGFpbmVyKSByZXR1cm47XG4gICAgY29uc3QgaG9yaXpvbnRhbFJlY3QgPSBob3Jpem9udGFsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG1vdXNlWCA9IGV2ZW50LmNsaWVudFg7XG4gICAgY29uc3QgdmVydGljYWxSZWN0ID0gdmVydGljYWxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgbW91c2VZID0gZXZlbnQuY2xpZW50WTtcbiAgICBjb25zdCBuZWFyVG9wID0gbW91c2VZIC0gdmVydGljYWxSZWN0LnRvcCA8IHRoaXMuc2Nyb2xsTWFyZ2luO1xuICAgIGNvbnN0IG5lYXJCb3R0b20gPSB2ZXJ0aWNhbFJlY3QuYm90dG9tIC0gbW91c2VZIDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgY29uc3QgbmVhckxlZnQgPSBtb3VzZVggLSBob3Jpem9udGFsUmVjdC5sZWZ0IDwgdGhpcy5zY3JvbGxNYXJnaW47XG4gICAgY29uc3QgbmVhclJpZ2h0ID0gaG9yaXpvbnRhbFJlY3QucmlnaHQgLSBtb3VzZVggPCB0aGlzLnNjcm9sbE1hcmdpbjtcbiAgICBsZXQgc2Nyb2xsWCA9IDA7XG4gICAgbGV0IHNjcm9sbFkgPSAwO1xuICAgIGlmIChuZWFyVG9wKSBzY3JvbGxZID0gLXRoaXMuc2Nyb2xsU3BlZWQ7XG4gICAgaWYgKG5lYXJCb3R0b20pIHNjcm9sbFkgPSB0aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyTGVmdCkgc2Nyb2xsWCA9IC10aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChuZWFyUmlnaHQpIHNjcm9sbFggPSB0aGlzLnNjcm9sbFNwZWVkO1xuICAgIGlmIChzY3JvbGxYICE9PSAwIHx8IHNjcm9sbFkgIT09IDApIHtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFggIT09IDApIHtcbiAgICAgICAgICBob3Jpem9udGFsQ29udGFpbmVyLnNjcm9sbEJ5KHNjcm9sbFgsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY3JvbGxZICE9PSAwKSB7XG4gICAgICAgICAgdmVydGljYWxDb250YWluZXIuc2Nyb2xsQnkoMCwgc2Nyb2xsWSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDgpO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BBdXRvU2Nyb2xsKCkge1xuICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb25BdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jZWxsU2VsZWN0aW9uQXV0b1Njcm9sbEludGVydmFsKTtcbiAgICAgIHRoaXMuY2VsbFNlbGVjdGlvbkF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyBSb3cgU2VsZWN0aW9uIGZyb20gdGhlIEluZGV4aW5nIEltcGxlbWVudGVkIEhlcmVcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIHJvd1NlbGVjdGVkSW5kZXhlczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7XG4gIHJvd1NlbGVjdGluZyA9IGZhbHNlO1xuICByb3dTZWxlY3Rpb25TdGFydEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgYXV0b1Njcm9sbEludGVydmFsOiBhbnkgPSBudWxsO1xuXG4gIGdldCBmaXJzdFNlbGVjdGVkUm93KCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gTWF0aC5taW4oLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMpO1xuICB9XG5cbiAgZ2V0IGxhc3RTZWxlY3RlZFJvdygpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuc2l6ZSA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzKTtcbiAgfVxuXG5cbiAgb25Sb3dNb3VzZURvd24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMucm93U2VsZWN0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkS2V5cy5jbGVhcigpO1xuICAgIHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLmNsZWFyKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKGluZGV4KTtcbiAgICB0aGlzLmFjdGl2ZUNlbGwgPSAnJztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBtb3VzZU1vdmVIYW5kbGVyID0gKGU6IE1vdXNlRXZlbnQpID0+IHRoaXMuaGFuZGxlQXV0b1Njcm9sbChlKTtcbiAgICBjb25zdCBtb3VzZVVwSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25Sb3dNb3VzZVVwKCk7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgbW91c2VVcEhhbmRsZXIpO1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBtb3VzZVVwSGFuZGxlcik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW91c2VNb3ZlSGFuZGxlcik7XG4gIH1cblxuICBvblJvd01vdXNlT3ZlcihpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICghdGhpcy5yb3dTZWxlY3RpbmcgfHwgdGhpcy5yb3dTZWxlY3Rpb25TdGFydEluZGV4ID09PSBudWxsKSByZXR1cm47XG4gICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuY2xlYXIoKTtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCwgaW5kZXgpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCwgaW5kZXgpO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMuYWRkKGkpO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhbLi4udGhpcy5yb3dTZWxlY3RlZEluZGV4ZXNdKTtcbiAgfVxuXG4gIG9uUm93TW91c2VVcCgpIHtcbiAgICB0aGlzLnJvd1NlbGVjdGluZyA9IGZhbHNlO1xuICAgIHRoaXMucm93U2VsZWN0aW9uU3RhcnRJbmRleCA9IG51bGw7XG4gIH1cbiAgaGFuZGxlQXV0b1Njcm9sbChlOiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5tYWluU2Nyb2xsPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCByZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGVkZ2VTaXplID0gNDBcbiAgICBsZXQgc2Nyb2xsQW1vdW50ID0gMDtcblxuICAgIGlmIChlLmNsaWVudFkgPCByZWN0LnRvcCArIGVkZ2VTaXplKSB7XG4gICAgICBzY3JvbGxBbW91bnQgPSAtMTUwO1xuICAgIH0gZWxzZSBpZiAoZS5jbGllbnRZID4gcmVjdC5ib3R0b20gLSBlZGdlU2l6ZSkge1xuICAgICAgc2Nyb2xsQW1vdW50ID0gMTUwO1xuICAgIH1cblxuICAgIGlmIChzY3JvbGxBbW91bnQgIT09IDApIHtcbiAgICAgIGlmICghdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9ICgpID0+IHtcbiAgICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wICs9IHNjcm9sbEFtb3VudDtcbiAgICAgICAgICB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuYXV0b1Njcm9sbEludGVydmFsID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTogYW55W11bXSB7XG4gIC8vICAgY29uc3QgY29waWVkUm93czogYW55W11bXSA9IFtdO1xuICAvLyAgIGNvbnN0IGZpbmRSb3dCeVZpcnR1YWxJbmRleCA9ICh2SW5kZXg6IG51bWJlcikgPT5cbiAgLy8gICAgIHRoaXMuZGF0YVNldC5maW5kKChyOiBhbnkpID0+IHIuX192aXJ0dWFsSW5kZXggPT09IHZJbmRleCk7XG4gIC8vICAgaWYgKHRoaXMucm93U2VsZWN0ZWRJbmRleGVzICYmIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLnNpemUgPiAwKSB7XG4gIC8vICAgICBjb25zdCBzb3J0ZWRJbmRleGVzID0gWy4uLnRoaXMucm93U2VsZWN0ZWRJbmRleGVzXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIC8vICAgICBmb3IgKGNvbnN0IHZJbmRleCBvZiBzb3J0ZWRJbmRleGVzKSB7XG4gIC8vICAgICAgIGNvbnN0IHJvdyA9IGZpbmRSb3dCeVZpcnR1YWxJbmRleCh2SW5kZXgpO1xuICAvLyAgICAgICBpZiAoIXJvdykgY29udGludWU7XG4gIC8vICAgICAgIGNvbnN0IHJvd1ZhbHVlcyA9IHRoaXMuY29sdW1ucy5mbGF0TWFwKGNvbCA9PlxuICAvLyAgICAgICAgIGNvbC5jaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbilcbiAgLy8gICAgICAgICAgID8gY29sLmNoaWxkcmVuLm1hcCgoYzogeyBmaWVsZDogc3RyaW5nIH0pID0+XG4gIC8vICAgICAgICAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGMuZmllbGQpID8/ICcnXG4gIC8vICAgICAgICAgICAgIClcbiAgLy8gICAgICAgICAgIDogdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgPz8gJydcbiAgLy8gICAgICAgKTtcbiAgLy8gICAgICAgY29waWVkUm93cy5wdXNoKHJvd1ZhbHVlcyk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgaWYgKHRoaXMuc2VsZWN0ZWRDZWxscyAmJiB0aGlzLnNlbGVjdGVkQ2VsbHMubGVuZ3RoID4gMCkge1xuICAvLyAgICAgY29uc3Qgcm93c01hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnlbXT4oKTtcbiAgLy8gICAgIGZvciAoY29uc3QgY2VsbCBvZiB0aGlzLnNlbGVjdGVkQ2VsbHMpIHtcbiAgLy8gICAgICAgY29uc3Qgcm93ID0gZmluZFJvd0J5VmlydHVhbEluZGV4KGNlbGwucm93SW5kZXgpO1xuICAvLyAgICAgICBpZiAoIXJvdykgY29udGludWU7XG5cbiAgLy8gICAgICAgY29uc3QgY29sID0gdGhpcy5jb2x1bW5zW2NlbGwuY29sSW5kZXhdO1xuICAvLyAgICAgICBsZXQgZmllbGROYW1lID0gY29sPy5maWVsZDtcbiAgLy8gICAgICAgaWYgKGNvbD8uY2hpbGRyZW4gJiYgY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdKSB7XG4gIC8vICAgICAgICAgZmllbGROYW1lID0gY29sLmNoaWxkcmVuW2NlbGwuc3ViQ29sSW5kZXhdLmZpZWxkO1xuICAvLyAgICAgICB9XG4gIC8vICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGZpZWxkTmFtZSkgPz8gJyc7XG5cbiAgLy8gICAgICAgaWYgKCFyb3dzTWFwLmhhcyhjZWxsLnJvd0luZGV4KSkgcm93c01hcC5zZXQoY2VsbC5yb3dJbmRleCwgW10pO1xuICAvLyAgICAgICByb3dzTWFwLmdldChjZWxsLnJvd0luZGV4KSEucHVzaCh2YWx1ZSk7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGNvbnN0IHNvcnRlZENlbGxzID0gWy4uLnJvd3NNYXAuZW50cmllcygpXVxuICAvLyAgICAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEgLSBiKVxuICAvLyAgICAgICAubWFwKChbXywgdl0pID0+IHYpO1xuXG4gIC8vICAgICBjb3BpZWRSb3dzLnB1c2goLi4uc29ydGVkQ2VsbHMpO1xuICAvLyAgIH1cblxuICAvLyAgIGlmIChjb3BpZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAvLyAgICAgY29uc3QgYWN0aXZlQ2VsbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hY3RpdmUtY2VsbCcpO1xuICAvLyAgICAgaWYgKGFjdGl2ZUNlbGwpIHJldHVybiBbW2FjdGl2ZUNlbGwudGV4dENvbnRlbnQ/LnRyaW0oKSB8fCAnJ11dO1xuICAvLyAgIH1cbiAgLy8gICBjb25zdCBtYXhDb2xzID0gY29waWVkUm93cy5yZWR1Y2UoKG1heCwgcm93KSA9PiBNYXRoLm1heChtYXgsIHJvdy5sZW5ndGgpLCAwKTtcbiAgLy8gICBjb25zdCBub3JtYWxpemVkID0gY29waWVkUm93cy5tYXAocm93ID0+IHtcbiAgLy8gICAgIGNvbnN0IG5ld1JvdyA9IFsuLi5yb3ddO1xuICAvLyAgICAgd2hpbGUgKG5ld1Jvdy5sZW5ndGggPCBtYXhDb2xzKSBuZXdSb3cucHVzaCgnJyk7IFxuICAvLyAgICAgcmV0dXJuIG5ld1JvdztcbiAgLy8gICB9KTtcbiAgLy8gICByZXR1cm4gbm9ybWFsaXplZDtcbiAgLy8gfVxuXG5cbiAgdW5kb1N0YWNrOiBhbnlbXVtdID0gW107XG4gIHJlZG9TdGFjazogYW55W11bXSA9IFtdO1xuXG4gIHByaXZhdGUgY2xvbmVEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgfVxuXG4gIHBlcmZvcm1DdXQoc2VsZWN0ZWREYXRhOiBhbnlbXVtdKSB7XG4gICAgLy8gU2F2ZSBjdXJyZW50IHN0YXRlIGZvciB1bmRvXG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh0aGlzLmNsb25lRGF0YSh0aGlzLnZpc2libGVSb3dzKSk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTsgLy8gQ2xlYXIgcmVkbyBzdGFjayBvbiBuZXcgYWN0aW9uXG5cbiAgICAvLyBQZXJmb3JtIGN1dFxuICAgIHRoaXMuY29weVNlcnZpY2UuY3V0V2l0aEFuaW1hdGlvbihzZWxlY3RlZERhdGEpO1xuICAgIGNvbnN0IHsgdXBkYXRlZFJvd3MgfSA9IHRoaXMuY29weVNlcnZpY2UuY3V0U2VsZWN0ZWRTZWxlY3RlZERhdGEoXG4gICAgICB0aGlzLnZpc2libGVSb3dzLFxuICAgICAgdGhpcy5yb3dTZWxlY3RlZEluZGV4ZXMsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMsXG4gICAgICB0aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLnNldE5lc3RlZFZhbHVlLmJpbmQodGhpcylcbiAgICApO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgUm93czogJywgdXBkYXRlZFJvd3MpO1xuICB9XG5cblxuXG4gIGdldFNlbGVjdGVkRGF0YUZvckNvcHkoKTogYW55W11bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29weVNlcnZpY2UuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weShcbiAgICAgIHRoaXMuZGF0YVNldCxcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIHRoaXMucm93U2VsZWN0ZWRJbmRleGVzLFxuICAgICAgdGhpcy5zZWxlY3RlZENlbGxzLFxuICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZS5iaW5kKHRoaXMpXG4gICAgKTtcbiAgfVxuXG5cbiAgcGFnZVNpemVLZXlNYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgcHJpdmF0ZSBidWlsZFBhZ2VTaXplS2V5TWFwKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemVLZXlNYXAgPSB7fTtcblxuICAgIHRoaXMucGFnZVNpemVPcHRpb25zLmZvckVhY2goKHNpemUsIGluZGV4KSA9PiB7XG4gICAgICAvLyBLZXlzOiAx4oCTOSwgdGhlbiAwIGZvciAxMHRoIGl0ZW1cbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIGluZGV4IDwgOVxuICAgICAgICAgID8gU3RyaW5nKGluZGV4ICsgMSlcbiAgICAgICAgICA6IGluZGV4ID09PSA5XG4gICAgICAgICAgPyAnMCdcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUtleU1hcFtrZXldID0gc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpc0Zvcm1GaWVsZCA9XG4gICAgICB0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHxcbiAgICAgIHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZTtcbiAgICBpZiAoaXNGb3JtRmllbGQgfHwgdGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmdvVG9OZXh0UGFnZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEN0cmwgKyBBcnJvdyBMZWZ0IOKGkiBQcmV2aW91cyBQYWdlXG4gICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmICFldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5nb1RvUHJldmlvdXNQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3RybCArIFNoaWZ0ICsgQXJyb3cgUmlnaHQg4oaSIExhc3QgUGFnZVxuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IExlZnQg4oaSIEZpcnN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gXG5cbiAgICAvLyBDdHJsICsgU2hpZnQgKyBBcnJvdyBSaWdodCDihpIgTGFzdCBQYWdlXG4gICAgY29uc3QgTUlOX0hFSUdIVCA9IDI4O1xuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaGVhZGVyUm93SGVpZ2h0ICs9IDE7XG4gICAgICB0aGlzLnJvd0hlaWdodCArPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEN0cmwgKyBTaGlmdCArIEFycm93IFJpZ2h0IOKGkiBMYXN0IFBhZ2VcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgdGhpcy5oZWFkZXJSb3dIZWlnaHQgPSBNYXRoLm1heChNSU5fSEVJR0hULCB0aGlzLmhlYWRlclJvd0hlaWdodCAtIDEpO1xuICAgICB0aGlzLnJvd0hlaWdodCA9IE1hdGgubWF4KE1JTl9IRUlHSFQsIHRoaXMucm93SGVpZ2h0IC0gMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgICAgICBcblxuICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoSW5wdXQpIHtcbiAgICAgICAgY29uc3QgaW5wdXRFbCA9IHRoaXMuZ2xvYmFsU2VhcmNoSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaW5wdXRFbC5mb2N1cygpO1xuICAgICAgICBjb25zdCBvcmlnaW5hbE91dGxpbmUgPSBpbnB1dEVsLnN0eWxlLm91dGxpbmU7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQm94U2hhZG93ID0gaW5wdXRFbC5zdHlsZS5ib3hTaGFkb3c7XG4gICAgICAgIGlucHV0RWwuc3R5bGUuc2V0UHJvcGVydHkoJ291dGxpbmUnLCAnMnB4IHNvbGlkICM0ZjljZmYnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdib3gtc2hhZG93JywgJzAgMCA4cHggMnB4ICM0ZjljZmYnLCAnaW1wb3J0YW50Jyk7IFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpbnB1dEVsLnN0eWxlLnNldFByb3BlcnR5KCdvdXRsaW5lJywgb3JpZ2luYWxPdXRsaW5lIHx8ICcnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgICAgaW5wdXRFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnYm94LXNoYWRvdycsIG9yaWdpbmFsQm94U2hhZG93IHx8ICcnLCAnaW1wb3J0YW50Jyk7XG4gICAgICAgIH0sIDEwMDApO1xuXG5cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hdXRvc2l6ZUFsbENvbHVtbnMoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleT8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3InKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYXV0b1NpemVDb2x1bW5zQnlSYXRpbygpXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZENzdignY3N2Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdlJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmRvd25sb2FkQ3N2KCd4bHN4Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zaG93VmVydGljYWxCb3JkZXIgPSAhdGhpcy5zaG93VmVydGljYWxCb3JkZXI7XG4gICAgICAgIHRoaXMub25Gb250Q2hhbmdlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnaCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5yb3dTaGFkaW5nRW5hYmxlZCA9ICF0aGlzLnJvd1NoYWRpbmdFbmFibGVkO1xuICAgICAgICB0aGlzLm9uRm9udENoYW5nZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAncycpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnc21hbGwnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ20nKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2V0VGFibGVMYXlvdXQoJ21lZGl1bScpXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZUxheW91dCgnbGFyZ2UnKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgXG5cblxuICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgIGNvbnN0IG5ld0xpbWl0ID0gdGhpcy5wYWdlU2l6ZUtleU1hcFtldmVudC5rZXldO1xuICAgICAgaWYgKG5ld0xpbWl0KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25Db25maWcubGltaXQgIT09IG5ld0xpbWl0KSB7XG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQ29uZmlnLmxpbWl0ID0gbmV3TGltaXQ7XG4gICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgY29uc3QgdGFibGVDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZGF0YS1ncmlkLWJvZHktd3JhcHBlcicpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiAhdGFibGVDb250YWluZXIuY29udGFpbnModGFyZ2V0KSkgcmV0dXJuO1xuICAgIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2MnKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoICYmICF0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5zaXplKSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29weVNlcnZpY2UuY29weVRvQ2xpcGJvYXJkKHNlbGVjdGVkRGF0YSk7XG5cbiAgICB9IGVsc2UgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENlbGxzPy5sZW5ndGggfHwgIXRoaXMuZW5hYmxlQ3V0KSByZXR1cm5cbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWREYXRhRm9yQ29weSgpO1xuICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucGVyZm9ybUN1dChzZWxlY3RlZERhdGEpO1xuXG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3onKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDZWxscz8ubGVuZ3RoKSByZXR1cm5cbiAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnVuZG8oKTtcblxuICAgIH0gZWxzZSBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd5Jykge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCkgcmV0dXJuXG4gICAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yZWRvKCk7XG4gICAgfSBlbHNlIGlmICgoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiBldmVudC5rZXkgPT09ICdhJykge1xuICAgICAgLy8g4pyFIFNlbGVjdCBhbGwgY2VsbHNcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbENlbGxzKCk7XG4gICAgICB9XG4gIH1cblxuICBnb1RvTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKGN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gIH1cblxuICBnb1RvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2luYXRpb25Db25maWcucGFnZTtcbiAgICAgIGlmIChjdXJyZW50UGFnZSA8PSAxKSByZXR1cm47XG4gICAgICB0aGlzLmdvVG9QYWdlKGN1cnJlbnRQYWdlIC0gMSk7XG4gICAgfVxuXG4gICAgZ29Ub0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IDEpIHJldHVybjtcbiAgICB0aGlzLmdvVG9QYWdlKDEpO1xuICB9XG5cbiAgZ29Ub0xhc3RQYWdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RQYWdlID0gdGhpcy5wYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZXM7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbkNvbmZpZy5wYWdlID09PSBsYXN0UGFnZSkgcmV0dXJuO1xuICAgIHRoaXMuZ29Ub1BhZ2UobGFzdFBhZ2UpO1xuICB9XG5cblxuXG5cbiAgc2VsZWN0QWxsQ2VsbHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZENlbGxzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEtleXMuY2xlYXIoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5jbGVhcigpO1xuXG4gICAgLy8gU2V0IHNlbGVjdGlvbiBzdGFydCBsaWtlIHNpbmdsZSBzZWxlY3Rpb24gKGZpcnN0IGNlbGwpXG4gICAgaWYgKHRoaXMuZGF0YVNldC5sZW5ndGggJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgY29uc3QgZmlyc3RGaWVsZCA9IHRoaXMuY29sdW1uc1swXS5maWVsZCB8fCB0aGlzLmNvbHVtbnNbMF0ubmFtZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSB7XG4gICAgICAgIHJvd0luZGV4OiAwLFxuICAgICAgICBjb2xJbmRleDogMCxcbiAgICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAgIGZpZWxkOiBmaXJzdEZpZWxkLFxuICAgICAgICBrZXk6IGAwLTAtMC0ke2ZpcnN0RmllbGR9YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5pc1NlbGVjdGluZyA9IHRydWU7XG5cbiAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDw9IHRoaXMuZGF0YVNldD8ubGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgICBpZiAoIXJvd0luZGV4KSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVNldFtyb3dJbmRleF07XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkSW5kZXhlcy5hZGQocm93SW5kZXgpO1xuXG4gICAgICAvLyBmb3IgKGxldCBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgLy8gICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNbY29sSW5kZXhdO1xuICAgICAgLy8gICBjb25zdCBmaWVsZCA9IGNvbC5maWVsZCB8fCBjb2wubmFtZTtcbiAgICAgIC8vICAgaWYoIWNvbC5pc192aXNpYmxlKSBjb250aW51ZTtcblxuICAgICAgLy8gICBpZiAoY29sLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIC8vICAgICBjb2wuY2hpbGRyZW4uZm9yRWFjaCgoc3ViOiBhbnksIHN1YkNvbEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vICAgICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0ke3N1YkNvbEluZGV4fS0ke2ZpZWxkfWA7XG4gICAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWRDZWxscy5wdXNoKHtcbiAgICAgIC8vICAgICAgICAgcm93SW5kZXgsXG4gICAgICAvLyAgICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgICBzdWJDb2xJbmRleCxcbiAgICAgIC8vICAgICAgICAgZmllbGQsXG4gICAgICAvLyAgICAgICAgIGtleSxcbiAgICAgIC8vICAgICAgIH0pO1xuICAgICAgLy8gICAgIH0pO1xuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIGNvbnN0IGtleSA9IGAke3Jvd0luZGV4fS0ke2NvbEluZGV4fS0wLSR7ZmllbGR9YDtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkS2V5cy5hZGQoa2V5KTtcbiAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkQ2VsbHMucHVzaCh7XG4gICAgICAvLyAgICAgICByb3dJbmRleCxcbiAgICAgIC8vICAgICAgIGNvbEluZGV4LFxuICAgICAgLy8gICAgICAgc3ViQ29sSW5kZXg6IDAsXG4gICAgICAvLyAgICAgICBmaWVsZCxcbiAgICAgIC8vICAgICAgIGtleSxcbiAgICAgIC8vICAgICB9KTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBoaWdobGlnaHRpbmcgYW5kIFVJXG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Cb3VuZGFyaWVzKCk7XG5cbiAgICAvLyBTdG9wIFwic2VsZWN0aW5nXCIgbW9kZSBzaW5jZSBpdCdzIGEgb25lLXRpbWUgc2VsZWN0LWFsbFxuICAgIHRoaXMuaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG5cblxuICB1bmRvKCkge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgICB0aGlzLnJlZG9TdGFjay5wdXNoKHRoaXMuY2xvbmVEYXRhKHRoaXMudmlzaWJsZVJvd3MpKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmNsb25lRGF0YShwcmV2U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZG8oKSB7XG4gICAgaWYgKHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5leHRTdGF0ZSA9IHRoaXMucmVkb1N0YWNrLnBvcCgpITtcbiAgICAgIHRoaXMudW5kb1N0YWNrLnB1c2godGhpcy5jbG9uZURhdGEodGhpcy52aXNpYmxlUm93cykpO1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuY2xvbmVEYXRhKG5leHRTdGF0ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnBhc3RlJywgWyckZXZlbnQnXSlcbiAgYXN5bmMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICBpZighdGhpcy5lbmFibGVDdXQpIHJldHVybjtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgdGFnID0gdGFyZ2V0Py50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnIHx8IHRhcmdldD8uZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbHM/Lmxlbmd0aCB8fCAhdGhpcy5hY3RpdmVDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIGNvbnN0IHVzZXJDb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtYXRpb25Nb2RhbChcbiAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGFzdGUgdGhlIGNvcGllZCBkYXRhPydcbiAgICApO1xuXG4gICAgaWYgKCF1c2VyQ29uZmlybWVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuc2VsZWN0ZWRDZWxscz8uWzBdO1xuICAgIGlmICghc3RhcnRDZWxsKSByZXR1cm47XG5cbiAgICBjb25zdCB1cGRhdGVkUm93cyA9IGF3YWl0IHRoaXMuY29weVNlcnZpY2UucGFzdGVGcm9tQ2xpcGJvYXJkVGV4dChcbiAgICAgIHRleHQsXG4gICAgICB0aGlzLnZpc2libGVSb3dzLFxuICAgICAgdGhpcy5jb2x1bW5zLFxuICAgICAgc3RhcnRDZWxsLnJvd0luZGV4LFxuICAgICAgc3RhcnRDZWxsLmNvbEluZGV4LFxuICAgICAgc3RhcnRDZWxsLnN1YkNvbEluZGV4XG4gICAgKTtcblxuICAgIGlmICh1cGRhdGVkUm93cz8udXBkYXRlUm93cz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KHtcbiAgICAgICAgZGF0YTogdXBkYXRlZFJvd3M/LnVwZGF0ZVJvd3MsXG4gICAgICAgIGV2ZW50VHlwZTogJ29uQ2VsbEVkaXQnLFxuICAgICAgICB0eXBlOiB0aGlzLnRhYmxlVHlwZSxcbiAgICAgICAgY29sdW1uOiB1cGRhdGVkUm93cz8uY3VycmVudENvbHVtc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnY3VzdG9tLW92ZXJsYXktd3JhcHBlcicpO1xuICAgICAgb3ZlcmxheS5pbm5lckhUTUwgPSBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLW92ZXJsYXlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1tb2RhbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJtb2RhbC1tZXNzYWdlXCI+JHttZXNzYWdlfTwvcD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY29uZmlybVwiPkNvbmZpcm08L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3ZlcmxheSk7XG4gICAgICBjb25zdCBjb25maXJtQnRuID0gb3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuYnRuLWNvbmZpcm0nKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNhbmNlbEJ0biA9IG92ZXJsYXkucXVlcnlTZWxlY3RvcignLmJ0bi1jYW5jZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3ZlcmxheSk7XG4gICAgICB9O1xuICAgICAgY29uZmlybUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuXG5cblxuICBpc0RhdGUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhaXNOYU4obmV3IERhdGUodmFsdWUpPy5nZXRUaW1lKCkpO1xuICB9XG5cblxuICAvLyBIb2xkIGV4cGFuZGVkIElEcyAoYXJyYXkgZm9yIG11bHRpcGxlLCBzaW5nbGUgdmFsdWUgZm9yIHNpbmdsZSlcbiAgZXhwYW5kZWRlZERldGFpbFJvd3M6IChzdHJpbmcgfCBudW1iZXIpW10gfCBzdHJpbmcgfCBudW1iZXIgPSAnJztcblxuICB0b2dnbGVEZXRhaWxSb3dFeHBhbmQocm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IHJvdz8uaWQgfHwgcm93Py5faWQ7XG4gICAgaWYgKHRoaXMuZ3JpZFR5cGUgPT09ICdBc3NldHMnICYmIHJvdz8uZGV0YWlsPy5jb2x1bW5zKSB7XG4gICAgICByb3cuZGV0YWlsLmNvbHVtbnMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ud2lkdGggPSBpdGVtPy53aWR0aCB8fCAodGhpcy5kYXRhR3JpZENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gcm93LmRldGFpbC5jb2x1bW5zPy5sZW5ndGgpXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJldmlld05lc3RlZENvbHMgPSB0aGlzLmRlZXBDbG9uZUNvbHVtbnMocm93LmRldGFpbC5jb2x1bW5zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMua2VlcE11bHRpcGxlRXhwYW5kZWREZXRhaWxzKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykpIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cyA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzIGFzIChzdHJpbmcgfCBudW1iZXIpW107XG4gICAgICBjb25zdCBpbmRleCA9IGV4cGFuZGVkLmluZGV4T2YoaWQpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBleHBhbmRlZC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwYW5kZWQucHVzaChpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gaWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIHRoaXMucmlnaHRQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLmNlbnRlclBpbm5lZEJvZHk/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICB0aGlzLnJpZ2h0UGlubmVkQm9keT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAzMDApXG4gIH1cblxuICBpc0RldGFpbHNFeHBhbmRlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkID0gcm93Py5pZCB8fCByb3c/Ll9pZDtcblxuICAgIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cykgJiZcbiAgICAgICAgdGhpcy5leHBhbmRlZGVkRGV0YWlsUm93cy5pbmNsdWRlcyhpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID09PSBpZDtcbiAgICB9XG4gIH1cblxuICBnZXRGaWx0ZXJWYWx1ZShvcHRpb246IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uO1xuICB9XG5cblxuICBvcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICB0b2dnbGVNZW51KGk6IG51bWJlciwgZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9XG4gICAgdGhpcy5vcGVuSW5kZXggPSB0aGlzLm9wZW5JbmRleCA9PT0gaSA/IG51bGwgOiBpO1xuICB9XG5cbiAgQFZpZXdDaGlsZCgnbmVzdGVkVGFibGUnKVxuICBuZXN0ZWRUYWJsZSE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBnZXQgaGFzVmVydGljYWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMubmVzdGVkVGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICB9XG5cbiAgZ2V0IGhhc0hvcml6b250YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm5lc3RlZFRhYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZWwgPSB0aGlzLm5lc3RlZFRhYmxlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFRvdGFsQW1vdW50KGNvbHVtbjogYW55KSB7XG4gICAgaWYgKCFjb2x1bW4/LmlzX2Ftb3VudCkgcmV0dXJuO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5vcmlnaW5hbERhdGFTZXQucmVkdWNlKChzdW0sIHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXSB8fCAwO1xuICAgICAgcmV0dXJuIHN1bSArIHZhbHVlO1xuICAgIH0sIDApO1xuICAgIGlmICghdG90YWwpIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAwLjAwYFxuICAgIHJldHVybiBgJHt0aGlzLmN1cnJlbmN5U3ltYm9sfSAke3RoaXMuZm9ybWF0Q3VycmVuY3kudHJhbnNmb3JtKHRvdGFsLCB0aGlzLmN1cnJlbmN5Rm9ybWF0KX1gO1xuICB9XG5cbiAgZHJvcENvbHVtbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+LCByb3c6IGFueSkge1xuICAgIC8vIFJlb3JkZXIgdGhlIGNvbHVtbnMgYXJyYXlcbiAgICBtb3ZlSXRlbUluQXJyYXkocm93LmRldGFpbC5jb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgY3VycmVudFN1YlNvcnRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBhY3RpdmUgY29sdW1uXG4gIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnOyAvLyBhY3RpdmUgZGlyZWN0aW9uXG5cbiAgc29ydE5lc3RlZENvbChjb2w6IGFueSwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBkYXRhU2V0ID0gcm93Py5kZXRhaWw/LnJlc3VsdDtcbiAgICBpZiAodGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50U3ViU29ydENvbHVtbiA9IGNvbC5maWVsZDtcbiAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG4gICAgY29sLm9yZGVyX2J5ID0gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbjtcblxuICAgIC8vIFNvcnQgY29weSBpbnN0ZWFkIG9mIG11dGF0aW5nXG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRhdGFTZXRdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGxldCBhVmFsID0gYVtjb2wuZmllbGRdO1xuICAgICAgbGV0IGJWYWwgPSBiW2NvbC5maWVsZF07XG4gICAgICBhVmFsID0gYVZhbCA9PSBudWxsID8gJycgOiBhVmFsO1xuICAgICAgYlZhbCA9IGJWYWwgPT0gbnVsbCA/ICcnIDogYlZhbDtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgYVZhbCA9IG5ldyBEYXRlKGFWYWwpLmdldFRpbWUoKTtcbiAgICAgICAgYlZhbCA9IG5ldyBEYXRlKGJWYWwpLmdldFRpbWUoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGNvbnN0IGJvdGhOdW1iZXJzID0gIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKTtcblxuICAgICAgaWYgKGJvdGhOdW1iZXJzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IGFOdW0gLSBiTnVtIDogYk51bSAtIGFOdW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb21wID0gU3RyaW5nKGFWYWwpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGJWYWwpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gY29tcCA6IC1jb21wO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcm93LmRldGFpbC5yZXN1bHQgPSBzb3J0ZWQ7XG5cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuXG4gIGdldENvbHVtbldpZHRoUHgocm93OiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoY29sLndpZHRoKSByZXR1cm4gY29sLndpZHRoICsgJ3B4JztcbiAgICBjb25zdCBwaXhlbHMgPSB0aGlzLmNlbnRlclNjcm9sbGFibGVCb2R5Py5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCAvIHJvdy5kZXRhaWw/LmNvbHVtbnMubGVuZ3RoO1xuICAgIHJldHVybiBwaXhlbHMgKyAncHgnO1xuICB9XG5cbiAgZnVsbHNjcmVlbkltYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXG4gIC8vIEFzc2VzdHMgTmVzdGVkIFRhYmxlIFdvcmsgSW1wbGVtZW50ZWQgSGVyZVxuXG4gIHBpblVucGluQ29sdW0oY29sOiBhbnksIHZhbHVlOiAnbGVmdCcgfCAncmlnaHQnIHwgbnVsbCwgY29sdW1uczogYW55W10pIHtcbiAgICBjb2wucGlubmVkID0gdmFsdWU7XG4gICAgY29uc3QgbGVmdCA9IGNvbHVtbnMuZmlsdGVyKGMgPT4gYy5waW5uZWQgPT09ICdsZWZ0Jyk7XG4gICAgY29uc3QgbWlkZGxlID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5waW5uZWQgfHwgYy5waW5uZWQgPT09IG51bGwpO1xuICAgIGNvbnN0IHJpZ2h0ID0gY29sdW1ucy5maWx0ZXIoYyA9PiBjLnBpbm5lZCA9PT0gJ3JpZ2h0Jyk7XG4gICAgY29sdW1ucy5sZW5ndGggPSAwO1xuICAgIGNvbHVtbnMucHVzaCguLi5sZWZ0LCAuLi5taWRkbGUsIC4uLnJpZ2h0KTtcbiAgICB0aGlzLmFjdGl2ZUNvbCA9IG51bGw7XG4gIH1cblxuICBnZXRMZWZ0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAnbGVmdCcpLmxlbmd0aDtcbiAgfVxuXG4gIGdldFJpZ2h0UGlubmVkQ291bnQoY29sdW1uczogYW55W10pOiBudW1iZXIge1xuICAgIHJldHVybiBjb2x1bW5zLmZpbHRlcihjID0+IGMucGlubmVkID09PSAncmlnaHQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRTdGlja3lMZWZ0KGNvbHVtbnM6IGFueVtdLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCBwcmV2Q29sID0gY29sdW1uc1tpXTtcbiAgICAgIGlmIChwcmV2Q29sLnBpbm5lZCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgKz0gcHJldkNvbC53aWR0aCB8fCAxMDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBgJHtsZWZ0fXB4YDtcbiAgfVxuXG4gIHByZXZpZXdOZXN0ZWRDb2xzOiBhbnlbXSA9IFtdO1xuICBvbk5lc3RlZENvbFNvcnQoZXZlbnQ6IENka0RyYWdTb3J0RXZlbnQ8YW55W10+LCBjb2x1bW5zOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghZXZlbnQgfHwgIWNvbHVtbnMpIHJldHVybjtcbiAgICBjb25zdCBmaXJzdFBvc2l0aW9ucyA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIG51bWJlcj4oKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgY29sQ2VsbHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtmaWVsZD1cIiR7Y29sLmZpZWxkfVwiXWApKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgY29sQ2VsbHMuZm9yRWFjaCgoZWwpID0+IGZpcnN0UG9zaXRpb25zLnNldChlbCwgZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkpO1xuICAgIH0pO1xuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZENlbGxzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZmllbGQ9XCIke2NvbC5maWVsZH1cIl1gKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZENlbGxzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TGVmdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgICAgY29uc3Qgb2xkTGVmdCA9IGZpcnN0UG9zaXRpb25zLmdldChlbCkgPz8gbmV3TGVmdDtcbiAgICAgICAgICBjb25zdCBkZWx0YVggPSBvbGRMZWZ0IC0gbmV3TGVmdDtcblxuICAgICAgICAgIGlmIChkZWx0YVggIT09IDApIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke2RlbHRhWH1weClgO1xuICAgICAgICAgICAgdm9pZCBlbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAndHJhbnNmb3JtIDI1MG1zIGVhc2UnO1xuICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoMCknO1xuICAgICAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICcnO1xuICAgICAgICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAnJztcbiAgICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGNsZWFudXApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBjbGVhbnVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuXG4gIHNhdmVTZWxlY3Rpb24oc2VsZWN0ZWRJZHM6IHN0cmluZ1tdLCB0YWJsZVR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGFibGVUeXBlKSByZXR1cm47XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7XCJzZWxlY3RlZFJvd3NcIjoge319Jyk7XG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBzdG9yZWQuc2VsZWN0ZWRSb3dzIHx8IHt9O1xuICAgIGFsbFNlbGVjdGVkW3RhYmxlVHlwZV0gPSBzZWxlY3RlZElkcztcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgICdkYXRhdGFibGVTZWxlY3Rpb25zJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBhbGxTZWxlY3RlZCxcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRhYmxlVHlwZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuICByZXN0b3JlU2VsZWN0aW9uKHRhYmxlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RvcmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGF0YXRhYmxlU2VsZWN0aW9ucycpIHx8ICd7fScpO1xuICAgIGNvbnN0IGlkcyA9IHN0b3JlZC5zZWxlY3RlZFJvd3M/Llt0YWJsZVR5cGVdIHx8IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gbmV3IFNldChpZHMpO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93cztcbiAgfVxuXG5cblxuICBpc091dHNpZGVDb250YWluZXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb250YWluZXJSZWN0OiBET01SZWN0IHwgbnVsbCA9IG51bGw7XG5cblxuICBvbkRyYWdTdGFydGVkKGNvbDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4gPSBjb2w7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RhdGEtZ3JpZC1tYWluLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgfHwgbnVsbDtcbiAgfVxuXG4gIG9uRHJhZ01vdmVkKGV2ZW50OiBDZGtEcmFnTW92ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250YWluZXJSZWN0KSByZXR1cm47XG5cbiAgICBjb25zdCB7IHgsIHkgfSA9IGV2ZW50LnBvaW50ZXJQb3NpdGlvbjtcbiAgICBjb25zdCBpc091dHNpZGUgPVxuICAgICAgeCA8IHRoaXMuY29udGFpbmVyUmVjdC5sZWZ0IHx8XG4gICAgICB4ID4gdGhpcy5jb250YWluZXJSZWN0LnJpZ2h0IHx8XG4gICAgICB5IDwgdGhpcy5jb250YWluZXJSZWN0LnRvcCB8fFxuICAgICAgeSA+IHRoaXMuY29udGFpbmVyUmVjdC5ib3R0b207XG5cbiAgICAvLyBpZiAoaXNPdXRzaWRlICE9PSB0aGlzLmlzT3V0c2lkZUNvbnRhaW5lcikge1xuICAgIC8vICAgdGhpcy5pc091dHNpZGVDb250YWluZXIgPSBpc091dHNpZGU7XG4gICAgLy8gfVxuICB9XG5cbiAgb25EcmFnRW5kZWQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBpZiAodGhpcy5pc091dHNpZGVDb250YWluZXIgJiYgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4pIHtcbiAgICAgIC8vICAgdGhpcy5jdXJyZW50RHJhZ2dpbmdDb2x1bW4hLmlzX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudERyYWdnaW5nQ29sdW1uID0gbnVsbDtcbiAgICAgIHRoaXMuaXNPdXRzaWRlQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIC8vIH1cbiAgICB9LCAxMDApO1xuICAgIHRoaXMuY29udGFpbmVyUmVjdCA9IG51bGw7XG4gIH1cblxuICBnZXRTdGFydEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGlvbkNvbmZpZy50b3RhbFJlc3VsdHMgPT09IDBcbiAgICAgID8gMFxuICAgICAgOiAodGhpcy5wYWdpbmF0aW9uQ29uZmlnLnBhZ2UgLSAxKSAqIHRoaXMucGFnaW5hdGlvbkNvbmZpZy5saW1pdCArIDEgfHwgMDtcbiAgfVxuXG4gIGhhc0FueURlZmF1bHRWaWV3KCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlVmlldz8uc29tZSgoeCkgPT4geC5pc19kZWZhdWx0IHx8IHguaXNfdGVtcCk7XG4gIH1cblxuXG4gIGdldCBpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUZpbHRlclZpZXdJZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGN1cnJQcmVzZXQgPSB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZTtcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRDb2x1bW5zID0gY3VyclByZXNldD8uY29sdW1ucz8ubWFwKChjb2w6IHsgZmllbGQ6IGFueTsgd2lkdGg6IGFueTsgcGlubmVkOiBhbnk7IH0pID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgIHdpZHRoOiBjb2wud2lkdGgsXG4gICAgICAgIHBpbm5lZDogY29sLnBpbm5lZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/Lm1hcChjb2wgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbC53aWR0aCxcbiAgICAgICAgcGlubmVkOiBjb2wucGlubmVkXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQcmVzZXRDb2x1bW5zKTtcbiAgICBjb25zdCBzdHJpbmdDb2x1bW5zID0gSlNPTi5zdHJpbmdpZnkoY29sdW1ucyk7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZmlsdGVyc0NvbmZpZy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBjb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmNvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF9jb25kaXRpb246IGZpbHRlcj8ucXVlcnk/LmZpcnN0X2NvbmRpdGlvbixcbiAgICAgICAgICBmaXJzdF92YWx1ZTogZmlsdGVyPy5xdWVyeT8uZmlyc3RfdmFsdWUsXG4gICAgICAgICAgc2Vjb25kX2NvbmRpdGlvbjogZmlsdGVyPy5xdWVyeT8uc2Vjb25kX2NvbmRpdGlvbixcbiAgICAgICAgICBzZWNvbmRfdmFsdWU6IGZpbHRlcj8ucXVlcnk/LnNlY29uZF92YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGN1cnJlbnRQcmVzZXRGaWx0ZXJzID0gY3VyclByZXNldD8uZmlsdGVycz8ubWFwKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZWQ6IGZpbHRlci5maWVsZCxcbiAgICAgICAgcXVlcnk6IGZpbHRlci5xdWVyeSxcbiAgICAgICAgX2lkczogZmlsdGVyPy5faWRzXG4gICAgICB9XG4gICAgfSlcblxuXG4gICAgLy8gY29uc29sZS5sb2coXCJmaWx0ZXIgY29uZ2lnOiBcIiwgZmlsdGVycyk7XG4gICAgLy8gY29uc29sZS5sb2coXCJjdXJyZW50IHByZXNldCBmaWx0ZXJzOiBcIiwgY3VycmVudFByZXNldEZpbHRlcnMpO1xuXG4gICAgLy8gY29uc29sZS5sb2coJ2lzRXF1YWwnLCBzdHJpbmdzQ3VycmVudFByZXN0Q29scyA9PSBzdHJpbmdDb2x1bW5zKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBUZW1wIFByZXNldCA6ICcsIGN1cnJQcmVzZXQpXG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgVGVtcCBQcmVzZXQgQ29scyBjb2x1bW5zOiAnLCBjdXJyZW50UHJlc2V0Q29sdW1ucylcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjb2x1bW5zOiAnLCBjb2x1bW5zKTtcblxuICAgIGlmICghY3VycmVudFByZXNldENvbHVtbnMpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAoY3VycmVudFByZXNldENvbHVtbnMgJiYgKHN0cmluZ3NDdXJyZW50UHJlc3RDb2xzID09IHN0cmluZ0NvbHVtbnMpICYmIChKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSA9PSBKU09OLnN0cmluZ2lmeShjdXJyZW50UHJlc2V0RmlsdGVycykpICYmICh0aGlzLmZvbnRGYWltbHkgPT0gY3VyclByZXNldC5jb25maWcuZm9udEZhaW1seSlcbiAgICAgICYmICh0aGlzLmJvZHlUZXh0Rm9udHNTaXplID09IGN1cnJQcmVzZXQuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplKSAmJlxuICAgICAgKHRoaXMuaGVhZGVyVGV4dEZvbnRzU2l6ZSA9PSB0aGlzLmhlYWRlclRleHRGb250c1NpemUpXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuc2hvd1ZlcnRpY2FsQm9yZGVyID09IHRoaXMuc2hvd1ZlcnRpY2FsQm9yZGVyXG4gICAgICAmJiB0aGlzLmN1cnJldGFUYWJsZVByZXNldEZvclVwZGF0ZS5jb25maWcuZm9udEZhaW1seSA9PSB0aGlzLmZvbnRGYWltbHlcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5zZWxlY3RlZFRhYmxlTGF5b3V0ID09IHRoaXMuc2VsZWN0ZWRUYWJsZUxheW91dFxuICAgICAgJiYgdGhpcy5jdXJyZXRhVGFibGVQcmVzZXRGb3JVcGRhdGUuY29uZmlnLmJvZHlUZXh0Rm9udHNTaXplID09IHRoaXMuYm9keVRleHRGb250c1NpemVcbiAgICAgICYmIHRoaXMuY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlLmNvbmZpZy5yb3dTaGFkaW5nRW5hYmxlZCA9PSB0aGlzLnJvd1NoYWRpbmdFbmFibGVkKTtcblxuICAgIC8vIHJldHVybiBmYWxzZVxuICB9XG5cbiAgb25BY3Rpb25CdXR0b25DbGljayhidXR0b246IHN0cmluZykge1xuICAgIGNvbnN0IHRleHQgPSBidXR0b24/LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRleHQgPT0gJ2FjdGl2ZSBkYXRhJyB8fCB0ZXh0ID09ICdhY3RpdmUnIHx8IHRleHQgPT0gJ2RhdGEgYWN0aXZlJyB8fCB0ZXh0ID09ICd1bmFyY2hpdmVkIGRhdGEnIHx8IHRleHQgPT0gJ3VuYXJjaGl2ZSBkYXRhJykgdGhpcy5jbGVhclNlbGVjdGlvblN0YXRlKHRoaXMudGFibGVUeXBlKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdGluZ1R5cGU6IHRoaXMubGlzdGluZ1R5cGUsXG4gICAgICAgIG9iajogYnV0dG9uXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiBcIm9uQWN0aW9uQnV0dG9uQ2xpY2tcIixcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJpY0V2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cblxuICBzZXRBY3RpdmVUYWIodGFiOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gICAgY29uc3QgYWxsVGFicyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FjdGl2ZVRhYnMnKSB8fCAne30nKTtcbiAgICBhbGxUYWJzW3RoaXMudGFibGVUeXBlXSA9IHRhYjtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWN0aXZlVGFicycsIEpTT04uc3RyaW5naWZ5KGFsbFRhYnMpKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICAgIG9iajogdGFiXG4gICAgICB9LFxuICAgICAgZXZlbnRUeXBlOiAnb25UYWJDaGFuZ2UnLFxuICAgIH07XG5cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldEJhY2tncm91bmRDb2xvcihyb3c6IGFueSwgaXNFdmVuOiBib29sZWFuLCBzZWN0aW9uOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmhvdmVyZWRSb3dJZCA9PT0gKHJvdy5faWQgfHwgcm93LmlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMucm93SG92ZXJDb2xvcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGVja2VkUm93QmFja2dyb3VuZENvbG9yO1xuICAgIH1cbiAgICBsZXQgYmFzZUNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5yb3dTaGFkaW5nRW5hYmxlZCkge1xuICAgICAgYmFzZUNvbG9yID0gaXNFdmVuID8gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvciA6IHRoaXMub2RkUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZUNvbG9yID0gdGhpcy5ldmVuUm93c0JhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgaWYgKCFiYXNlQ29sb3IpIHtcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgYmFzZUNvbG9yID0gdGhpcy5sZWZ0UGlubmVkQmFja2dyb3VuZENvbG9yO1xuICAgICAgfSBlbHNlIGlmIChzZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIGJhc2VDb2xvciA9IHRoaXMucmlnaHRQaW5uZWRCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYXNlQ29sb3IgPSB0aGlzLmJvZHlCYWNrZ3JvdW5kQ29sb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBiYXNlQ29sb3I7XG4gIH1cblxuICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jZW50ZXJQaW5uZWRIZWFkZXI/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBlbCA9IHRoaXMuY2VudGVyUGlubmVkSGVhZGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gIH1cblxuXG4gIGdldFNhZmVDb21tZW50KGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5FZGl0b3JDb250ZW50KGRlc2NyaXB0aW9uKTtcbiAgfVxuICBjbGVhbkVkaXRvckNvbnRlbnQoY29udGVudDogc3RyaW5nKTogU2FmZUh0bWwge1xuICAgcmV0dXJuIHRoaXMuaHRtbFNhbmF0aXplclNlcnZpY2UuY2xlYW5FZGl0b3JDb250ZW50KGNvbnRlbnQpO1xuICB9XG5cbiAgZ2V0RXh0ZW50aW9uKHVybDogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHVybCAhPT0gJy0nKSB7XG4gICAgICBpZiAodHlwZW9mICh1cmwpID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB1cmwuc3BsaXQoJy4nKS5wb3AoKVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHVybCkpIHtcbiAgICAgICAgcmV0dXJuIHVybFswXS5zcGxpdCgnLicpLnBvcCgpXG4gICAgICB9IGVsc2UgcmV0dXJuICctJ1xuICAgIH1cbiAgICBlbHNlIHJldHVybiAnLSdcbiAgfVxuXG4gIGRvd25sb2FkQXR0Y2htZW50KHVybDogYW55LCBmaWxlPzogYW55KSB7XG4gICAgLy8gdGhpcy5vbkV2ZW50LmVtaXQoe1xuICAgIC8vICAgZG93bmxvYWQ6IHRydWUsXG4gICAgLy8gfSk7XG4gICAgLy8gdGhpcy5nZW5lcmljRXZlbnQuZW1pdChkYXRhKVxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9ICcnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG5cbiAgfVxuICBmdWxsSW1hZ2VTcmM6IHN0cmluZyB8IG51bGwgPSAnJztcbiAgb3BlbkZ1bGxJbWFnZShldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU1HJykge1xuICAgICAgdGhpcy5mdWxsSW1hZ2VTcmMgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICB9XG4gIH1cblxuICBhZGRTdHlsZXNUb0ltYWdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBpbWFnZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY29tbWVudC1jb250ZW50IGltZycpO1xuICAgIGltYWdlcy5mb3JFYWNoKChpbWcpID0+IHtcbiAgICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZGlyZWN0bHlcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnd2lkdGgnLCAnNzBweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICdib3JkZXItcmFkaXVzJywgJzE2cHgnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoaW1nLCAnbWFyZ2luJywgJzhweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShpbWcsICdjdXJzb3InLCAncG9pbnRlcicpO1xuXG4gICAgICAvLyBBZGQgY2xpY2sgbGlzdGVuZXIgdG8gc2hvdyBmdWxsc2NyZWVuIGltYWdlIG9uIGNsaWNrXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihpbWcsICdjbGljaycsICgpID0+IHRoaXMub25JbWFnZUNsaWNrKChpbWcgYXMgSFRNTEltYWdlRWxlbWVudCkuc3JjKSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkltYWdlQ2xpY2soc3JjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZ1bGxzY3JlZW5JbWFnZSA9IHNyYztcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2Z1bGxzY3JlZW5JbWFnZVRlbXBsYXRlJykgZnVsbHNjcmVlbkltYWdlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIGZ1bGxzY3JlZW5WaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGljb25NYXA6IFJlY29yZDxzdHJpbmcsIChyb3c6IGFueSwgY29sOiBhbnkpID0+IHN0cmluZz4gPSB7XG4gICAgYXR0YWNobWVudHNfY291bnQ6ICgpID0+IHRoaXMuc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXR0YWNobWVudHMuc3ZnJyxcbiAgICBjb21tZW50X2NvdW50OiAoKSA9PiB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NvbW1lbnRzLnN2ZycsXG4gICAgcHJpb3JpdHk6IChyb3csIGNvbCkgPT4ge1xuICAgICAgY29uc3QgdmFsID1cbiAgICAgICAgdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgIHRoaXMuZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAnZGF0YS1ncmlkL2ljb25zLycgK1xuICAgICAgICAodmFsID8/ICdkZWZhdWx0JykgK1xuICAgICAgICAnLnN2ZydcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcblxuICB0b2dnbGVGdWxsc2NyZWVuKCkge1xuICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgYXMgYW55O1xuICAgIGlmICghZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQpIHtcbiAgICAgIGlmIChlbGVtLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgIGVsZW0ucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICBlbGVtLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0ud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgZWxlbS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkb2N1bWVudC5leGl0RnVsbHNjcmVlbikge1xuICAgICAgICBkb2N1bWVudC5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgfSBlbHNlIGlmICgoZG9jdW1lbnQgYXMgYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgIChkb2N1bWVudCBhcyBhbnkpLm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkud2Via2l0RXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgKGRvY3VtZW50IGFzIGFueSkud2Via2l0RXhpdEZ1bGxzY3JlZW4oKTtcbiAgICAgIH0gZWxzZSBpZiAoKGRvY3VtZW50IGFzIGFueSkubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgICAoZG9jdW1lbnQgYXMgYW55KS5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25DZWxsRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY3VzdG9tQ2VsbEV2ZW50LmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbGF0dGVuR3JvdXAocm93OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGU6IGFueSkgPT4ge1xuICAgICAgaWYgKCFub2RlKSByZXR1cm47XG4gICAgICBpZiAobm9kZS5pc0dyb3VwKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHRyYXZlcnNlKGNoaWxkKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlKHJvdyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNlbGVjdEdyb3VwUm93KGU6IEV2ZW50LCByb3c6IGFueSkge1xuICAgIGNvbnN0IGNoZWNrYm94ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBjaGVja2JveC5jaGVja2VkO1xuICAgIC8vIEdldCBhbGwgZGVlcCBkYXRhIHJvd3MgKGxlYWYgcm93cylcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZmxhdHRlbkdyb3VwKHJvdyk7XG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByLl9pZCB8fCByLmlkO1xuICAgICAgICBpZiAoaWQpIHRoaXMuc2VsZWN0ZWRSb3dzLmFkZChpZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSByLl9pZCB8fCByLmlkO1xuICAgICAgICBpZiAoaWQpIHRoaXMuc2VsZWN0ZWRSb3dzLmRlbGV0ZShpZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaWRzID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUm93cyk7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGxpc3RpbmdUeXBlOiB0aGlzLmxpc3RpbmdUeXBlLFxuICAgICAgICBvYmo6IGlkc1xuICAgICAgfSxcbiAgICAgIGV2ZW50VHlwZTogXCJvblNlbGVjdFJvd1wiLFxuICAgIH1cbiAgICB0aGlzLmdlbmVyaWNFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBnZXRHcm91cENoZWNrZWRTdGF0ZShyb3c6IGFueSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIGlmICghcm93LmlzR3JvdXApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBsZWFmUm93cyA9IHRoaXMuZmxhdHRlbkdyb3VwKHJvdyk7XG4gICAgbGV0IGNoZWNrZWRDb3VudCA9IDA7XG4gICAgbGVhZlJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgIGNvbnN0IGlkID0gci5faWQgfHwgci5pZDtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cy5oYXMoaWQpKSBjaGVja2VkQ291bnQrKztcbiAgICB9KTtcbiAgICBpZiAoY2hlY2tlZENvdW50ID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNoZWNrZWRDb3VudCA9PT0gbGVhZlJvd3MubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q2VsbFRpdGxlKHJvdzogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk7XG5cbiAgICBpZiAoIXRoaXMuaXNOZXN0ZWRWYWx1ZUFycmF5KHJvdywgY29sLmZpZWxkKSkge1xuICAgICAgaWYgKGNvbC50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZSh2YWwsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbD8uaXNfYW1vdW50KSB7XG4gICAgICAgIGlmICghdmFsKSByZXR1cm4gYDAuMDBgXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdEN1cnJlbmN5LnRyYW5zZm9ybSh2YWwsIHRoaXMuY3VycmVuY3lGb3JtYXQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB2YWw/LnZhbHVlID8/XG4gICAgICAgIHZhbD8ubmFtZSA/P1xuICAgICAgICB2YWwgPz9cbiAgICAgICAgKGNvbC5pc19hbW91bnQgPyAnMCcgOiAnLScpXG4gICAgICApICsgJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3QgPSB2YWw/LlswXTtcblxuICAgIHJldHVybiAoXG4gICAgICBmaXJzdD8uZGVwYXJ0bWVudF9uYW1lID8/XG4gICAgICBmaXJzdD8ucm9sZU5hbWUgPz9cbiAgICAgIGZpcnN0Py5mdWxsX25hbWUgPz9cbiAgICAgIGZpcnN0Py52YWx1ZSA/P1xuICAgICAgZmlyc3Q/Lm5hbWUgPz9cbiAgICAgICctJ1xuICAgICk7XG4gIH1cblxuXG4gIGZpbmlzaEVkaXQoZXZlbnQ6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjZWxsIGVkaXRlZGRkZGRkZGRkZGRkZGRkOiAnLCBldmVudClcbiAgfVxuXG5cbiAgZ2V0RHluYW1pY1JpZ2h0KGNvbDogYW55LCBzZWN0aW9uOiBzdHJpbmcsIGNvbEluZGV4OiBudW1iZXIsIHN1YkNvbEluZGV4OiBudW1iZXIpe1xuICAgIGlmKHNlY3Rpb24gPT0gJ3JpZ2h0JyAmJiB0aGlzLnByZXZpZXdSaWdodFBpbm5lZENvbHVtbnM/Lmxlbmd0aCA9PSAxICYmIGNvbC53aWR0aCA8IDIwMCl7XG4gICAgICByZXR1cm4gMTAwO1xuICAgIH1lbHNlIGlmKHNlY3Rpb24gPT0gJ3JpZ2h0Jyl7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxzZSBpZihzZWN0aW9uID09ICdwcmV2aWV3Q2VudGVyQ29sdW1ucycgJiYgY29sSW5kZXggPT0gKHRoaXMucHJldmlld0NlbnRlckNvbHVtbnM/Lmxlbmd0aCAtIDEpICYmIGNvbC53aWR0aCA8IDIwMCl7XG4gICAgICByZXR1cm4gMjAwXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gY29sLndpZHRoIC0gNDU7XG4gICAgfVxuICB9XG5cbiAgYmx1cklucHV0KGV2ZW50OiBFdmVudCwgcm93OiBhbnksIGNvbDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgaW5wdXQ/LmJsdXIoKTtcbiAgICB0aGlzLnNldEFjdGl2ZUNlbGwocm93LCBjb2wpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRoaXMuZWRpdGluZ0tleSA9ICcnO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG5nZXRWYWxpZEFjdGlvbnMoZWxlbWVudDogYW55KTogc3RyaW5nW10ge1xuICByZXR1cm4gdGhpcy5hY3Rpb25WYWxpZGF0b3IuZ2V0VmFsaWRBY3Rpb25zKFxuICAgIHRoaXMub3JpZ2luYWxBY3Rpb25zLCAvLyBBbHdheXMgcGFzcyBvcmlnaW5hbCB1bm1vZGlmaWVkIGFjdGlvbnNcbiAgICBlbGVtZW50LFxuICAgIHtcbiAgICAgIC8vIHVzZXJJZDogdGhpcy5pZCxcbiAgICAgIHRhYmxlVHlwZTogdGhpcy50YWJsZVR5cGUsXG4gICAgICBzaG93VW5MaW5rOiB0aGlzLnNob3dVbkxpbmssXG4gICAgICBwYWNrYWdlRGF0YTogdGhpcy5wYWNrYWdlRGF0YVxuICAgIH1cbiAgKTtcbn1cbnByaXZhdGUgaXNTdGF0dXNGaWVsZChmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWZpZWxkTmFtZSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBsb3dlckZpZWxkID0gZmllbGROYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBsb3dlckZpZWxkID09PSAnc3RhdHVzJyB8fCBcbiAgICAgICAgIGxvd2VyRmllbGQuaW5jbHVkZXMoJ3N0YXR1cycpIHx8IFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2F2YWlsc3RhdHVzJyB8fFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2FjY291bnRfc3RhdHVzJyB8fFxuICAgICAgICAgbG93ZXJGaWVsZCA9PT0gJ2lzX2N1c3RvbV9ncmFkZSc7XG59XG5cbi8qKlxuICogQ2FwaXRhbGl6ZXMgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgaW4gYSBzdHJpbmdcbiAqIEhhbmRsZXM6IHNwYWNlZCB3b3JkcywgY2FtZWxDYXNlLCBzbmFrZV9jYXNlLCBrZWJhYi1jYXNlLCBhbmQgY29tcG91bmQgd29yZHNcbiAqL1xucHJpdmF0ZSBjYXBpdGFsaXplU3RhdHVzKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuIHJldHVybiB0aGlzLmNvbW1vblNldmljZS5jYXBpdGFsaXplU3RhdHVzKHZhbHVlKTtcbn1cblxuXG4gIGdyaWRDb250ZXh0ID0ge1xuICAgIGFwcGx5RmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMuYXBwbHlGaWx0ZXJPbkNvbHVtbihjb2wpLFxuICAgIGNsZWFyRmlsdGVyOiAoY29sOiBhbnkpID0+IHRoaXMucmVtb3ZlRmlsdGVyRnJvbUNvbHVtbihjb2wpXG4gIH07XG5cbiAgcHJpdmF0ZSBjbG9zZUFsbEZpbHRlck1lbnVzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGaWx0ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5pc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgIHRoaXMuYWN0aXZlRmlsdGVyQ2VsbCA9IG51bGw7XG4gICAgdGhpcy5pc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEZpbHRlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMuY2xlYW5GaWx0ZXJkQ29sdW1ucygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvbW1vblNldmljZS5tYWluQ29udGFpbmVyTGVmdCA9XG4gICAgICAgIHRoaXMuY2VudGVyU2Nyb2xsYWJsZUJvZHkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuXG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnMuZW1pdChmaWx0ZXJzKTtcbiAgICB9LCAyMDApO1xuICB9XG5cblxuXG4gIGFwcGx5RmlsdGVyT25Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgc2VhcmNoOiBjb2wuc2VhcmNoLFxuICAgICAgcXVlcnk6IGNvbC5xdWVyeSxcbiAgICAgIHR5cGU6IGNvbC50eXBlLFxuICAgICAgX2lkczogY29sLl9pZHNcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoZiA9PiBmLmZpZWxkID09PSBjb2wuZmllbGQpO1xuXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWdbZXhpc3RpbmdJbmRleF0gPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NvbmZpZy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICAgIHRoaXMuY29tbW9uU2V2aWNlLnJlcGxhY2VDb2x1bW5RdWVyeSh0aGlzLmNvbHVtbnMsIGNvbCwgY29sLnF1ZXJ5KTtcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XG5cbiAgfVxuXG4gIHJlbW92ZUZpbHRlckZyb21Db2x1bW4oY29sOiBhbnkpIHtcbiAgICB0aGlzLmNsb3NlQWxsRmlsdGVyTWVudXMoKTtcbiAgICBjb25zdCBlbXB0eVF1ZXJ5ID0ge1xuICAgICAgZmlyc3RfY29uZGl0aW9uOiBudWxsLFxuICAgICAgZmlyc3RfdmFsdWU6IG51bGwsXG4gICAgICBjb25kaXRpb246ICdub25lJyxcbiAgICAgIHNlY29uZF9jb25kaXRpb246IG51bGwsXG4gICAgICBzZWNvbmRfdmFsdWU6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5jb21tb25TZXZpY2UucmVwbGFjZUNvbHVtblF1ZXJ5KHRoaXMuY29sdW1ucywgY29sLCBlbXB0eVF1ZXJ5KTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVyc0NvbmZpZy5maW5kSW5kZXgoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gY29sLmZpZWxkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDb25maWcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJDZWxsID0gbnVsbDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5lbWl0RmlsdGVycygpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0ZWREYXRlKHZhbCA6IGFueSl7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2V2aWNlLmZvcm1hdERhdGVWYWx1ZSh2YWwsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gIH1cblxuY2xvc2VBbGxFeHBhbmRlZFJvd3MoKTogdm9pZCB7XG4gIGlmICh0aGlzLmtlZXBNdWx0aXBsZUV4cGFuZGVkRGV0YWlscykge1xuICAgIHRoaXMuZXhwYW5kZWRlZERldGFpbFJvd3MgPSBbXTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmV4cGFuZGVkZWREZXRhaWxSb3dzID0gJyc7XG4gIH1cbiAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xufVxufSIsIjxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMiBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmVcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdiBuYXYtdGFic1wiICpuZ0lmPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJuYXYtdGFiXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIodGFiKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVGFiID09IHRhYlwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdGFiIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdsb2JhbC1zZWFyY2hcIiBbc3R5bGUud2lkdGgucHhdPVwiMzUwXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJlbmFibGVHbG9iYWxTZWFyY2hcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG14LTIgcG9zaXRpb24tYWJzb2x1dGUgaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNnbG9iYWxTZWFyY2hJbnB1dFxuICAgICAgICAgICpuZ0lmPVwiZW5hYmxlR2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzZweFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2gsIHRoZW4gcHJlc3MgRW50ZXJcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFibGVTZWFyY2hcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uR2xvYmFsU2VhcmNoKClcIlxuICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaElucHV0KCRldmVudClcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgdGFibGUtcmlnaHQtdG9wLWFjdGlvbnNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgICAqbmdJZj1cImJ1dHRvbj8uaGFzX3Blcm1pc3Npb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCJKYXZhU2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQnV0dG9uQ2xpY2soYnV0dG9uLm5hbWUpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBidG4gYm9yZGVyIGJvcmRlci1wcmltYXJ5IGJ0bi1hY3RpdmUtcHJpbWFyeSBtZS0yIHAtMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHgtM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zLycgKyBidXR0b24uaWNvbiArICcuc3ZnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICBbY2xhc3MubXMtMF09XCJidXR0b24uaXNfc2hvd0ljb25cIlxuICAgICAgICAgICAgICA+e3sgYnV0dG9uPy5uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiFzaG93RmlsdGVyUm93XCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBhY3Rpb24tYnV0dG9ucy1yb3dcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3BlbkZpbHRlcigpXCJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RmlsdGVyc1wiXG4gICAgICA+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwtaGlkZGVuIHRleHQtd2hpdGVcIj5GaWx0ZXJzPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgIHdpZHRoOiA3cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDdweDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICMwMDIyZmY7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgNjAsIDI1NSk7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMTZweDtcbiAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1ibG9ja1wiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkLW5vbmVcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnYWR2YW5jZS1maWx0ZXInKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlVG9wQnV0dG9uID09PSAnYWR2YW5jZS1maWx0ZXInXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3pvb20tY2hhcmdlLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIHRvcC1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYWN0aW9uLWJ1dHRvbnMtcm93XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAnc2V0dGluZycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICd0YWJsZS1sYXlvdXQnIHx8XG4gICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cycgfHxcbiAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPT09ICdzaG93LWhpZGUtY29sdW1ucydcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2V0dGluZ3MtMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiB0b3AtaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj4gLS0+XG4gICAgICAgIDxhXG4gICAgICAgICAgaHJlZj1cIkphdmFTY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IG1lLTIgcC0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBweC0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NldHRpbmdzLTIuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbC1oaWRkZW4gdGV4dC13aGl0ZVwiPlNldHRpbmc8L3NwYW4+XG4gICAgICAgIDwvYT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICdzZXR0aW5nJ1wiXG4gICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTEgYWN0aW9ucy1kcm9wZG93bi1zZXR0aW5nXCJcbiAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBjdXN0b20tbWVudVwiPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSBMYXlvdXQgLS0+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLWxheW91dCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3RhYmxlLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgVGFibGUgTGF5b3V0PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLXByZXNldHMnKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2xpc3QtZGV0YWlscy5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBUYWJsZSBQcmVzZXRzPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCIhc2hvd1NpZGVNZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgdG9nZ2xlQWN0aW9ucygnc2hvdy1oaWRlLWNvbHVtbnMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgQ29sdW1uczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGVkLXRleHRcIj57eyBjb2x1bW5zQ291bnQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEZpbHRlciAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPcGVuRmlsdGVyKCk7IGFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIG10LTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBGaWx0ZXJcbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPCEtLSBEb3dubG9hZCAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENzdignY3N2JylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9kb3dubG9hZC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgQ1NWIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVFeHBvcnRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRDc3YoJ3hsc3gnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rvd25sb2FkLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICBFeGNlbCBFeHBvcnRcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgJiBGb250IFNpemUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwYi0yIHB0LTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBGYW1pbHkgLS0+XG4gICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvbnRGYWltbHlcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZm9udCBvZiBmb250RmFtaWxpZXNcIiBbdmFsdWVdPVwiZm9udFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmb250IH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRm9udCBTaXplIC0tPlxuICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkZvbnRDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzaXplIG9mIGZvbnRTaXplc1wiIFt2YWx1ZV09XCJzaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNpemUgfX1cbiAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIExheW91dCAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtbGF5b3V0J1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVMYXlvdXRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUYWJsZSBQcmVzZXRzIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVG9wQnV0dG9uID09PSAndGFibGUtcHJlc2V0cydcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlUHJlc2V0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgUHJlc2V0cyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ3Nob3ctaGlkZS1jb2x1bW5zJ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2hvd0hpZGVDb2x1bW5zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1yb3dcIiAqbmdJZj1cInNob3dGdWxsU2NyZWVuQnV0dG9uXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgKm5nSWY9XCIhaXNGdWxsU2NyZWVuXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgYnRuIGJ0bi1hY3RpdmUtcHJpbWFyeSBib3JkZXIgYm9yZGVyLXByaW1hcnkgZXhwZW5kIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCJcbiAgICAgICAgICBkYXRhLWJzLXBsYWNlbWVudD1cInRvcFwiXG4gICAgICAgICAgdGl0bGU9XCJNaW5pbWlzZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBtaW5BcnJvdzogIWlzRnVsbFNjcmVlbiwgbWF4QXJyb3c6IGlzRnVsbFNjcmVlbiB9XCJcbiAgICAgICAgICBzdHlsZT1cInRyYW5zaXRpb246IGNvbG9yIDAuMnNcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZXhwZW5kLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGFcbiAgICAgICAgICAqbmdJZj1cImlzRnVsbFNjcmVlblwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIGJ0biBidG4tYWN0aXZlLXByaW1hcnkgYm9yZGVyIGJvcmRlci1wcmltYXJ5IGV4cGVuZCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIlxuICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiXG4gICAgICAgICAgZGF0YS1icy1wbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgIHRpdGxlPVwiTWF4aW1pc2VcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgbWluQXJyb3c6ICFpc0Z1bGxTY3JlZW4sIG1heEFycm93OiBpc0Z1bGxTY3JlZW4gfVwiXG4gICAgICAgICAgc3R5bGU9XCJ0cmFuc2l0aW9uOiBjb2xvciAwLjJzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL21pbmltaXplLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0yIG1iLTFcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPCEtLSBFeGFtcGxlIHNpbmdsZSBkYW5nZXIgYnV0dG9uIC0tPlxuXG4gICAgICAgIDwhLS0gPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBkLWZsZXggZ2FwLTIgYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ2FjdGlvbnMnKVwiXG4gICAgICAgID5cbiAgICAgICAgICBBY3Rpb25cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9WZWN0b3Iuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2FjdGlvbnMnXCJcbiAgICAgICAgICBjbGFzcz1cImFjdGlvbnMtZHJvcGRvd24gbXQtMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93XCI+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPkFjdGlvbjwvYT5cbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCI+QW5vdGhlciBhY3Rpb248L2E+XG4gICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiPlNvbWV0aGluZyBlbHNlIGhlcmU8L2E+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiNcIj5TZXBhcmF0ZWQgbGluazwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dGaWx0ZXJzICYmICFzaG93RmlsdGVyUm93XCJcbiAgICBjbGFzcz1cInRvcC1maWx0ZXItcm93IGJvcmRlci10b3AgcHktMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInRvcEZpbHRlclJvd0hlaWdodFwiXG4gID5cbiAgICA8IS0tIExFRlQgU0lERSAoRmlsdGVyIHRhZ3MgKyBGaWx0ZXIgYnV0dG9uKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgYWN0aXZlRmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXRhZ3NcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICBhY3RpdmVUb3BCdXR0b24gPSAnZmlsdGVyLWNvbHVtbnMnO1xuICAgICAgICAgICAgICBvcGVuRmlsdGVyKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtdXRlZC10ZXh0IGFkZC1maWx0ZXItYnV0dG9uIGFjdGl2ZS1maWx0ZXJzXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2hpdGUtc3BhY2U6IG5vd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICAgICAgICBjb2w/LmZpZWxkID09IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5maWVsZCAmJlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW4gJiZcbiAgICAgICAgICAgICAgYWN0aXZlVG9wQnV0dG9uID09ICdmaWx0ZXItY29sdW1ucydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItdGFnIG10LTBcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi5zdmcnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlQ29sdW1uRmlsdGVyRnJvbUNvbHVtbihjb2wpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY3Jvc3MtcHJpbWFyeS5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBjcm9zcy1zZWNvbmRhcnkgbXMtMiBtYi0xXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9PT0gJ2ZpbHRlci1jb2x1bW5zJyAmJlxuICAgICAgICAgICAgICBjb2w/LmZpZWxkID09IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5maWVsZCAmJlxuICAgICAgICAgICAgICBpc0FjdGl2ZUZpbHRlck9wZW5cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckNvbHVtbnM7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2wgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9ucy1kcm9wZG93biBtdC0xXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGaWx0ZXIgQnV0dG9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImFkZC1maWx0ZXItYnV0dG9uLW1lbnVcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdmaWx0ZXItY29sdW1ucycpOyBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXV0ZWQtdGV4dCBhZGQtZmlsdGVyLWJ1dHRvbiBidXR0b24tZmlsdGVyXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiA3MHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3BsdXMuc3ZnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cIm1lLTIgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIEZpbHRlclxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nSWY9XCJhY3RpdmVUb3BCdXR0b24gPT09ICdmaWx0ZXItY29sdW1ucycgJiYgIWlzQWN0aXZlRmlsdGVyT3BlblwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlckNvbHVtbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWRyb3Bkb3duIG10LTFcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUklHSFQgU0lERSAoVXBkYXRlICsgUmVzZXQpIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIChjbGljayk9XCJzYXZlUHJlc2V0KClcIlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlciBhbGwtZmlsdGVycy1yZXNldC1idXR0b25cIlxuICAgICAgICAqbmdJZj1cIiFjaGVja0ZpbHRlckNoYW5nZXNFZmZlY3QoKVwiXG4gICAgICA+XG4gICAgICAgIFVwZGF0ZSBWaWV3XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlciBhbGwtZmlsdGVycy1yZXNldC1idXR0b25cIlxuICAgICAgICAqbmdJZj1cIiF0YWJsZUZpbHRlclZpZXdJZCAmJiBhY3RpdmVGaWx0ZXJlZENvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgIChjbGljayk9XCJjbGVhckFsbEZpbHRlcnMoKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiXG4gICAgICBzaG93RmlsdGVycyA/ICdjYWxjKDEwMCUgLSAnICsgdG9wRmlsdGVyUm93SGVpZ2h0ICsgJ3B4KScgOiAnMTAwJSdcbiAgICBcIlxuICAgIGNka0Ryb3BMaXN0R3JvdXBcbiAgICBjbGFzcz1cImRhdGEtZ3JpZC10YWJsZS13cmFwcGVyIG92ZXJmbG93LWhpZGRlblwiXG4gICAgI2RhdGFHcmlkQ29udGFpbmVyXG4gICAgW3N0eWxlLmZvbnRGYW1pbHldPVwiZm9udEZhaW1seVwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICBpZD1cImRhdGEtZ3JpZC1tYWluLWNvbnRhaW5lclwiXG4gID5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInNob3dSb3dzR3JvdXBpbmdcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjb2x1bW5zXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiXG4gICAgICAgIHRvcEdyb3VwZWRCYWRnZXNCYWNrZ3JvdW5kQ29sb3IgfHwgaGVhZGVyQmFja2dyb3VuZENvbG9yXG4gICAgICBcIlxuICAgICAgY2RrRHJvcExpc3RcbiAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwiZW50ZXJUb1RvcFJvd0dyb3VwaW5nKCRldmVudClcIlxuICAgICAgKGNka0Ryb3BMaXN0RXhpdGVkKT1cImV4aXRlZEZyb21UaGVUb3BSb3coJGV2ZW50KVwiXG4gICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcFRvcEdyb3VwKCRldmVudClcIlxuICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiY2FuRW50ZXJUb1Jvd3NHcm91cGluZ1wiXG4gICAgICBpZD1cInJvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lclwiXG4gICAgICBjbGFzcz1cImJvcmRlci1iZWxvdyBkLWZsZXggcHgtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cImhlYWRlclRleHRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiAhZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aFwiPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IGdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Hcm91cFJlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgW2Nka0RyYWdMb2NrQXhpc109XCIneCdcIlxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBncm91cGVkQ29sdW1ucztcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgc2hvd0NoZXZyb246XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRDb2x1bW5zLmxlbmd0aCA+IDEgJiYgaSAhPSBncm91cGVkQ29sdW1ucy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNoaWxkLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXggb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwiXG4gICAgICAgICdjYWxjKDEwMCUgLSAnICtcbiAgICAgICAgKHNob3dSb3dzR3JvdXBpbmdcbiAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCArIGZvb3RlclJvd0hlaWdodFxuICAgICAgICAgIDogZm9vdGVyUm93SGVpZ2h0KSArXG4gICAgICAgICdweCknXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJcbiAgICAgICAgICAhc2hvd1NpZGVNZW51XG4gICAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgICAgOiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgID8gJ2NhbGMoMTAwJSAtIDI4MHB4KSdcbiAgICAgICAgICAgIDogJ2NhbGMoMTAwJSAtIDMwcHgpJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgdHJhbnNpdGlvbiBwb3NpdGlvbi1yZWxhdGl2ZSB3LTEwMFwiPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSBEYXRhIEdyaWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgIDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXItd3JhcHBlciB3LTEwMFwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaGVhZGVyVGV4dENvbG9yXCJcbiAgICAgICAgICAgIFtzdHlsZS5mb250U2l6ZS5weF09XCJoZWFkZXJUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwiIWhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyAmJiBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDJcbiAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSBEYXRhIEdyaWQgTGVmdCBQaW5uZWQgSGVhZGVyIHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtaGVhZGVyIGxlZnQtcGlubmVkXCJcbiAgICAgICAgICAgICAgI2xlZnRQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJoYXNMZWZ0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiNTVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgICBzaG93Q29sdW1uc0dyb3VwaW5nICYmIHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAzXG4gICAgICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMlxuICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBTLk5vXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAqbmdJZj1cInNob3dDaGVja2JveGVzXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDNcbiAgICAgICAgICAgICAgICAgICAgOiBzaG93Q29sdW1uc0dyb3VwaW5nIHx8IHNob3dGaWx0ZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNBbnlWaXNpYmxlQ29sdW1uXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlU3RhdGUoZGF0YVNldClcIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZChkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEFsbChkYXRhU2V0KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgICAgaWQ9XCJsZWZ0LXBpbm5lZC1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImxlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdsZWZ0JylcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJcbiAgICAgICAgICAgICAgICAgIG9uU29ydEdyb3VwKCRldmVudCwgJ3ByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucycpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcEdyb3VwKClcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxcHhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiBsZWZ0UGlubmVkQ29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZpZWxkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncHJldmlld0xlZnRQaW5uZWRDb2x1bW5zJ1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlld1xuICAgICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2w/LmNoaWxkcmVuPy5sZW5ndGg7IGVsc2Ugc2luZ2xlQ29sXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjaGlsZCBvZiBjb2wuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gY29sLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQ29sPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcEdyb3VwaW5nUm93UGxhY2Vob2xkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogY29sPy5jaGlsZHJlbj8ubGVuZ3RoID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tIERhdGEgR3JpZCBDZW50ZXIgUGlubmVkIEhlYWRlciBzdGFydHMgaGVyZSAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWhlYWRlciBjZW50ZXItc2Nyb2xsYWJsZVwiXG4gICAgICAgICAgICAgICNjZW50ZXJQaW5uZWRIZWFkZXJcbiAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvbkNlbnRlckJvZHlTY3JvbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGlkPVwiY2VudGVyLXBpbm5lZC1oZWFkZXJcIlxuICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJcbiAgICAgICAgICAgICAgICBzaG93Um93c0dyb3VwaW5nID8gWydyb3dzLWdyb3VwaW5nLXRvcC1jb250YWluZXInXSA6IFtdXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY2VudGVyQ29sdW1uc1wiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZUNvbHVtbkdyb3VwaW5nICYmIGRyYWdnaW5nSW5Hcm91cEFyZWFcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJvbkRyb3BMaXN0RW50ZXIoJGV2ZW50LCAnY2VudGVyJylcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25Tb3J0R3JvdXAoJGV2ZW50LCAncHJldmlld0NlbnRlckNvbHVtbnMnKVwiXG4gICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wR3JvdXAoKVwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aF09XCJcbiAgICAgICAgICAgICAgICAnY2FsYygxMDAlIC0gJyArXG4gICAgICAgICAgICAgICAgKHJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoICsgbGVmdFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aCkgK1xuICAgICAgICAgICAgICAgICdweCknXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwZWRDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAyMDBweFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICNjb2x1bW5zR3JvdXBlZEJveFxuICAgICAgICAgICAgICAgIGlkPVwiZ3JvdXBCb3hIZWFkZXJEaXZcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggdy0xMDAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93RmlsdGVyUm93ID8gaGVhZGVyUm93SGVpZ2h0ICogMiA6IGhlYWRlclJvd0hlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHMtM1wiPkdyb3VwPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgJ2dyb3VwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uUmVzaXplR3JvdXBCb3goJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogLTJweFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvcmVzaXplLWhhbmRsZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItYmVsb3dcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMzBweDsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyaWRUeXBlID09PSAnQXNzZXRzJyB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJ1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrQ29sdW1uR3JvdXBpbmdTdGF0dXMoY29sKTtcbiAgICAgICAgICAgICAgICAgIGRyYWdTdGFydE9uR3JvdXAoY29sKTtcbiAgICAgICAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ZWQoY29sKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJvbkRyYWdNb3ZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKClcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgY2VudGVyQ29sdW1ucztcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdwcmV2aWV3Q2VudGVyQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdnaW5nSW5Hcm91cEFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZycpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3V0c2lkZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUtY3Jvc3Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1BsYWNlaG9sZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkcmFnZ2luZ0luR3JvdXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnY2VudGVyQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhICYmICFpc091dHNpZGVDb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJvcGFjaXR5OiAwLjZcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIHNpbmdsZUNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SWRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkPy5pc19ncm91cGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hpbGRyZW4ubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gY29sLmNoaWxkcmVuLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uaXNfZ3JvdXBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gRGF0YSBHcmlkIFJpZ2h0IFBpbm5lZCBIZWFkZXIgc3RhcnRzIGhlcmUgLS0+XG4gICAgICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbiAgICAgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgICAgIGlkPVwicmlnaHQtcGlubmVkLWhlYWRlclwiXG4gICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgICAgIHNob3dSb3dzR3JvdXBpbmcgPyBbJ3Jvd3MtZ3JvdXBpbmctdG9wLWNvbnRhaW5lciddIDogW11cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1oZWFkZXIgcmlnaHQtcGlubmVkXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0U29ydGVkKT1cIlxuICAgICAgICAgICAgICAgIG9uU29ydEdyb3VwKCRldmVudCwgJ3ByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cIm9uRHJvcExpc3RFbnRlcigkZXZlbnQsICdyaWdodCcpXCJcbiAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgpXCJcbiAgICAgICAgICAgICAgI3JpZ2h0UGlubmVkSGVhZGVyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtcGlubmVkLWhlYWRlciBkLWZsZXhcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMC4ycHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcmFnYWJsZS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgcmlnaHRQaW5uZWRDb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgcGlubmVkUmlnaHQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrRHJhZ1ByZXZpZXdcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtbW92ZS5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBjb2wuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRyYWdnaW5nSW5Hcm91cEFyZWFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdyaWdodCdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkcmFnZ2luZ0luR3JvdXBBcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwib3BhY2l0eTogMC42XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBzaW5nbGVDb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUlkXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLmNoaWxkcmVuLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAhPSBjb2wuY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVDb2w+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaGV2cm9uOiBjb2w/LmNoaWxkcmVuPy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8IS0tIERhdGEgR3JpZCBCb2R5IHN0YXJ0cyBoZXJlIC0tPlxuICAgICAgICAgIDwhLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+XG4gICAgICAgICAgPCEtLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAqbmdJZj1cIiFkYXRhU2V0Py5sZW5ndGggJiYgIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3JlY29yZC1ub3QtZm91bmQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgPjwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxkaXY+Tm8gUmVjb3JkIEZvdW5kPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHctMTAwIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBsb2FkaW5nLW92ZXJsYXlcIlxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkaW5nIHx8IGRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcbiAgICAgICAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibG9hZGVyXCI+PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keS13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuXCJcbiAgICAgICAgICAgICNtYWluU2Nyb2xsXG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uTWFpblNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJ2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIExFRlQgUElOTkVEIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgICAgICFncm91cGVkQ29sdW1ucy5sZW5ndGggPyBvcmlnaW5hbERhdGFTZXQubGVuZ3RoICogcm93SGVpZ2h0IDogMFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbY2xhc3MuaC0xMDBdPVwib3JpZ2luYWxEYXRhU2V0Lmxlbmd0aCA8IDhcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHkgbGVmdC1waW5uZWQtYm9keSB3LTEwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBoaWRkZW5cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwiaGFzTGVmdFBpbm5lZENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudC1ib3JkZXItcmlnaHRdPVwiIWhhc0xlZnRQaW5uZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibGVmdFBpbm5lZEJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbQHJvd0R5bmFtaWNdPVwicm93QW5pbWF0aW9uXCJcblxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogKHN0YXJ0SW5kZXggKyBpKSAlIDIgPT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogKHN0YXJ0SW5kZXggKyBpKSAlIDIgIT09IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xlZnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFsQW1vdW50Um93ICYmIG9yaWdpbmFsRGF0YVNldD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHsgX192aXJ0dWFsSW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdMZWZ0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENFTlRFUiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJoLTEwMFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjZW50ZXJQaW5uZWRIZWFkZXIuY2xpZW50V2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtYm9keSBjZW50ZXItc2Nyb2xsYWJsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmgtMTAwXT1cIm9yaWdpbmFsRGF0YVNldC5sZW5ndGggPCA4XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm92ZXJmbG93LXk6IGhpZGRlbjsgb3ZlcmZsb3cteDogYXV0b1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlWSgnICsgdHJhbnNsYXRlWSArICdweCknXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImJvZHlCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICNjZW50ZXJTY3JvbGxhYmxlQm9keVxuICAgICAgICAgICAgICAgIChzY3JvbGwpPVwib25DZW50ZXJCb2R5U2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5ib3hTaGFkb3ddPVwiaGFzTGVmdFBpbm5lZENvbHVtbnMgPyBsZWZ0UGlubmVkQm94c2hhZG93OiAnbm9uZSdcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgW0Byb3dEeW5hbWljXT1cInJvd0FuaW1hdGlvblwiICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWRhdGFTZXRMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdDZW50ZXJDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmVuOiAoc3RhcnRJbmRleCArIGkpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzT2RkOiAoc3RhcnRJbmRleCArIGkpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbEFtb3VudFJvdyAmJiBvcmlnaW5hbERhdGFTZXQ/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0NlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7IF9fdmlydHVhbEluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiBwcmV2aWV3Q2VudGVyQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUklHSFQgUElOTkVEIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInJpZ2h0LXBpbm5lZC1ib2R5LXdyYXBwZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cImhhc1JpZ2h0UGlubmVkQ29sdW1uc1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5oLTEwMF09XCJvcmlnaW5hbERhdGFTZXQubGVuZ3RoIDwgOFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCJcbiAgICAgICAgICAgICAgICBpc1Njcm9sbGJhclZpc2libGVcbiAgICAgICAgICAgICAgICAgID8gcmlnaHRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGggLSAxNVxuICAgICAgICAgICAgICAgICAgOiByaWdodFBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cInJpZ2h0UGlubmVkQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLWJvZHkgcmlnaHQtcGlubmVkLWJvZHkgdy0xMDAgaC0xMDBcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVZKCcgKyB0cmFuc2xhdGVZICsgJ3B4KSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5ib3hTaGFkb3ddPVwiaGFzUmlnaHRQaW5uZWRDb2x1bW5zID8gcmlnaHRQaW5uZWRCb3hzaGFkb3c6ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJyaWdodFBpbm5lZEJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbG9hZGluZyAmJiAhZGF0YVNldExvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtAcm93RHluYW1pY109XCJyb3dBbmltYXRpb25cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3cgb2YgdmlzaWJsZVJvd3M7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlJZFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm93Q2VsbDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IHByZXZpZXdSaWdodFBpbm5lZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2ZW46IChzdGFydEluZGV4ICsgaSkgJSAyID09PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNPZGQ6IChzdGFydEluZGV4ICsgaSkgJSAyICE9PSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxBbW91bnRSb3cgJiYgb3JpZ2luYWxEYXRhU2V0Py5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogeyBfX3ZpcnR1YWxJbmRleDogMCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uczogcHJldmlld1JpZ2h0UGlubmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZlbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc09kZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUb3RhbFJvdzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT1cInRvcDogYXV0bzsgbGVmdDogYXV0b1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZnVsbHNjcmVlbkltYWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjZHIuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiXG4gICAgICAgICAgICAgICAgZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC0gKGZvb3RlclJvd0hlaWdodCArIDEwMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZS1tb2RhbCBmdWxsLWltYWdlLW1vZGFsXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJmdWxsc2NyZWVuSW1hZ2VcIlxuICAgICAgICAgICAgICAgIGFsdD1cIkZ1bGxzY3JlZW4gSW1hZ2VcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRSb3dzLnNpemUgPiAwICYmIHNob3dUYXNrYmFyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0YXNrYmFyIHctMTAwXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvdHRvbS5weF09XCIwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLXJvd3MtYWN0aW9uLWJhclwiIFtAc2xpZGVVcF0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3RlZC1jb3VudFwiPlxuICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRSb3dzLnNpemUgfX0gc2VsZWN0ZWQgb2ZcbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlnPy5wYWdpbmF0aW9uUGFyYW1zPy50b3RhbEl0ZW1zXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgVG90YWxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1idXR0b25zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0YXNrYmFyQWN0aW9uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24/Lmhhc19wZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWJ0biB2ZXJpZmllZCBidG4ge3sgYWN0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblZlcmlmeUNsaWNrKGFjdGlvbj8uYWN0aW9uTmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGFjdGlvbj8uYWN0aW9uTmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza2JhckFjdGlvbnMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9PSB0YXNrYmFyQWN0aW9ucy5sZW5ndGggLSAxICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tiYXJBY3Rpb25zW2kgKyAxXT8uaGFzX3Blcm1pc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+fDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyU2VsZWN0aW9uU3RhdGUodGFibGVUeXBlKTtzZWxlY3RlZFJvd3MuY2xlYXIoKTtcIiBjbGFzcz1cImNsZWFyLWJ0biBtcy0yIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS14LWNpcmNsZVwiPjwvaT4gQ2xlYXIgU2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFZlcnRpY2FsIEZha2Ugc2Nyb2xsIEJhciAtLT5cbiAgICAgICAgICA8IS0tIDxkaXZcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25NYWluRmFrZVNjcm9sbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1zY3JvbGxiYXIgZmFrZS1zY3JvbGxiYXItdmVydGljYWwgZC1ub25lXCJcbiAgICAgICAgICAgIFtzdHlsZS5zY3JvbGxiYXJXaWR0aF09XCJ2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiXG4gICAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgJiYgc2hvd0ZpbHRlclJvd1xuICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogM1xuICAgICAgICAgICAgICAgIDogc2hvd0NvbHVtbnNHcm91cGluZyB8fCBzaG93RmlsdGVyUm93XG4gICAgICAgICAgICAgICAgPyBoZWFkZXJSb3dIZWlnaHQgKiAyXG4gICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJib2R5V3JhcHBlckhlaWdodFwiXG4gICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgICAgICAgICAgIHdpZHRoOiAxN3B4O1xuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBmMWYyZjM7XG4gICAgICAgICAgICAgIHotaW5kZXg6IDEwO1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0ICogZGF0YVNldExlbmd0aFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBIb3JpemludGFsIEZha2UgU2Nyb2xsYmFycyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAqbmdJZj1cImhhc1Njcm9sbCAmJiAhc2hvdWxkUmVzdG9yZVNjcm9sbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1ob3JpemludGFsLXNjcm9sbGJhclwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxlZnRQaW5uZWRIZWFkZXIub2Zmc2V0V2lkdGhcIlxuICAgICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy14OiBzY3JvbGxcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25DZW50ZXJCb2R5U2Nyb2xsKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYWtlLWhvcml6aW50YWwtc2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICNob3JpemludGFsRmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNlbnRlclBpbm5lZEhlYWRlci5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoIC0gMTBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbc3R5bGUuc2Nyb2xsYmFyV2lkdGhdPVwiaG9yaXppbnRhbFNjcm9sbGJhcldpZHRoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmFrZS1ob3JpemludGFsLXNjcm9sbGJhclwiXG4gICAgICAgICAgICAjZmFrZVNjcm9sbFxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteDogc2Nyb2xsXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2lkZSBNZW51IEltcGxlbWVudGVkIEhlcmUgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwic2hvd1NpZGVNZW51XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInNpZGVNZW51VmlzaWJsZSA/IDI4MCA6IDMwXCJcbiAgICAgICAgY2xhc3M9XCJyaWdodC1tZW51IGgtMTAwXCJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJzaWRlbWVudUJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1yb3ctcmV2ZXJzZVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDMwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItc3RhcnRdPVwic2lkZU1lbnVWaXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaWRlTWVudSgnY29scycpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJnLWZmZl09XCJcbiAgICAgICAgICAgICAgICBjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdjb2xzJyAmJiBzaWRlTWVudVZpc2libGVcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1iZWxvd109XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbnMtYnV0dG9uIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGUtbWVudWUtdGV4dFwiPkNvbHVtbnM8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTaWRlTWVudSgnZmlsdHJzJylcIlxuICAgICAgICAgICAgICBbY2xhc3MuYmctZmZmXT1cIlxuICAgICAgICAgICAgICAgIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycycgJiYgc2lkZU1lbnVWaXNpYmxlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYmVsb3ddPVwiXG4gICAgICAgICAgICAgICAgc2lkZU1lbnVWaXNpYmxlICYmIGN1cnJlbnRPcGVuZWRTaWRlTWVudWUgPT0gJ2ZpbHRycydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2x1bW5zLWJ1dHRvbiBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnVlLXRleHRcIj5GaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDBcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogc2lkZU1lbnVWaXNpYmxlID8gJzI1MHB4JyA6ICcnIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdjb2xzJyAmJiBzaWRlTWVudVZpc2libGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtblBhbm5lbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwhLS0gQ29sdW1uIEl0ZW1zIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tcGFuZWwtYm9keSBweC0zXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aHIgLz5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaWRlLW1lbnUtcm93LWdyb3Vwc1wiIHN0eWxlPVwiaGVpZ2h0OiAzMCVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaWRlTWVudVJvd0dyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbmVkU2lkZU1lbnVlID09ICdmaWx0cnMnICYmIHNpZGVNZW51VmlzaWJsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZUZpbHRlcnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImZvb3RlclJvd0hlaWdodFwiXG4gICAgICBjbGFzcz1cImJvcmRlci10b3BcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJmb290ZXJSb3dCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgKm5nSWY9XCJwYWdpbmF0aW9uQ29uZmlnXCJcbiAgICA+XG4gICAgICA8IS0tIFJvd3M6IDxzcGFuIGNsYXNzPVwiZnctNTAwIG1zLTFcIj57eyBkYXRhU2V0Lmxlbmd0aCB9fTwvc3Bhbj4gLS0+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWNvbnRhaW5lclwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZm9vdGVyUm93SGVpZ2h0XCJcbiAgICAgICAgW3N0eWxlLnBhZGRpbmcucHhdPVwiZm9vdGVyUGFkZGluZ1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXNpemVcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhZ2luYXRpb25Db25maWcubGltaXRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNpemUgb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cInNpemVcIj5cbiAgICAgICAgICAgICAge3sgc2l6ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIj4gcGVyIHBhZ2UgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvXCI+XG4gICAgICAgICAgUmVzdWx0czpcbiAgICAgICAgICB7eyAocGFnaW5hdGlvbkNvbmZpZy5wYWdlIC0gMSkgKiBwYWdpbmF0aW9uQ29uZmlnLmxpbWl0ICsgMSB9fS17e1xuICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5wYWdlICogcGFnaW5hdGlvbkNvbmZpZy5saW1pdCA8XG4gICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0c1xuICAgICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcucGFnZSAqIHBhZ2luYXRpb25Db25maWcubGltaXRcbiAgICAgICAgICAgICAgOiBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0c1xuICAgICAgICAgIH19XG4gICAgICAgICAgb2ZcbiAgICAgICAgICB7eyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUmVzdWx0cyB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1idXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb25Db25maWcucGFnZSAtIDEpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IDFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKAuVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZSBvZiB2aXNpYmxlUGFnZXNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlICE9PSAnLi4uJ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZShwYWdlKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicGFnZSA9PT0gcGFnaW5hdGlvbkNvbmZpZy5wYWdlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhZ2UgPT09ICcuLi4nXCI+Li4uPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QYWdlKHBhZ2luYXRpb25Db25maWcucGFnZSArIDEpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uQ29uZmlnLnBhZ2UgPT09IHBhZ2luYXRpb25Db25maWcudG90YWxSZXN1bHRzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICDigLpcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gSGVhZGVyIENlbGwgVGVtcGxhdGUgLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG48bmctdGVtcGxhdGVcbiAgI2hlYWRlckNlbGxcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtY29sdW1uSW5kZXg9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9ucz1cInNlY3Rpb25cIlxuICBsZXQtY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyPVwiY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyXCJcbj5cbiAgPGRpdj5cbiAgICA8IS0tIEdyb3VwIEhlYWRlciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGggPiAwOyBlbHNlIGZsYXRIZWFkZXJcIj5cbiAgICAgIDxkaXYgY2RrRHJvcGxpc3RHcm91cCBjbGFzcz1cImdyb3VwLWNvbHVtbi13cmFwcGVyXCI+XG4gICAgICAgIDwhLS0gUGFyZW50IEhlYWRlciAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvdWxkVGhlR3JvdXBIZWFkZXJTaG93KGNvbClcIlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZ3JvdXAtaGVhZGVyXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbc3R5bGUuZ3JpZENvbHVtbl09XCInc3BhbiAnICsgY29sLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgICAgICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiaGVhZGVyRm9udFdlaWdodFwiXG4gICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgIFtjbGFzcy5qdXN0aWZ5LWNvbnRlbnQtZW5kXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAxXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLWNvbnRlbnRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgW2NsYXNzLm1zLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNvbC5jaGlsZHJlbilcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblJlc2l6ZUdyb3VwKCRldmVudCwgY29sLCBwaW5uZWRSaWdodClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ2hpbGQgSGVhZGVycyBhbmQgRmlsdGVycyAtLT5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY29sLmNoaWxkcmVuXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3RTb3J0ZWQpPVwib25DaGlsZERyb3BsaXN0U29ydGVkKCRldmVudCwgc2VjdGlvbnMpXCJcbiAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uQ2hpbGREcm9wbGlzdERyb3BlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlxuICAgICAgICAgICAgc2hvd1Jvd3NHcm91cGluZyA/IFsncm93cy1ncm91cGluZy10b3AtY29udGFpbmVyJ10gOiBbXVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY2hpbGRcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBDaGlsZCBIZWFkZXIgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGQuaXNfdmlzaWJsZSAmJiAhY2hpbGRbJ2lzUm93R3JvdXBlZCddXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItY2VsbCBvbmUtcm93LWhlYWRlci1jZWxscyBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNoaWxkLmZpZWxkXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY2hpbGQud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImdyaWQtcm93OiAyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmlsdGVyLWFwcGxpZWQtb24tdGV4dF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZWRpdGFibGUtaGVhZGVyXT1cImNoaWxkPy5pc19lZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRmlsdGVyb25UaHJlZURvdHNDbGljayhjaGlsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGQuaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwicGlubmVkUmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hpbGQucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0aHJlZS1kb3RzIHAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5UaHJlZURvdHNNZW51KCRldmVudCwgY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IC01MCU7IHotaW5kZXg6IDIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LnB4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAtKCFjaGlsZD8ucGlubmVkID8gY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnQgOiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGhyZWVEb3RzRmlsdGVyT3BlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2hvd0ZpbHRlclJvdyB8fCBzaG93Q29sdW1uc0dyb3VwaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhlYWRlclJvd0hlaWdodCAqIDIgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBoZWFkZXJSb3dIZWlnaHQgLSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTWVudTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6IGNoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ29sSW5kZXg6IGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVzaXplQ29sdW1uKCRldmVudCwgY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gRmlsdGVyIENlbGwgLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmllbGRdPVwiY2hpbGQuZmllbGRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjaGlsZC53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJncmlkLXJvdzogM1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGlsZC5maWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJvbkZpbHRlckNoYW5nZShjaGlsZCk7IGFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNoaWxkPy50eXBlID09ICdpbWFnZScgfHwgY2hpbGQ/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtc2VhcmNoLWlucHV0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkPy50eXBlID09ICdkcm9wZG93bicgfHwgY2hpbGQ/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjaGlsZD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgb3BlbkZpbHRlckZyb21EaXNhYmxlZFNlYXJjaGVkSW5wdXQoY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRmlsdGVyKGNoaWxkKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZF09XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJjaGlsZD8udHlwZSA9PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2ZpbHRlci0yLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA3cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjNzQ4NmZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAgMTYzIDIzMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3BhblxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZpbHRlci1yb3ctZmlsdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGw/LmZpZWxkID09IGNoaWxkPy5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogOTlcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZD8ucGlubmVkID8gMCA6IC1jZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNZW51OyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3XG4gICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwicC0yIGJvcmRlciBkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAhZHJhZ2dpbmdJbkdyb3VwQXJlYSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2hpbGQuaXNfZ3JvdXBhYmxlICYmIGRyYWdnaW5nSW5Hcm91cEFyZWEpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiAhY2hpbGQuaXNfZ3JvdXBhYmxlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Jhbi5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgY2hpbGQuaGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgY2hpbGRIZWFkZXJQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkRnJvbU5lc3RlZFBsYWNlaG9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYSAmJiBjaGlsZD8uaXNfZ3JvdXBhYmxlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiBtcy0yXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICB0b3BHcm91cGluZ1Jvd1BsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICBzaG93Q2hldnJvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgcGlubmVkUmlnaHQ6IHBpbm5lZFJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBGbGF0IEhlYWRlciB8fCBTaW5nbGUgSGVhZGVyIENlbGwtLT5cbiAgICA8bmctdGVtcGxhdGUgI2ZsYXRIZWFkZXI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZ3JvdXAtY29sdW1uLXdyYXBwZXJcIlxuICAgICAgICAqbmdJZj1cImNvbC5pc192aXNpYmxlICYmICFjb2xbJ2lzUm93R3JvdXBlZCddXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBGdWxsLWhlaWdodCBIZWFkZXIgQ2VsbCAoc3BhbnMgMiByb3dzIHZpc3VhbGx5KSAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgb25lLXJvdy1oZWFkZXItY2VsbHNcIlxuICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICAgICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJcbiAgICAgICAgICAgIHNob3dDb2x1bW5zR3JvdXBpbmcgPyBoZWFkZXJSb3dIZWlnaHQgKiAyIDogaGVhZGVyUm93SGVpZ2h0XG4gICAgICAgICAgXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgICAgc2hvd0NvbHVtbnNHcm91cGluZyA/IGhlYWRlclJvd0hlaWdodCAqIDIgOiBoZWFkZXJSb3dIZWlnaHRcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtzdHlsZS5mb250V2VpZ2h0XT1cImhlYWRlckZvbnRXZWlnaHRcIlxuICAgICAgICAgIHN0eWxlPVwiZ3JpZC1yb3c6IDEgLyBzcGFuIDJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgaC0xMDAgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmVkaXRhYmxlLWhlYWRlcl09XCJjb2w/LmlzX2VkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5maWx0ZXItYXBwbGllZC1vbi10ZXh0XT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICBvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5GaWx0ZXJvblRocmVlRG90c0NsaWNrKGNvbClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBkLWZsZXhcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tZS0yXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1ibHVlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLm1lLTJdPVwiY29sLm9yZGVyX2J5XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRpbmdDb25maWc/LmZpZWxkID09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSBBc2NlbmRpbmcgU29ydCBJY29uIC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PSAnYXNjJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc29ydC1hc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzb3J0RGVzYyhjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYydcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBEZXNjZW5kaW5nIFNvcnQgSWNvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydGluZ0NvbmZpZz8ub3JkZXJfYnkgPT0gJ2Rlc2MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWRlc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzb3J0QXNjKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYydcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRocmVlLWRvdHMgcC0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgb3BlblRocmVlRG90c01lbnUoJGV2ZW50LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgICBpc1RocmVlRG90c0ZpbHRlck9wZW4gPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvaWNvbnMvdGhyZWUtZG90cy12ZXJ0aWNhbC5zdmcnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBPbmx5IHNob3cgbWVudSBpZiB0aGlzIGNvbHVtbiBpcyBhY3RpdmUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZUNvbCA9PT0gY29sXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAtNTAlOyB6LWluZGV4OiAyMVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgLSghY29sPy5waW5uZWQgPyBjZW50ZXJQaW5uZWRIZWFkZXIuc2Nyb2xsTGVmdCA6IDApXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJcbiAgICAgICAgICAgICAgICAgICAgaXNUaHJlZURvdHNGaWx0ZXJPcGVuXG4gICAgICAgICAgICAgICAgICAgICAgPyBzaG93RmlsdGVyUm93IHx8IHNob3dDb2x1bW5zR3JvdXBpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaGVhZGVyUm93SGVpZ2h0ICogMiAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGhlYWRlclJvd0hlaWdodCAtIDEwXG4gICAgICAgICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ29sSW5kZXg6IDBcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LTEwMF09XCJjb2wucGlubmVkID09ICdyaWdodCdcIlxuICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cImF1dG9zaXplQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblJlc2l6ZUNvbHVtbigkZXZlbnQsIGNvbClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRmlsdGVyIENlbGwgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci1jZWxsIGZpbHRlci1jZWxsXCJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgICAgICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGNvbClcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1zZWFyY2gtaW5wdXRdPVwiXG4gICAgICAgICAgICAgIGNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGVJbkZpbHRlclJvd1NlYXJjaCgkZXZlbnQsIGNvbClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5GaWx0ZXJGcm9tRGlzYWJsZWRTZWFyY2hlZElucHV0KGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuRmlsdGVyKGNvbClcIlxuICAgICAgICAgICAgW2NsYXNzLmZpbHRlci1hcHBsaWVkXT1cImlzRmlsdGVyQXBwbGllZE9uQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiY29sPy50eXBlID09ICdpbWFnZSdcIlxuICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZmlsdGVyLTIuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0ZpbHRlckFwcGxpZWRPbkNvbHVtbihjb2wpXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICB3aWR0aDogN3B4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogN3B4O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggM3B4ICM3NDg2ZmY7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAgMTYzIDIzMyk7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiA0cHg7XG4gICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtYmxvY2tcIlxuICAgICAgICAgICAgPjwvc3BhblxuICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZpbHRlci1yb3ctZmlsdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVGaWx0ZXJDZWxsID09PSBjb2xcIlxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDEwMCU7IHJpZ2h0OiAwOyB6LWluZGV4OiA5OVwiXG4gICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJjb2w/LnBpbm5lZCA/IDAgOiAtY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbExlZnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJNZW51OyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIEJvZHkgQ2VsbCBUZW1wbGF0ZSAtLT5cbjwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XG48IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxuXG48bmctdGVtcGxhdGVcbiAgI3Jvd0NlbGxcbiAgbGV0LXJvd1xuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtaXNFdmVuPVwiaXNFdmVuXCJcbiAgbGV0LWlzT2RkPVwiaXNPZGRcIlxuICBsZXQtaXNMZWZ0U2VjdGlvbj1cImlzTGVmdFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgbGV0LWlzVG90YWxSb3c9XCJpc1RvdGFsUm93XCJcbj5cbiAgPCEtLSBDaGVjayBpZiByb3cgaXMgYSBncm91cCAtLT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBSb3dUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgZGVwdGg6IDAgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNncm91cFJvd1RlbXBsYXRlIGxldC1yb3cgbGV0LWRlcHRoPVwiZGVwdGhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmlzR3JvdXA7IGVsc2UgcmVndWxhclJvd1wiPlxuICAgICAgPCEtLSBHcm91cCBIZWFkZXIgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZ3JvdXAtaGVhZGVyLXJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuYm9yZGVyLWJlbG93XT1cInNlY3Rpb24gIT09ICdjZW50ZXInXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgIHNlY3Rpb24gPT09ICdjZW50ZXInXG4gICAgICAgICAgICA/IChjZW50ZXJTY3JvbGxhYmxlQm9keT8uc2Nyb2xsV2lkdGggPz8gMCkgKyAncHgnXG4gICAgICAgICAgICA6ICcxMDAlJ1xuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzZWN0aW9uID09ICdsZWZ0J1wiXG4gICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXhcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJsZWZ0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMVwiXG4gICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VyaWFsTnVtYmVyXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDUwcHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMTAwIGJvcmRlci1yaWdodCBqdXN0aWZ5LWNvbnRlbnQtZW5kIHBlLTIgcy1ub1wiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIjU1XCJcbiAgICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXG4gICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93LXJpZ2h0LnN2ZyksIGF1dG8nXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJvd01vdXNlRG93bihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJvblJvd01vdXNlT3Zlcihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImNoZWNrYm94ZXNDb2xvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZ2V0U3RhcnRJbmRleCgpICsgKHJvdy5fX3ZpcnR1YWxJbmRleCAtIDEpIHx8IFwiXCIgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hlc1wiXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA1MHB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwIGJvcmRlci1yaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICAgICAgW2NsYXNzLmxlZnQtc2VsZWN0aW9uLWJvcmRlcl09XCJcbiAgICAgICAgICAgICAgcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjaGVja2JveGVzQ29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHhcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRHcm91cENoZWNrZWRTdGF0ZShyb3cpID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0R3JvdXBDaGVja2VkU3RhdGUocm93KSA9PT0gdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RHcm91cFJvdygkZXZlbnQsIHJvdylcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzZWN0aW9uID09ICdjZW50ZXInXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwiY2VudGVyUGlubmVkSGVhZGVyLnNjcm9sbFdpZHRoXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcHMtMiBoLTEwMCBib3JkZXItYmVsb3dcIlxuICAgICAgICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgICAgW2NsYXNzLmxhc3Qtcm93LXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwiZGVwdGggPiAwID8gZGVwdGggKiAzMCA6IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZChyb3cpXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gYWxpZ24taXRlbXMtY2VudGVyIGQtZmxleFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHJvdy5pc0V4cGFuZFxuICAgICAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tZG93bi5zdmcnXG4gICAgICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmcgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZChyb3cpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICB7eyByb3cuZ3JvdXBWYWx1ZSB9fSAoe3sgY291bnRMZWFmUm93cyhyb3cpIH19KVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cInNlY3Rpb24gPT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJpZ2h0UGlubmVkSGVhZGVyLm9mZnNldFdpZHRoXCJcbiAgICAgICAgICBbY2xhc3Mucm93LXNlbGVjdGVkXT1cInJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVwiXG4gICAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgID48L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFJlY3Vyc2l2ZSBDaGlsZHJlbiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jaGlsZHJlblwiICpuZ0lmPVwicm93LmlzRXhwYW5kXCIgW0BzbGlkZVRvZ2dsZV0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2Ygcm93LmNoaWxkcmVuOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkLmlzR3JvdXA7IGVsc2UgZGF0YVJvd1wiPlxuICAgICAgICAgICAgPCEtLSBSZWN1cnNpdmUgY2FsbCBmb3IgbmVzdGVkIGdyb3VwIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGdyb3VwUm93VGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGNoaWxkLCBkZXB0aDogZGVwdGggKyAxIH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGF0YVJvdz5cbiAgICAgICAgICAgIDwhLS0gUmVndWxhciBkYXRhIHJvdyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICByb3dDZWxsO1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY2hpbGQsXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgaXNFdmVuOiBpICUgMiA9PT0gMCxcbiAgICAgICAgICAgICAgICAgIGlzT2RkOiBpICUgMiAhPT0gMCxcbiAgICAgICAgICAgICAgICAgIGlzTGVmdDogaXNMZWZ0U2VjdGlvbixcbiAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICBpc1RvdGFsUm93OiBpc1RvdGFsUm93XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBSZWd1bGFyIHJvdyAobm90IGEgZ3JvdXApIC0tPlxuICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJSb3c+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJkLWZsZXhcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGN1cnNvci1wb2ludGVyIGJvcmRlci1iZWxvd1wiXG4gICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAzMHB4OyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNlY3Rpb24gPT0gJ2NlbnRlcicgJiYgKGdyaWRUeXBlID09PSAnQXNzZXRzJyB8fCBncmlkVHlwZSA9PT0gJ1Rhc2tzJylcbiAgICAgICAgXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmZpcnN0LXJvdy1zZWxlY3RlZF09XCJmaXJzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZXRhaWxSb3dFeHBhbmQocm93KVwiXG4gICAgICAgICAgKm5nSWY9XCJyb3c/LmRldGFpbD8ucmVzdWx0Py5sZW5ndGggfHwgZ3JpZFR5cGUgPT09ICdUYXNrcydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGZpbHRlci1pY29uLXdyYXBwZXJcIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBpc0RldGFpbHNFeHBhbmRlZChyb3cpXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cIlxuICAgICAgICAgIHNlY3Rpb24gPT0gJ2NlbnRlcicgJiYgZ3JvdXBlZENvbHVtbnM/Lmxlbmd0aCA/IGdyb3VwQm94UGFkZGluZyA6IDBcbiAgICAgICAgXCJcbiAgICAgICAgW2NsYXNzLnJvdy1zZWxlY3RlZF09XCJyb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcIlxuICAgICAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdy5fX3ZpcnR1YWxJbmRleFwiXG4gICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1yb3cgaC0xMDBcIlxuICAgICAgICBbY2xhc3MuZXZlbi1yb3ddPVwiaXNFdmVuXCJcbiAgICAgICAgW2NsYXNzLm9kZC1yb3ddPVwiaXNPZGRcIlxuICAgICAgICBbY2xhc3MuaG92ZXJlZC1yb3ddPVwiaG92ZXJlZFJvd0lkID09PSAocm93Ll9pZCB8fCByb3cuaWQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Sb3dIb3Zlcihyb3cpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dMZWF2ZSgpXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIChjb250ZXh0bWVudSk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50LCByb3cpXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1yb3dcIlxuICAgICAgICBbY2xhc3MuZXZlbi1yb3ddPVwiaXNFdmVuXCJcbiAgICAgICAgW2NsYXNzLm9kZC1yb3ddPVwiaXNPZGRcIlxuICAgICAgICBbY2xhc3MuaG92ZXJlZC1yb3ddPVwiaG92ZXJlZFJvd0lkID09PSAocm93Ll9pZCB8fCByb3cuaWQpXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Sb3dIb3Zlcihyb3cpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dMZWF2ZSgpXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0QmFja2dyb3VuZENvbG9yKHJvdywgaXNFdmVuLCBzZWN0aW9uKVxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgY2xhc3M9XCJzZWxlY3QtYWxsLWNoZWNrYm94LWNlbGwganVzdGlmeS1jb250ZW50LWVuZCBwZS0yIHMtbm9cIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCI1NVwiXG4gICAgICAgICAgKm5nSWY9XCJpc0xlZnRTZWN0aW9uICYmIHNob3dTZXJpYWxOdW1iZXJcIlxuICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwiYm9keVRleHRGb250c1NpemVcIlxuICAgICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiXG4gICAgICAgICAgICAndXJsKCcgK1xuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2Fycm93LXJpZ2h0LnN2ZyksIGF1dG8nXG4gICAgICAgICAgXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUm93TW91c2VEb3duKHJvdy5fX3ZpcnR1YWxJbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgKG1vdXNlb3Zlcik9XCJvblJvd01vdXNlT3Zlcihyb3cuX192aXJ0dWFsSW5kZXgsICRldmVudClcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjaGVja2JveGVzQ29sb3JcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0U3RhcnRJbmRleCgpICsgKHJvdy5fX3ZpcnR1YWxJbmRleCAtIDEpIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcbiAgICAgICAgICAgIHJvd1NlbGVjdGVkSW5kZXhlcy5oYXMocm93Ll9fdmlydHVhbEluZGV4KVxuICAgICAgICAgICAgICA/IHNlbGVjdGVkUm93c0JhY2tncm91bmRDb2xvclxuICAgICAgICAgICAgICA6IGNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveC1jZWxsXCJcbiAgICAgICAgICAqbmdJZj1cImlzTGVmdFNlY3Rpb24gJiYgc2hvd0NoZWNrYm94ZXNcIlxuICAgICAgICAgIFtjbGFzcy5sZWZ0LXNlbGVjdGlvbi1ib3JkZXJdPVwiXG4gICAgICAgICAgICByb3dTZWxlY3RlZEluZGV4ZXMuaGFzKHJvdy5fX3ZpcnR1YWxJbmRleClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5maXJzdC1yb3ctc2VsZWN0ZWRdPVwiZmlyc3RTZWxlY3RlZFJvdyA9PT0gcm93Ll9fdmlydHVhbEluZGV4XCJcbiAgICAgICAgICBbY2xhc3MubGFzdC1yb3ctc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkUm93ID09PSByb3cuX192aXJ0dWFsSW5kZXhcIlxuICAgICAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMVwiXG4gICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAqbmdJZj1cImhhc0FueVZpc2libGVDb2x1bW5cIlxuICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdylcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUmVuZGVyIGFsbCBjb2x1bW5zIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgY29sIG9mIGNvbHVtbnM7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGQ7XG4gICAgICAgICAgICBsZXQgY29sSW5kZXggPSBpbmRleFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNoaWxkcmVuPy5sZW5ndGggPiAwOyBlbHNlIGZsYXRDb2x1bW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGQ7XG4gICAgICAgICAgICAgICAgbGV0IHN1YkNvbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkPy5pc192aXNpYmxlICYmICFjaGlsZD8uaXNSb3dHcm91cGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sOiBjaGlsZCxcbiAgICAgICAgICAgICAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIHN1YkNvbEluZGV4OiBzdWJDb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZsYXRDb2x1bW4+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5pc192aXNpYmxlICYmICFjb2w/LmlzUm93R3JvdXBlZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGNvbEluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ViQ29sSW5kZXg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IHNlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGlzVG90YWxSb3c6IGlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgW0BzbGlkZVRvZ2dsZV1cbiAgICAgICpuZ0lmPVwic2VjdGlvbiA9PT0gJ2xlZnQnICYmIGlzRGV0YWlsc0V4cGFuZGVkKHJvdylcIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tZGV0YWlsc1wiXG4gICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDM1MHB4OyBvdmVyZmxvdzogaGlkZGVuXCJcbiAgICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiaGFzSG9yaXpvbnRhbFNjcm9sbCA/IDMzOSA6IDM0MVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGxlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyO1xuICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBbQHNsaWRlVG9nZ2xlXVxuICAgICAgKm5nSWY9XCJzZWN0aW9uID09PSAnY2VudGVyJyAmJiBpc0RldGFpbHNFeHBhbmRlZChyb3cpXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWRldGFpbHMgY2VudGVyLXNlY3Rpb25cIlxuICAgICAgc3R5bGU9XCJcbiAgICAgICAgbWF4LWhlaWdodDogMzUwcHg7XG4gICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgICAgXCJcbiAgICAgICNuZXN0ZWRUYWJsZVxuICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICBoYXNSaWdodFBpbm5lZENvbHVtbnNcbiAgICAgICAgICA/ICcxMDAlJ1xuICAgICAgICAgIDogaGFzVmVydGljYWxTY3JvbGxcbiAgICAgICAgICA/ICdjYWxjKDEwMCUgLSAxMnB4KSdcbiAgICAgICAgICA6ICcxMDAlJ1xuICAgICAgXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibmVzdGVkVGFibGVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JpZFR5cGUgPT0gJ1Rhc2tzJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHRhc2tNYW5hZ2VtZW50VGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7IHRhc2tEZXRhaWxzOiByb3cgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgW0BzbGlkZVRvZ2dsZV1cbiAgICAgICpuZ0lmPVwic2VjdGlvbiA9PT0gJ3JpZ2h0JyAmJiBpc0RldGFpbHNFeHBhbmRlZChyb3cpXCJcbiAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWRldGFpbHNcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzNTBweDsgb3ZlcmZsb3c6IGhpZGRlblwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImhhc0hvcml6b250YWxTY3JvbGwgPyAzMzkgOiAzNDFcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBsZWZ0UmlnaHROZXN0ZWRQbGFjZWhvbGRlcjtcbiAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBBY3R1YWwgQ2VsbCBpcyBIZXJlIC0tPlxuPG5nLXRlbXBsYXRlXG4gICNjZWxsVGVtcGxhdGVcbiAgbGV0LWNvbD1cImNvbFwiXG4gIGxldC1yb3c9XCJyb3dcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtc3ViQ29sSW5kZXg9XCJzdWJDb2xJbmRleFwiXG4gIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJcbiAgbGV0LWNvbEluZGV4PVwiY29sSW5kZXhcIlxuICBsZXQtaXNUb3RhbFJvdz1cImlzVG90YWxSb3dcIlxuPlxuICA8ZGl2XG4gICAgI2NlbGxDb250YWluZXJcbiAgICAoY2xpY2spPVwiXG4gICAgICBlZGl0aW5nS2V5ID0gJyc7IHNldEFjdGl2ZUNlbGwocm93LCBjb2wpOyBjb2xsYXBzZUFsbEV4cGFuZGVkQ2VsbHMoKVxuICAgIFwiXG4gICAgW3N0eWxlLmZvbnRXZWlnaHRdPVwiYm9keUZvbnRXZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBjbGFzcz1cImNlbGwgb3ZlcmZsb3ctdmlzaWJsZSBwb3NpdGlvbi1yZWxhdGl2ZSBkYXRhLWdyaWQtY2VsbFwiXG4gICAgW2F0dHIuZmllbGRdPVwiY29sLmZpZWxkXCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5hY3RpdmUtY2VsbF09XCJcbiAgICAgIGlzQWN0aXZlQ2VsbChyb3csIGNvbCkgJiYgIWlzRWRpdGluZyhyb3csIGNvbCkgJiYgc2VsZWN0ZWRLZXlzLnNpemUgPT0gMVxuICAgIFwiXG4gICAgKGRibGNsaWNrKT1cIlxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlbmFibGVFZGl0KHJvdywgY29sLCBmYWxzZSwgY2VsbENvbnRhaW5lcilcbiAgICBcIlxuICAgIFtjbGFzcy5yb3ctc2VsZWN0ZWRdPVwicm93U2VsZWN0ZWRJbmRleGVzLmhhcyhyb3cuX192aXJ0dWFsSW5kZXgpXCJcbiAgICBbY2xhc3MuZmlyc3Qtcm93LXNlbGVjdGVkXT1cImZpcnN0U2VsZWN0ZWRSb3cgPT09IHJvdz8uX192aXJ0dWFsSW5kZXhcIlxuICAgIFtjbGFzcy5sYXN0LXJvdy1zZWxlY3RlZF09XCJsYXN0U2VsZWN0ZWRSb3cgPT09IHJvdz8uX192aXJ0dWFsSW5kZXhcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBlbmFibGVFZGl0KHJvdywgY29sKVwiXG4gICAgKG1vdXNlZG93bik9XCJcbiAgICAgIHN0YXJ0U2VsZWN0aW9uKFxuICAgICAgICByb3cuX192aXJ0dWFsSW5kZXgsXG4gICAgICAgIGNvbEluZGV4LFxuICAgICAgICBzdWJDb2xJbmRleCA/PyAwLFxuICAgICAgICBjb2wuZmllbGQsXG4gICAgICAgICRldmVudCxcbiAgICAgICAgc2VjdGlvblxuICAgICAgKVxuICAgIFwiXG4gICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICBleHRlbmRTZWxlY3Rpb24oXG4gICAgICAgIHJvdy5fX3ZpcnR1YWxJbmRleCxcbiAgICAgICAgY29sSW5kZXgsXG4gICAgICAgIHN1YkNvbEluZGV4ID8/IDAsXG4gICAgICAgIGNvbC5maWVsZCxcbiAgICAgICAgJGV2ZW50LFxuICAgICAgICBzZWN0aW9uXG4gICAgICApXG4gICAgXCJcbiAgICAobW91c2V1cCk9XCJlbmRTZWxlY3Rpb24oKVwiXG4gICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwiXG4gICAgICBpc1NlbGVjdGVkKFxuICAgICAgICByb3cuX192aXJ0dWFsSW5kZXgsXG4gICAgICAgIGNvbEluZGV4LFxuICAgICAgICBzdWJDb2xJbmRleCA/PyAwLFxuICAgICAgICBjb2wuZmllbGQsXG4gICAgICAgIHNlY3Rpb25cbiAgICAgIClcbiAgICBcIlxuICAgIFtjbGFzcy50b3AtYm9yZGVyXT1cIlxuICAgICAgaXNUb3BCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MuYm90dG9tLWJvcmRlcl09XCJcbiAgICAgIGlzQm90dG9tQm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmxlZnQtYm9yZGVyXT1cIlxuICAgICAgaXNMZWZ0Qm9yZGVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLnJpZ2h0LWJvcmRlcl09XCJcbiAgICAgIGlzUmlnaHRCb3JkZXIocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXgsIHNlY3Rpb24pXG4gICAgXCJcbiAgICBbY2xhc3MudG9wLWxlZnQtY29ybmVyXT1cIlxuICAgICAgaXNUb3BMZWZ0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLnRvcC1yaWdodC1jb3JuZXJdPVwiXG4gICAgICBpc1RvcFJpZ2h0Q29ybmVyKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsIHN1YkNvbEluZGV4LCBzZWN0aW9uKVxuICAgIFwiXG4gICAgW2NsYXNzLmJvdHRvbS1sZWZ0LWNvcm5lcl09XCJcbiAgICAgIGlzQm90dG9tTGVmdENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICAgIFtjbGFzcy5ib3R0b20tcmlnaHQtY29ybmVyXT1cIlxuICAgICAgaXNCb3R0b21SaWdodENvcm5lcihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCwgc2VjdGlvbilcbiAgICBcIlxuICA+XG4gICAgPCEtLSAgKG1vdXNlZG93bik9XCJzdGFydFNlbGVjdGlvbihyb3cuX192aXJ0dWFsSW5kZXgsIGNvbEluZGV4LCBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQsICRldmVudClcIlxuICAobW91c2VlbnRlcik9XCJleHRlbmRTZWxlY3Rpb24ocm93Ll9fdmlydHVhbEluZGV4LCBjb2xJbmRleCwgc3ViQ29sSW5kZXggPz8gMCwgY29sLmZpZWxkLCAkZXZlbnQpXCJcbiAgKG1vdXNldXApPVwiZW5kU2VsZWN0aW9uKClcIlxuICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc1NlbGVjdGVkKHJvdy5fX3ZpcnR1YWxJbmRleCwgY29sSW5kZXgsICBzdWJDb2xJbmRleCA/PyAwLCBjb2wuZmllbGQpXCIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ0YWJsZS1jZWxsXCJcbiAgICAgIFtjbGFzcy5hY3RpdmUtZm9yLWVkaXRpbmddPVwiXG4gICAgICAgIGlzRWRpdGluZyhyb3csIGNvbCkgJiZcbiAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA8PSA1MCB8fCBjb2wudHlwZSA9PSAnaW1hZ2UnKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGlzRWRpdGluZyhyb3csIGNvbCkgJiZcbiAgICAgICAgICAgIChnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGNvbC50eXBlID09ICdpbWFnZScgfHxcbiAgICAgICAgICAgICAgKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKT8ubGVuZ3RoIDw9IDUwICYmXG4gICAgICAgICAgICAgICAgIWV4cGFuZGVkQ2VsbHMuc2l6ZSkpO1xuICAgICAgICAgIGVsc2Ugdmlld01vZGVcbiAgICAgICAgXCJcbiAgICAgID5cblxuICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2VsbEVkaXRvcjsgZWxzZSBidWlsdEluRWRpdG9yc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW2NlbGxFZGl0b3JdPVwiY29sLmNlbGxFZGl0b3JcIlxuICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgW2NvbERhdGFdPVwiY29sXCJcbiAgICAgICAgICAgICAgICBbY2VsbFZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgKGVkaXRvckV2ZW50KT1cImZpbmlzaEVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjYnVpbHRJbkVkaXRvcnM+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbD8udHlwZVwiPlxuICAgICAgICAgIDwhLS0gVGV4dCBJbnB1dCAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIlxuICAgICAgICAgICAgI2RhdGVJbnB1dD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGRhdGVJbnB1dClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZGF0ZUlucHV0LmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgZGF0ZUlucHV0KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDwhLS0gTnVtYmVyIElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAjbnVtYmVySW5wdXQ9XCJuZ01vZGVsXCJcbiAgICAgICAgICAgICNudW1iZXJSZWZcbiAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhbGxvd09ubHlOdW1iZXJzKCRldmVudClcIlxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgbnVtYmVySW5wdXQpXCJcbiAgICAgICAgICAgIGF1dG9mb2N1c1xuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYmx1cklucHV0KCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogbnVtYmVySW5wdXQuaW52YWxpZCB8fCAhaXNWYWx1ZVZhbGlkKHJvdywgY29sLCBudW1iZXJJbnB1dClcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIERhdGUgSW5wdXQgLS0+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDhcIlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgZGF0ZUlucHV0KVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdNb2RlbFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IGRhdGVJbnB1dC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGRhdGVJbnB1dClcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8IS0tIEltYWdlIFVwbG9hZCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSA4XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudCwgcm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICBoaWRkZW5cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgICBbc3JjXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICAgIGFsdD1cInByZXZpZXdcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiMzJcIlxuICAgICAgICAgICAgICBzdHlsZT1cIm9iamVjdC1maXQ6IGNvdmVyOyBib3JkZXItcmFkaXVzOiA0cHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgPCEtLSBuZy1zZWxlY3QgbGlrZSBkcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIHctMTAwXCJcbiAgICAgICAgICAgIChibHVyKT1cImRpc2FibGVFZGl0KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIHRleHQtc3RhcnQgdy0xMDAgdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+IFNlbGVjdCBvcHRpb25zLi4uIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBNZW51IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgdy0xMDAgcC0wIGNlbGwtZWRpdGluZy1kcm9wZG93bi1tZW51IHJvdW5kZWQtM1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5zaG93XT1cImlzRWRpdGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMSBlZGl0aW5nLWRyb3Bkb3duLXNlYXJjaC1pbnB1dFwiICpuZ0lmPVwiY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCA+IDVcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbkRyb3Bkb3duU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjM1XCIgXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi12aWV3cG9ydFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoY29sLmNvbHVtbl9kcm9wZG93bl92YWx1ZSB8IGZpbHRlcjogZWRpdGluRHJvcGRvd25TZWFyY2ggOiAndmFsdWUnKSBhcyBmaWx0ZXJlZE9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gSXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvbj8udmFsdWUgfHwgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpID09IG9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXROZXN0ZWRWYWx1ZShyb3csIGNvbCwgb3B0aW9uLCB0cnVlKTsgZWRpdGluZ0tleSA9IG51bGxcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cImNvbC5maWVsZCArICctJyArIChvcHRpb24udmFsdWUgfHwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gbm8gZmlsdGVyZWQgcmVzdWx0cyAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIEZvciBBcnJheSB0eXBlIHZhbHVlcyAtLT5cblxuICAgICAgICAgIDwhLS0gTVVMVEkgU0VMRUNUIChBUlJBWSkgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhcnJheSdcIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93biB3LTEwMFwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25BcnJheUJsdXIocm93LCBjb2wpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImNvbW1pdEFycmF5KHJvdywgY29sKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSB0ZXh0LXN0YXJ0IHctMTAwIHRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgIGRhdGEtYnMtZGlzcGxheT1cInN0YXRpY1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRBcnJheVRlbXAocm93LCBjb2wpLmxlbmd0aDsgZWxzZSBhcnJheVBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5QXJyYXlMYWJlbHMocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FycmF5UGxhY2Vob2xkZXI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IG9wdGlvbnMuLi5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIE1lbnUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSB3LTEwMCBwLTAgY2VsbC1lZGl0aW5nLWRyb3Bkb3duLW1lbnUgcm91bmRlZC0zXCIgW2NsYXNzLmludmlzaWJsZV09XCIhbWVudVJlYWR5XCIgW2NsYXNzLnNob3ddPVwiaXNFZGl0aW5nKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPiA1XCIgY2xhc3M9XCJweC0yIHB5LTEgYXJyYXktc2VhcmNoLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5Ecm9wZG93blNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiMzVcIiBzdHlsZT1cImhlaWdodDogMTIwcHhcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGNvbC5jb2x1bW5fZHJvcGRvd25fdmFsdWUgfCBmaWx0ZXI6IGVkaXRpbkRyb3Bkb3duU2VhcmNoIDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gcHgtMiBweS0xIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbS0wIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQXJyYXlTZWxlY3RlZChyb3csIGNvbCwgb3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBcnJheVRlbXAocm93LCBjb2wsIG9wdGlvbik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY29tbWl0QXJyYXkocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IG1heC13aWR0aDogMTZweDsgbWF4LWhlaWdodDogMTZweFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbj8udmFsdWUgfHwgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHdoZW4gZmlsdGVyZWQgbGlzdCBpcyBlbXB0eSAtLT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnM/Lmxlbmd0aFwiIGNsYXNzPVwicHgtMiBweS0xIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj5ObyBSZWNvcmQgRm91bmQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidlbWFpbCdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgICAgICNlbWFpbE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjZW1haWxJbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIG5hbWU9XCJ7eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgcGF0dGVybj1cIl5bYS16QS1aMC05Ll8lKy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsfSRcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIGVtYWlsTW9kZWwpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImJsdXJJbnB1dCgkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogZW1haWxNb2RlbC5pbnZhbGlkIHx8ICFpc1ZhbHVlVmFsaWQocm93LCBjb2wsIGVtYWlsTW9kZWwpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDwhLS0gRGVmYXVsdCBmYWxsYmFjayAtLT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICpuZ1N3aXRjaERlZmF1bHRcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMFwiXG4gICAgICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgICAgICAjdGV4dElucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJibHVySW5wdXQoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZClcIlxuICAgICAgICAgICAgbmFtZT1cInt7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAoYmx1cik9XCJkaXNhYmxlRWRpdChyb3csIGNvbCwgdGV4dE1vZGVsKVwiXG4gICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogdGV4dE1vZGVsLmludmFsaWQgfHwgIWlzVmFsdWVWYWxpZChyb3csIGNvbCwgdGV4dE1vZGVsKVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBEaXNwbGF5IG1vZGUgLS0+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZpZXdNb2RlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzZXMoY29sLCBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRmllbGQgaWNvbiAoZm9yIFRhc2tzIGdyaWQpIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiZ3JpZFR5cGUgPT09ICdUYXNrcycgJiYgaWNvbk1hcFtjb2wuZmllbGRdICYmICFpc1RvdGFsUm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIG1lLTJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiaWNvbk1hcFtjb2wuZmllbGRdKHJvdywgY29sKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSDinIUgQ3VzdG9tIGNlbGwgcmVuZGVyZXIgc3VwcG9ydCAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmNlbGxSZW5kZXJlciAmJiAhaXNUb3RhbFJvdzsgZWxzZSBkZWZhdWx0Q2VsbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbY2VsbFJlbmRlckluaXRdPVwiY29sLmNlbGxSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtyb3dEYXRhXT1cInJvd1wiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIFtjZWxsVmFsdWVdPVwiZ2V0TmVzdGVkVmFsdWUocm93LCBjb2w/LmZpZWxkKVwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0g8J+nviBEZWZhdWx0IHRleHQtYmFzZWQgY2VsbCByZW5kZXJpbmcgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2VsbD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgI2NlbGxUZXh0XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBmbGV4LWdyb3ctMVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJnZXRDZWxsVGl0bGUocm93LCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgY2VsbCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICBjb2w/LnR5cGUgIT09ICdpbWFnZScgJiZcbiAgICAgICAgICAgICAgICAgIGNvbD8uZmllbGQgIT0gJ2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgY29sPy5maWVsZCAhPSAnaW52b2ljZS5pbnZvaWNlX2ltYWdlJyAmJlxuICAgICAgICAgICAgICAgICAgIWlzVG90YWxSb3dcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pc19hbW91bnRcIj57e1xuICAgICAgICAgICAgICAgICAgY3VycmVuY3lTeW1ib2xcbiAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIHt7Z2V0Q2VsbFRpdGxlKHJvdywgY29sKX19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gVG90YWwgcm93IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUb3RhbFJvd1wiPlxuICAgICAgICAgICAgICAgIHt7IGdldFRvdGFsQW1vdW50KGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbnZvaWNlIEltYWdlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmZpZWxkID09ICdpbnZvaWNlLmludm9pY2VfaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHpvb206IDAuN1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCkgfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSlcIlxuICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgICAgICdkYXRhLWdyaWQvZG9jdW1lbnQtaWNvbnMvJyArXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0RXh0ZW50aW9uKGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICcuc3ZnJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBJbWFnZSBjZWxsIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdpbWFnZScgJiYgIWlzVG90YWxSb3dcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyByb3c6IHJvdywgY29sOiBjb2wgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgKCFjb2w/LmNlbGxSZW5kZXJlciAmJiBzaG93Q2VsbERldGFpbHNCb3ggJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDUwICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJykgfHxcbiAgICAgICAgICAgICAgKGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZCkgJiZcbiAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lmxlbmd0aCA+IDEpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBpc0V4cGFuZGVkKHJvdywgY29sKVxuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICB0b2dnbGVFeHBhbmRPZkxvbmdDZWxsVGV4dChyb3csIGNvbCwgY29sdW1ucywgZmFsc2UpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGRibGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8IS0tIEV4cGFuZCAvIENvbGxhcHNlIGljb24gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gRXhwYW5kZWQgdGV4dCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdy0xMDAgZXhwYW5kZWQtYm94XCJcbiAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWQocm93LCBjb2wpXCJcbiAgICAgICAgICBbc3R5bGUuekluZGV4XT1cImdldFpJbmRleChyb3csIGNvbClcIlxuICAgICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyBsZWZ0OiAwXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCIocm93LmlkIHx8IHJvdy5faWQpICsgJy0nICsgKGNvbC5pZCB8fCBjb2wuX2lkKVwiXG4gICAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhc2hvd0RldGFpbHNCb3hcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgZnVsbFRleHRUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgIGlzQXJyYXk6IGlzTmVzdGVkVmFsdWVBcnJheShyb3csIGNvbC5maWVsZClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIEhlYWRlcnMgQWN0aW9uIExpc3QgT24gY2xpY2tpbmcgdGhyZWUgZG90cyAtLT5cblxuPG5nLXRlbXBsYXRlXG4gICNjb2x1bW5NZW51XG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNOZXN0ZWRUYWJsZT1cImlzTmVzdGVkVGFibGVcIlxuICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICBsZXQtc2VjdGlvbj1cInNlY3Rpb25cIlxuICBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiXG4gIGxldC1jaGlsZENvbEluZGV4PVwiY2hpbGRDb2xJbmRleFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNvbHVtbi1tZW51IHRocmVlLWRvdHMtY29sLW1lbnVcIlxuICAgIFtjbGFzcy52aXN1YWxseS1oaWRkZW5dPVwiaXNNZW51ZUhpZGRlblwiXG4gICAgKm5nSWY9XCJhY3RpdmVDb2wgJiYgIWlzVGhyZWVEb3RzRmlsdGVyT3BlblwiXG4gICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIFtzdHlsZS5jb2xvcl09XCJoZWFkZXJUZXh0Q29sb3JcIlxuICA+XG4gICAgPCEtLSBTb3J0IEFzY2VuZGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJlbG93IHBiLTJcIiBbY2xhc3MuZGlzYWJsZS1zb3J0aW5nXT1cIiFjb2wuaXNfc29ydGFibGVcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibXV0ZWQtdGV4dCBmcy03XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTJweFwiPlNvcnQ8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0FzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdkZXNjJylcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cInNvcnRBc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy11cC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgU29ydCBBc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNvcnQgRGVzY2VuZGluZyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93RGVzY2VuZGluZyAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5maWVsZCAhPSBjb2wuZmllbGQgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09ICdhc2MnKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwic29ydERlc2MoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1kb3duLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICBTb3J0IERlc2NlbmRpbmdcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc29ydGluZ0NvbmZpZz8uZmllbGQgPT09IGNvbC5maWVsZCAmJlxuICAgICAgICAgIChzb3J0aW5nQ29uZmlnPy5vcmRlcl9ieSA9PT0gJ2FzYycgfHxcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWc/Lm9yZGVyX2J5ID09PSAnZGVzYycpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNvcnQoYWN0aXZlQ29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93LWNvdW50ZXJjbG9ja3dpc2Uuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIFJlc2V0IFNvcnRcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvdyB0aHJlZS1kb3RzLWZpbHRlclwiIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiY29sPy50eXBlID09ICdpbWFnZScgfHwgIWNvbC5pc19zZWFyY2hfYWJsZVwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dGaWx0ZXJcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW0gdGhyZWUtZG90cy1maWx0ZXJcIlxuICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcm9uVGhyZWVEb3RzQ2xpY2soY29sKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgRmlsdGVyXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iZWxvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtdXRlZC10ZXh0IGZzLTdcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMnB4XCI+UGluPC9zcGFuPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5sZWZ0ICYmIGNvbD8ucGlubmVkICE9PSAnbGVmdCdcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWxlZnQuc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBMZWZ0XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIGNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dQaW5yaWdodCAmJiBjb2w/LnBpbm5lZCAhPT0gJ3JpZ2h0J1xuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHVwZGF0ZUNvbHVtblBpbkluU291cmNlQnlGaWVsZChcbiAgICAgICAgICAgIGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgICBpc05lc3RlZFRhYmxlLFxuICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3Bpbi1yaWdodC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgID48L3NwYW5cbiAgICAgICAgPlBpbiBSaWdodFxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJjb2w/LnBpbm5lZFwiXG4gICAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdXBkYXRlQ29sdW1uUGluSW5Tb3VyY2VCeUZpZWxkKFxuICAgICAgICAgICAgYWN0aXZlQ29sLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlzTmVzdGVkVGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9sYXlvdXQtdGhyZWUtY29sdW1ucy5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgICAgPjwvc3BhblxuICAgICAgICA+VW5waW5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJjb2x1bW5UaHJlZWRvdHNNdW51Q29uZmlnPy5zaG93QXV0b3NpemVUaGlzQ29sdW1uXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiYXV0b3NpemVDb2x1bW4oYWN0aXZlQ29sKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtZXhwYW5kLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBBdXRvc2l6ZSBUaGlzIENvbHVtblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBBdXRvc2l6ZSBBbGwgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dBdXRvc2l6ZUFsbENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJhdXRvc2l6ZUFsbENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvd3MtYW5nbGUtZXhwYW5kLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+QXV0b3NpemUgQWxsIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gR3JvdXAgQnkgLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG93Um93c0dyb3VwaW5nXCJcbiAgICAgIGNsYXNzPVwiY29sdW1uLW1lbnUtaXRlbVwiXG4gICAgICAoY2xpY2spPVwiZ3JvdXBCeShhY3RpdmVDb2wpXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlLXNvcnRpbmddPVwiIWNvbC5pc19ncm91cGFibGVcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGlhZ3JhbS0zLnN2ZydcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICBHcm91cCBieSB7eyBjb2wuaGVhZGVyIH19XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENob29zZSBDb2x1bW5zIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwiY29sdW1uVGhyZWVkb3RzTXVudUNvbmZpZz8uc2hvd0Nob3NlQ29sdW1uc1wiXG4gICAgICBjbGFzcz1cImNvbHVtbi1tZW51LWl0ZW1cIlxuICAgICAgKGNsaWNrKT1cImNob29zZUNvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy91aS1jaGVja3MtZ3JpZC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzZXQgQ29sdW1ucyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cImNvbHVtblRocmVlZG90c011bnVDb25maWc/LnNob3dSZXNldENvbHVtbnNcIlxuICAgICAgY2xhc3M9XCJjb2x1bW4tbWVudS1pdGVtXCJcbiAgICAgIChjbGljayk9XCJyZXNldENvbHVtbnMoKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1jb3VudGVyY2xvY2t3aXNlLnN2ZydcbiAgICAgICAgXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICA+PC9zcGFuXG4gICAgICA+UmVzZXQgQ29sdW1uc1xuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNUaHJlZURvdHNGaWx0ZXJPcGVuICYmIGNvbD8uaXNfc2VhcmNoX2FibGVcIlxuICAgIGNsYXNzPVwidGhyZWUtZG90cy1jb2wtbWVudSBwb3NpdGlvbi1yZWxhdGl2ZVwiXG4gICAgW3N0eWxlLnJpZ2h0LnB4XT1cImdldER5bmFtaWNSaWdodChjb2wsIHNlY3Rpb24sIGNvbHVtbkluZGV4LCBjaGlsZENvbEluZGV4KVwiXG4gICAgW2NsYXNzLnZpc3VhbGx5LWhpZGRlbl09XCJpc01lbnVlSGlkZGVuXCJcbiAgPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy5maWx0ZXJSZW5kZXJlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItbWVudS1jb250YWluZXIgZmlsdGVyLW1lbnUgcC0wXCIgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJkcm9wZG93bnNCYWNrZ3JvdW5kQ29sb3JcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW2NlbGxSZW5kZXJJbml0XT1cImNvbC5maWx0ZXJSZW5kZXJlclwiXG4gICAgICAgICAgICAgIFtjb2xEYXRhXT1cImNvbFwiXG4gICAgICAgICAgICAgIChjZWxsRXZlbnQpPVwib25DZWxsRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb250ZXh0XT1cImdyaWRDb250ZXh0XCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbD8uZmlsdGVyUmVuZGVyZXJcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlck1lbnU7IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRmlsdGVyIE1lbnVlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJNZW51IGxldC1jb2w9XCJjb2xcIj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLW1lbnUtY29udGFpbmVyIGZpbHRlci1tZW51XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKm5nSWY9XCIhY29sPy5maWx0ZXJSZW5kZXJlclwiXG4gID5cbiAgICA8IS0tIERyb3Bkb3duIFR5cGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT09ICdhcnJheSc7IGVsc2UgdGV4dEZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1zZWN0aW9uIHAtMVwiPlxuXG4gICAgPCEtLSBTZWFyY2ggaW5wdXQgLS0+XG4gICAgPGlucHV0XG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxuICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAvPlxuXG4gICAgPCEtLSBGaWx0ZXIgKyBSZXN1bHQgSGFuZGxpbmcgLS0+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgKHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy5jb2x1bW5fZHJvcGRvd25fdmFsdWVcbiAgICAgICAgICB8IGZpbHRlciA6IGFkZEZpbHRlckNvbHVtbklucHV0IDogJ3ZhbHVlJykgYXMgZmlsdGVyZWRPcHRpb25zXG4gICAgICBcIlxuICAgID5cbiA8IS0tIENoZWNrIGlmIGNvbHVtbl9kcm9wZG93bl92YWx1ZSBleGlzdHMgYW5kIGhhcyBkYXRhIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoOyBlbHNlIG5vRHJvcGRvd25EYXRhXCI+XG4gICAgICA8IS0tIERBVEEgRk9VTkQgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuXG4gICAgICAgIDwhLS0gU2VsZWN0IEFsbCAob25seSB3aGVuIGRhdGEgZXhpc3RzKSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtdC0yIG1zLTEgc2VsZWN0LWFsbC1maWx0ZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApID09PVxuICAgICAgICAgICAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGggPz8gMClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiXG4gICAgICAgICAgICAgICAgKGN1cnJlbnRGaWx0ZXJTZWxlY3RlZElkcz8uc2l6ZSA/PyAwKSA+IDAgJiZcbiAgICAgICAgICAgICAgICAoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID8/IDApIDxcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmNvbHVtbl9kcm9wZG93bl92YWx1ZT8ubGVuZ3RoID8/IDApXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiPlxuICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVmlydHVhbCBTY3JvbGwgLS0+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICBpdGVtU2l6ZT1cIjMyXCJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci12aWV3cG9ydFwiXG4gICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgY3VycmVudEZpbHRlclNlbGVjdGVkSWRzLmhhcyhvcHRpb24/LmlkID8/IG9wdGlvbj8uX2lkID8/IG9wdGlvbilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3Rpb25JbkZpbHRlcihvcHRpb24pXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGRcIlxuICAgICAgICAgICAgICBbZm9yXT1cIm9wdGlvbj8uaWQgPz8gb3B0aW9uPy5faWQgPz8gb3B0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgKG9wdGlvbj8udmFsdWUgPz8gb3B0aW9uPy5uYW1lID8/IG9wdGlvbikgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBOTyBEQVRBIEZPVU5EIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub0RhdGFGb3VuZD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAqbmdJZj1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgPlxuICAgICAgICAgIE5vIFJlY29yZCBGb3VuZFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBOTyBEUk9QRE9XTiBEQVRBIEFWQUlMQUJMRSAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0Ryb3Bkb3duRGF0YT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0zIG1iLTNcIj5cbiAgICAgICAgICAgICBObyBSZWNvcmQgRm91bmRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGN1c3RvbS1zZWxlY3RcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+U3RhcnRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkYXRlJyB8fCBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZSdcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+QWZ0ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnc3RyaW5nJyA/ICd0ZXh0JyA6IGNvbD8udHlwZVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVmFsdWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgI2ZpbHRlck1lbnVlVGV4dGNoSW5wdXRcbiAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIGlkPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJhbmRfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPkFORDwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiY2RyLmRldGVjdENoYW5nZXMoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICB2YWx1ZT1cIm5vbmVcIlxuICAgICAgICAgICAgICBpZD1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjZHIuZGV0ZWN0Q2hhbmdlcygpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cIm5vbmVfe3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgICAgICAgPk5vbmU8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IEBzbGlkZVRvZ2dsZSAqbmdJZj1cImZpcnN0VmFsdWUgJiYgY29uZGl0aW9uICE9ICdub25lJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRDb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRvZXNfbm90X2NvbnRhaW5cIj5Eb2VzIE5vdCBDb250YWluPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+RW5kcyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkFmdGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlc3NfdGhlbl9lcXVhbFwiPmxlc3MgdGhlbiBFcXVhbCB0bzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbdHlwZV09XCJjb2w/LnR5cGUgPT0gJ3N0cmluZycgPyAndGV4dCcgOiBjb2w/LnR5cGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWNvbmQgVmFsdWVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBBY3Rpb25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgbXQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwcHhcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgQXBwbHlcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzBweFwiXG4gICAgICAgIChjbGljayk9XCJyZXNldFNpZGVGaWx0ZXIoY29sKVwiXG4gICAgICA+XG4gICAgICAgIFJlc2V0XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTWVudWUgLS0+XG5cbjwhLS0gQ29sdW1uIFBhbm5lbCAvIFBpdm90IE1vZGUgLyBTZWFyY2hpbmcgLS0+XG5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFubmVsPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uLXBhbmVsLWhlYWRlclwiPlxuICAgIDwhLS0gUGl2b3QgVG9nZ2xlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcGl2b3QtbW9kZSBweC01IG1zLTIgZC1ub25lXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG1lLTJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInBpdm90VG9nZ2xlXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwaXZvdE1vZGVcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJwaXZvdFRvZ2dsZVwiPlBpdm90IE1vZGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWxlY3QgQWxsICYgU2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTIgcHgtMyBtdC0zXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgYWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBhY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbWUtMlwiXG4gICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgIC8+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBjb2x1bW5zLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ29sdW1ucyBNZW51ZSAtLT5cblxuPCEtLSBDb2x1bW4gUGFuZWwgSXRlbSBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY29sdW1uUGFuZWxJdGVtIGxldC1jb2w9XCJjb2xcIj5cbiAgPCEtLSBHcm91cCBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbY2xhc3Mucm90YXRlXT1cImNvbC5leHBhbmRlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNvbC5leHBhbmRlZCA9ICFjb2wuZXhwYW5kZWRcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgW2lkXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzQ29sdW1uVmlzaWJsZShjb2wpXCJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVHcm91cFZpc2liaWxpdHkoY29sKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlkLTN4Mi1nYXAuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBbZm9yXT1cIidncm91cF8nICsgY29sLmhlYWRlclwiXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNvbC5leHBhbmRlZFwiIGNsYXNzPVwicHMtNFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgY29sLmNoaWxkcmVuOyB0cmFja0J5OiB0cmFja0J5RmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uUGFuZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY2hpbGQgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIExlYWYgQ29sdW1uIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgc3R5bGU9XCJ3aWR0aDogMS41cmVtXCI+PC9zcGFuPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgIFtpZF09XCInY29sXycgKyBjb2wuZmllbGRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uU2lkZU1lbnVDb2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhblxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxuICAgICAgPjwvc3Bhbj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMCB3LTEwMFwiXG4gICAgICAgIFtmb3JdPVwiJ2NvbF8nICsgY29sLmZpZWxkXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENvbHVtbnMgU2lkZSBGaWx0ZXIgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVGaWx0ZXJzPlxuICA8ZGl2IGNsYXNzPVwicHktMyBweC0yIHBlLTMgaC0xMDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImZpbHRlci1pY29uLXdyYXBwZXIgbWUtMlwiICpuZ0lmPVwic2hvd0NvbHVtbnNHcm91cGluZ1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgZmlsdGVyQWNjb3JkaW9uU3RhdGUgPT09ICdhbGwnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgOiBmaWx0ZXJBY2NvcmRpb25TdGF0ZSA9PT0gJ3NvbWUnXG4gICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvZGFzaC5zdmcnXG4gICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsRmlsdGVyQWNjb3JkaW9ucygpXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm92ZXJmbG93LWF1dG8gc2lkZS1maWx0ZXItY29sdW1ucy13cmFwcGVyXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMCUgLSA3MHB4KTsgc2Nyb2xsYmFyLXdpZHRoOiB0aGluXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IGNvbHVtblNlYXJjaCA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWx0ZXJQYW5uZWxJdGVtOyBjb250ZXh0OiB7IGNvbDogY29sIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlclBhbm5lbEl0ZW0gbGV0LWNvbD1cImNvbFwiPlxuICA8IS0tIEdyb3VwIENvbHVtbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jaGlsZHJlbj8ubGVuZ3RoXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4tZ3JvdXAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCJcbiAgICAgICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCJcbiAgICA+XG4gICAgICA8IS0tIENoZXZyb24gdG9nZ2xlIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1pY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2NoZXZyb24tcmlnaHQuc3ZnJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgW2NsYXNzLnJvdGF0ZV09XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBHcm91cCBsYWJlbCB0b2dnbGUgLS0+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTAgdy0xMDBcIlxuICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgICAgIChjbGljayk9XCJjb2wuZXhwYW5kZWRGaWx0ZXIgPSAhY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgID57eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IG1zLTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb2w/LnF1ZXJ5Py5faWRzPy5sZW5ndGggfHwgY29sPy5xdWVyeT8uX2ZpcnN0X3ZhbHVlXCJcbiAgICAgICAgICAgID4qPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGlsZHJlbiBjb2x1bW5zIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJjb2wuZXhwYW5kZWRGaWx0ZXJcIiBjbGFzcz1cInBzLTRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGNvbC5jaGlsZHJlbjsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclBhbm5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjaGlsZCB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gTGVhZiBDb2x1bW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmNoaWxkcmVuPy5sZW5ndGhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCIgKm5nSWY9XCJjb2w/LnR5cGUgIT09ICdpbWFnZSdcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwibWUtMiBmaWx0ZXItaWNvbi13cmFwcGVyIG1lLTJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtaWNvbiBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGV2cm9uLXJpZ2h0LnN2ZydcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtjbGFzcy5yb3RhdGVdPVwiY29sLmV4cGFuZGVkRmlsdGVyXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0wIHctMTAwXCJcbiAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgICAgICAoY2xpY2spPVwiY29sLmV4cGFuZGVkRmlsdGVyID0gIWNvbC5leHBhbmRlZEZpbHRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZSBmdy1ib2xkXCI+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgZmlsdGVyIHdoZW4gZXhwYW5kZWQgLS0+XG4gICAgPGRpdiBbQHNsaWRlVG9nZ2xlXSAqbmdJZj1cImNvbC5leHBhbmRlZEZpbHRlclwiIGNsYXNzPVwicHMtNCBwZS0zXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2lkZU5lc3RlZEZpbHRlcjsgY29udGV4dDogeyBjb2w6IGNvbCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFNpZGUgTmVzdGVkIEZpbHRlcnMgLS0+XG48bmctdGVtcGxhdGUgI3NpZGVOZXN0ZWRGaWx0ZXIgbGV0LWNvbD1cImNvbFwiPlxuICA8ZGl2IGNsYXNzPVwiXCI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknOyBlbHNlIHRleHRGaWx0ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTFcIj5cblxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIG1iLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNpZGVOZXN0ZWRGaWx0ZXJTZWFyY2hcIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlXG4gICAgICAgICAgICAgIHwgZmlsdGVyIDogc2lkZU5lc3RlZEZpbHRlclNlYXJjaCA6ICd2YWx1ZScpIGFzIGZpbHRlcmVkT3B0aW9uc1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgZWxzZSBub0RhdGFGb3VuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWItMSBtcy0xIHNlbGVjdC1hbGwtZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJcbiAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8ubGVuZ3RoID09IGNvbD8uY29sdW1uX2Ryb3Bkb3duX3ZhbHVlPy5sZW5ndGhcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsU2lkZUZpbHRlcnMoY29sLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIihjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aCAhPT0gY29sPy5jb2x1bW5fZHJvcGRvd25fdmFsdWU/Lmxlbmd0aCAmJiBjb2wucXVlcnk/Ll9pZHM/Lmxlbmd0aClcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzZWxlY3RBbGxfe3sgY29sLmZpZWxkIH19XCI+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgIGl0ZW1TaXplPVwiMzJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXZpZXdwb3J0XCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEyMHB4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBtYi0xIG1zLTFcIlxuICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5xdWVyeT8uX2lkcz8uaW5jbHVkZXMob3B0aW9uPy5faWQgfHwgb3B0aW9uPy5pZCB8fCBvcHRpb24pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk9wdGlvblRvZ2dsZShjb2wsIG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb25fe3sgY29sLmZpZWxkIH19X3t7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbj8uaWQgfHwgb3B0aW9uPy5faWQgfHwgb3B0aW9uXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtmb3JdPVwiXG4gICAgICAgICAgICAgICAgICAgICdvcHRpb25fJyArXG4gICAgICAgICAgICAgICAgICAgIGNvbC5maWVsZCArXG4gICAgICAgICAgICAgICAgICAgICdfJyArXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24/LmlkIHx8IG9wdGlvbj8uX2lkIHx8IG9wdGlvbilcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgKG9wdGlvbi52YWx1ZSB8fCBvcHRpb24pIHwgdGl0bGVjYXNlIH19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EYXRhRm91bmQ+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1tdXRlZCBtdC0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaWRlTmVzdGVkRmlsdGVyU2VhcmNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTm8gUmVjb3JkIEZvdW5kXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPCEtLSBUZXh0IEZpbHRlciBTZWN0aW9uIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpbHRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItdGV4dC1zZWN0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sLnF1ZXJ5LmZpcnN0X2NvbmRpdGlvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpblwiPkNvbnRhaW5zPC9vcHRpb24+XG4gICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdF9lcXVhbFwiPk5vdCBFcXVhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+QmVmb3JlPC9vcHRpb24+RlZcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdudW1iZXInXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5HcmVhdGVyIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5GVlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIFt0eXBlXT1cImNvbD8udHlwZSA9PSAnZGF0ZScgPyAnZGF0ZScgOiAoY29sPy50eXBlID09ICdudW1iZXInID8gJ251bWJlcic6ICd0ZXh0JylcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBtYi0zXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkhLmZpcnN0X3ZhbHVlXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwIG1iLTMgZC1mbGV4IGZsZXgtcm93IG11dGVkXCJcbiAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmUgbS0wIGNvbC00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgZmlsdGVyLXJhZGlvLWlucHV0c1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJhbmRcIlxuICAgICAgICAgICAgICBpZD1cImFuZF97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwiYW5kX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5BTkQ8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwib3JcIlxuICAgICAgICAgICAgICBpZD1cIm9yX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIiBmb3I9XCJvcl97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgICA+T1I8L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIG0tMCBjb2wtNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGZpbHRlci1yYWRpby1pbnB1dHNcIlxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LmNvbmRpdGlvblwiXG4gICAgICAgICAgICAgIHZhbHVlPVwibm9uZVwiXG4gICAgICAgICAgICAgIGlkPVwibm9uZV97eyBjb2wuZmllbGQgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cIm5ub25lbS1jaGVjay1sYWJlbCBtYi0wIG10LTFcIlxuICAgICAgICAgICAgICBmb3I9XCJub25lX3t7IGNvbC5maWVsZCB9fVwiXG4gICAgICAgICAgICAgID5Ob25lPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgY29sPy5xdWVyeT8uY29uZGl0aW9uICE9PSAnbm9uZSdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWItMlwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2whLnF1ZXJ5LnNlY29uZF9jb25kaXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlID09ICdkYXRlJyB8fCBjb2w/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxdWFsXCI+RXF1YWxzIFRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbD8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5MZXNzIFRoZW4gPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsZXNzX3RoZW5fZXF1YWxcIj5sZXNzIHRoZW4gRXF1YWwgdG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZ3JlYXRlcl90aGVuX2VxdWFsXCI+R3JlYXRlciB0aGVuIEVxdWFsIHRvIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW3R5cGVdPVwiY29sPy50eXBlID09ICdkYXRlJyA/ICdkYXRlJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWItM1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlY29uZCBWYWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbCEucXVlcnkuc2Vjb25kX3ZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDIycHg7XCIgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiPmFwcGx5PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImhlaWdodDogMjJweDtcIiAoY2xpY2spPVwiYXBwbHlEcm9wZG93bkZpbHRlcigpXCI+cmVzZXQ8L2Rpdj5cblxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlU2lkZUZpbHRlcihjb2wpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2xlYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogMzBweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5U2lkZUZpbHRlcihjb2wpXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIihjb2w/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgICAgW2NsYXNzLnBlLW5vbmVdPVwiKGNvbCE/LnF1ZXJ5LmNvbmRpdGlvbiAhPT0gJ25vbmUnICYmICFjb2w/LnF1ZXJ5Py5zZWNvbmRfdmFsdWUpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tdG9wOiAtMXB4XCI+QXBwbHk8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIENlbnRyIE92ZXJsYXkgZm9yIHNob3dpbmcgdGhlIGNob3NlIGNvbHVtbnMgLS0+XG5cbjxkaXYgKm5nSWY9XCJzaG93Q29sdW1uUGFuZWxcIiBjbGFzcz1cImN1c3RvbS1tb2RhbC1vdmVybGF5XCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImN1c3RvbS1tb2RhbC1jb250ZW50XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImRyb3Bkb3duc0JhY2tncm91bmRDb2xvclwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibW9kYWxDb2x1bW5QYW5uZWxcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBUaGUgZXhpc3RpbmcgbmctdGVtcGxhdGUgeW91IHByb3ZpZGVkIC0tPlxuPG5nLXRlbXBsYXRlICNtb2RhbENvbHVtblBhbm5lbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbi1wYW5lbC1oZWFkZXJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtMiBwcy0zIHJvdW5kZWQtdG9wLTIgbW9kYS1oZWFkZXJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCI0OFwiXG4gICAgPlxuICAgICAgQ2hvb3NlIENvbHVtbnNcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiIChjbGljayk9XCJjbG9zZU1vZGFsQ29sdW1uUGFuZWwoKVwiXG4gICAgICAgID48c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTBcIiAvPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBweC0yIHBlLTNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIjQ4XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlciBtZS0yXCIgKm5nSWY9XCJzaG93Q29sdW1uc0dyb3VwaW5nXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWljb24gZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgIGFjY29yZGlvblN0YXRlID09PSAnYWxsJ1xuICAgICAgICAgICAgICAgID8gc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1kb3duLnN2ZydcbiAgICAgICAgICAgICAgICA6IGFjY29yZGlvblN0YXRlID09PSAnc29tZSdcbiAgICAgICAgICAgICAgICA/IHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Rhc2guc3ZnJ1xuICAgICAgICAgICAgICAgIDogc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbEFjY29yZGlvbnMoKVwiXG4gICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCJcbiAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1ucy4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaG9zZUNvbHVtbnNTZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxociBjbGFzcz1cIm10LTAgbWItMVwiIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHgtMiBvdmVybGF5LXNjcm9sbGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogY2hvc2VDb2x1bW5zU2VhcmNoIDogJ2hlYWRlcic7XG4gICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5QYW5lbEl0ZW07IGNvbnRleHQ6IHsgY29sOiBjb2wgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2lkZU1lbnVSb3dHcm91cHM+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaC0xMDAgZC1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgaC0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbWItNFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvanVzdGlmeS5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5Sb3cgR3JvdXBzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC01MFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJweC0zIHB5LTIgYm9yZGVyLWRhc2hlZCBoLTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4XCJcbiAgICAgICAgPlxuICAgICAgICAgIERyYWcgaGVyZSB0byBzZXQgcm93IEdyb3Vwc1xuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGhyIGNsYXNzPVwibXQtNFwiIC8+XG5cbiAgICA8ZGl2IGNsYXNzPVwicHgtMyBoLTEwMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMyBtYi00XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9qdXN0aWZ5LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxzcGFuPlZhbHVlczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImgtNTAgZC1mbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInB4LTMgcHktMiBib3JkZXItZGFzaGVkIGgtMTAwIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDE0cHhcIlxuICAgICAgICA+XG4gICAgICAgICAgRHJhZyBoZXJlIGFnZ3JlZ2F0ZVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjwhLS0gRHJhZyBQcmV2aWV3IFRlbXBsYXRlIC0tPlxuPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+XG48IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT5cbjxuZy10ZW1wbGF0ZSAjZHJhZ1ByZXZpZXcgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgPGRpdj5cbiAgICAgIDxzcGFuXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3dzLW1vdmUuc3ZnJ1wiXG4gICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+e3sgY29sLmhlYWRlciB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRHJhZyBQbGFjZWhvbGRlciBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZVxuICAjZHJhZ1BsYWNlaG9sZGVyXG4gIGxldC1jb2xcbiAgbGV0LWk9XCJpbmRleFwiXG4gIGxldC1zZWN0aW9uPVwic2VjdGlvblwiXG4gIGxldC1kcmFnZ2luZ0luR3JvdXBBcmVhPVwiZHJhZ2dpbmdJbkdyb3VwQXJlYVwiXG4+XG4gIDxkaXYgKm5nSWY9XCIhZHJhZ2dpbmdJbkdyb3VwQXJlYVwiPlxuICAgIDxkaXZcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIGhlYWRlckNlbGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2wsIGluZGV4OiBpLCBzZWN0aW9uOiBzZWN0aW9uIH1cbiAgICAgIFwiXG4gICAgPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImRyYWdnaW5nSW5Hcm91cEFyZWFcIj5OZXcgUGxhY2Vob2xkZXI8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVG9wIEdyb3VwIFJvdyBQbGFjZWhvbGRlciAtLT5cbjxuZy10ZW1wbGF0ZSAjdG9wR3JvdXBpbmdSb3dQbGFjZWhvbGRlciBsZXQtY29sIGxldC1zaG93Q2hldnJvbj1cInNob3dDaGV2cm9uXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBnYXAtMiB0b3Atcm93LWdyb3VwaW5nLXBsYWNlaG9sZGVyXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwidG9wR3JvdXBlZEJhZGdlc0JhY2tncm91bmRDb2xvclwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaWQtM3gyLWdhcC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3Bhbj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgPHNwYW5cbiAgICAgICAgKGNsaWNrKT1cInVuZ3JvdXBDb2x1bW4oY29sKVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMveC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwic2hvd0NoZXZyb25cIiBzdHlsZT1cIm9wYWNpdHk6IDAuNjsgZm9udC1zaXplOiAxNHB4XCI+XG4gICAgPHNwYW5cbiAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hldnJvbi1yaWdodC5zdmcnXCJcbiAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgPjwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2NoaWxkSGVhZGVyUGxhY2Vob2xkZXJcbiAgbGV0LWNvbFxuICBsZXQtcGlubmVkUmlnaHQ9XCJwaW5uZWRSaWdodFwiXG4gIGxldC1pPVwiaW5kZXhcIlxuICBsZXQtc2VjdGlvbnM9XCJzZWN0aW9uc1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImhlYWRlci1jZWxsIG9uZS1yb3ctaGVhZGVyLWNlbGxzXCJcbiAgICBbY2xhc3MuYm9yZGVyLXJpZ2h0XT1cInNob3dWZXJ0aWNhbEJvcmRlclwiXG4gICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUuZm9udFdlaWdodF09XCJoZWFkZXJGb250V2VpZ2h0XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gaC0xMDAgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMFwiXG4gICAgICAgIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1lbGxpcHNpcyBoLTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbdGl0bGVdPVwiY29sLmhlYWRlclwiXG4gICAgICAgICAgW2NsYXNzLnctMTAwXT1cInBpbm5lZFJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNvbC5oZWFkZXIgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1mbGV4XCJcbiAgICAgICAgICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwaW5uZWRSaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWhhbmRsZVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93RmlsdGVyUm93XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgY2xhc3M9XCJoZWFkZXItY2VsbCBmaWx0ZXItY2VsbFwiXG4gICAgW2NsYXNzLmJvcmRlci1yaWdodF09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2wud2lkdGhcIlxuICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgIFtjbGFzcy5ib3JkZXItcmlnaHRdPVwic2hvd1ZlcnRpY2FsQm9yZGVyXCJcbiAgICBzdHlsZT1cImdyaWQtcm93OiAzXCJcbiAgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiaGVhZGVyLWNlbGwgZmlsdGVyLWNlbGxcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJoZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlYWRlclJvd0hlaWdodFwiXG4gICAgICBbc3R5bGUubWluLWhlaWdodC5weF09XCJoZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiaGVhZGVyUm93SGVpZ2h0XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlclwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiY29sLmZpbHRlclZhbHVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cImNvbD8udHlwZSA9PSAnZHJvcGRvd24nIHx8IGNvbD8udHlwZSA9PSAnaW1hZ2UnIHx8IGNvbD8udHlwZSA9PSAnYXJyYXknXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkLXNlYXJjaC1pbnB1dF09XCJcbiAgICAgICAgICBjb2w/LnR5cGUgPT0gJ2Ryb3Bkb3duJyB8fCBjb2w/LnR5cGUgPT0gJ2ltYWdlJyB8fCBjb2w/LnR5cGUgPT0gJ2FycmF5J1xuICAgICAgICBcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLWljb24td3JhcHBlclwiXG4gICAgICAgIChjbGljayk9XCJhY3RpdmVGaWx0ZXJDZWxsID0gY29sOyBhY3RpdmVDb2wgPSBudWxsXCJcbiAgICAgICAgPjxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9maWx0ZXItMi5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICA+PC9zcGFuXG4gICAgICA+PC9zcGFuPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlckNlbGwgPT09IGNvbFwiXG4gICAgICAgIHN0eWxlPVwidG9wOiAxMDAlOyByaWdodDogMDsgei1pbmRleDogMTA7IGxlZnQ6IDBcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFibGVMYXlvdXQ+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAzMjBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBMYXlvdXQ8L2g2PlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cIm15LTJcIiAvPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBtYi0zIGQtZmxleFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGNsYXNzPVwiYnRuLWNoZWNrIGxheW91dC1idXR0b24tY2hlY2tcIlxuICAgICAgICBuYW1lPVwibGF5b3V0U2l6ZVwiXG4gICAgICAgIGlkPVwic21hbGxcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAoY2hhbmdlKT1cImNoYW5nZVRhYmxlTGF5b3V0KCRldmVudCwgJ3NtYWxsJylcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdzbWFsbCdcIlxuICAgICAgLz5cbiAgICAgIDxsYWJlbFxuICAgICAgICBjbGFzcz1cImJvcmRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGxheW91dC1idXR0b25cIlxuICAgICAgICBmb3I9XCJzbWFsbFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnc21hbGwnID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogOHB4XCI+PC9kaXY+XG4gICAgICAgIFNtYWxsXG4gICAgICA8L2xhYmVsPlxuXG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2sgbGF5b3V0LWJ1dHRvbi1jaGVja1wiXG4gICAgICAgIG5hbWU9XCJsYXlvdXRTaXplXCJcbiAgICAgICAgaWQ9XCJtZWRpdW1cIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdtZWRpdW0nXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUYWJsZUxheW91dCgkZXZlbnQsICdtZWRpdW0nKVwiXG4gICAgICAvPlxuICAgICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIG14LTMgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBsYXlvdXQtYnV0dG9uXCJcbiAgICAgICAgZm9yPVwibWVkaXVtXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgIGNvbG9yOiBzZWxlY3RlZFRhYmxlTGF5b3V0ID09ICdtZWRpdW0nID8gJyMwMDAnIDogJyM3MjcyNzInXG4gICAgICAgIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1ib3ggYm9yZGVyIG1iLTFcIiBzdHlsZT1cImhlaWdodDogMTJweFwiPjwvZGl2PlxuICAgICAgICBNZWRpdW1cbiAgICAgIDwvbGFiZWw+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVjayBsYXlvdXQtYnV0dG9uLWNoZWNrXCJcbiAgICAgICAgbmFtZT1cImxheW91dFNpemVcIlxuICAgICAgICBpZD1cImxhcmdlXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VUYWJsZUxheW91dCgkZXZlbnQsICdsYXJnZScpXCJcbiAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRUYWJsZUxheW91dCA9PSAnbGFyZ2UnXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJib3JkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBsYXlvdXQtYnV0dG9uXCJcbiAgICAgICAgZm9yPVwibGFyZ2VcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgY29sb3I6IHNlbGVjdGVkVGFibGVMYXlvdXQgPT0gJ2xhcmdlJyA/ICcjMDAwJyA6ICcjNzI3MjcyJ1xuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctYm94IGJvcmRlciBtYi0xXCIgc3R5bGU9XCJoZWlnaHQ6IDE2cHhcIj48L2Rpdj5cbiAgICAgICAgTGFyZ2VcbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8aHIgY2xhc3M9XCJteS0yXCIgLz5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0yXCI+XG4gICAgICA8c3Bhbj5TaG93IHNlcGFyYXRvcnM8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwic2VwYXJhdG9yc1wiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93VmVydGljYWxCb3JkZXJcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25Gb250Q2hhbmdlKClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxzcGFuPlJvdyBzaGFkaW5nPC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dTaGFkaW5nRW5hYmxlZFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTaGFkaW5nKClcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgaWQ9XCJyb3dTaGFkaW5nXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBTaWRlIE1lbnU8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dTaWRlTWVudVwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICBpZD1cInJvd1NoYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxuICAgICAgPHNwYW4+U2hvdyBGaWx0ZXIgUm93PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbS0wXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93RmlsdGVyUm93XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIGlkPVwicm93U2hhZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0YWJsZVByZXNldD5cbiAgPGRpdlxuICAgICpuZ0lmPVwiYWN0aXZlU3ViQnV0dG9uICE9PSAnc2F2ZS1wcmVzZXQnXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweFwiXG4gID5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTBweFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5UYWJsZSBQcmVzZXRzPC9oNj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBTYXZlIFByZXNldCBCdXR0b24gd2l0aCBEcm9wZG93biAtLT5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGlkPVwic2F2ZVByZXNldERyb3Bkb3duXCJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGVTdWJBY3Rpb25zKCdzYXZlLXByZXNldCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gXCJTYXZlIHByZXNldFwiIDogXCJVcGRhdGUgUHJlc2V0XCIgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uXCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0UHJlc2V0VGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFByZXNldCBMaXN0IC0tPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHRhYmxlVmlldyB8IGZpbHRlciA6IHNlYXJjaFRleHRQcmVzZXRUYWJsZSA6ICduYW1lJyBhcyBmaWx0ZXJlZExpc3RcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBJZiBmaWx0ZXJlZExpc3QgZXhpc3RzIGFuZCBub25lIGlzIGRlZmF1bHQgLT4gc2hvdyBmYWxsYmFjayAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCIgcGItNSBvdmVyZmxvdy1hdXRvXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRIZWlnaHQgLSAyNTBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKHRydWUpO1xuICAgICAgICAgICAgb3BlbkluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRlbXBfc3RhdGUuaWQgPSAnJztcbiAgICAgICAgICAgIGFjdGl2ZVRvcEJ1dHRvbiA9ICcnO1xuICAgICAgICAgICAgY3VycmV0YVRhYmxlUHJlc2V0Rm9yVXBkYXRlID0gbnVsbFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5EZWZhdWx0IFZpZXc8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhcmtcIj5DcmVhdGVkIGJ5IHN5c3RlbTwvc21hbGw+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIXRhYmxlRmlsdGVyVmlld0lkICYmICFoYXNBbnlEZWZhdWx0VmlldygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAgICAgPkRlZmF1bHQ8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgICAgPCEtLSA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCIhdGFibGVGaWx0ZXJWaWV3SWQgJiYgIWhhc0FueURlZmF1bHRWaWV3KClcIlxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jaGVjay1ibHVlLnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICA+PC9zcGFuPiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCJcbiAgICAgICAgICAgICpuZ0lmPVwidGFibGVGaWx0ZXJWaWV3SWRcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUaGUgbGlzdDogcmVuZGVyIGVhY2ggdGFibGUgZnJvbSBmaWx0ZXJlZExpc3QgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiXG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgdGFibGUgb2YgZmlsdGVyZWRMaXN0O1xuICAgICAgICAgICAgbGV0IGkgPSBpbmRleDtcbiAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlUYWJsZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEl0ZW0gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9wZW5JbmRleCA9IG51bGw7IGFjdGl2ZVRvcEJ1dHRvbiA9ICcnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RGaWx0ZXIodGFibGUpOyBvcGVuSW5kZXggPSBudWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+XG4gICAgICAgICAgICAgICAge3sgdGFibGU/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8IS0tIHt7dGFibGU/LmlzX3RlbXB9fSAtLT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgKHRhYmxlPy5pc190ZW1wICYmICF0ZW1wX3N0YXRlLmlkKSB8fFxuICAgICAgICAgICAgICAgICAgICB0ZW1wX3N0YXRlLmlkID09IHRhYmxlLmlkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlPy5pc19kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1wcmltYXJ5IG1zLTJcIlxuICAgICAgICAgICAgICAgICAgPkRlZmF1bHQ8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhcmtcIiAqbmdJZj1cInRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCIgW3RpdGxlXT1cInRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzXCI+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHRhYmxlPy5jb25maWc/LmZpbHRlck5hbWVzPy5sZW5ndGggPiAyNVxuICAgICAgICAgICAgICA/ICh0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lcyB8IHNsaWNlOjA6MjUpICsgJy4uLidcbiAgICAgICAgICAgICAgOiB0YWJsZT8uY29uZmlnPy5maWx0ZXJOYW1lc1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAoe3sgdGFibGU/LmNvbmZpZz8udG90YWxDb3VudCB9fSlcbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1kYXJrXCIgKm5nSWY9XCIhdGFibGU/LmNvbmZpZz8uZmlsdGVyTmFtZXNcIj57eyB0YWJsZT8uY3JlYXRlZEF0IHwgZGF0ZSA6IFwiTU1NIGQsIHlcIiB9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlPy5pc19kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvY2hlY2stYmx1ZS5zdmcnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICpuZ0lmPVwiIXRhYmxlPy5pc19kZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWljb24gbXV0ZWQtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3BlbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL2hvcml6b250YWwtZG90cy5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gbWVudSAtLT5cbiAgICAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3BlbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tZHJvcGRvd24tbWVudSBwb3NpdGlvbi1maXhlZCB0b3AtYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0LnB4XT1cIid1bnNldCdcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC5weF09XCJkYXRhR3JpZENvbnRhaW5lci5vZmZzZXRXaWR0aCAtIDIwMFwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiB1bnNldDsgcmlnaHQ6IHVuc2V0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblByZXNldCh0YWJsZSwgJ3NldFByZXNldCcpOyB0ZW1wX3N0YXRlLmlkID0gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9zdGFyLnN2ZydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBTZXQgYXMgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuXG4gICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibm9uZVwiICpuZ0lmPVwiIXRhYmxlLmNvbmZpcm1EZWxldGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHRleHQtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZS5jb25maXJtRGVsZXRlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiAtNHB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YS1ncmlkL2ljb25zL3RyYXNoLXJlZC5zdmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWUtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFibGUuY29uZmlybURlbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb25maXJtLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zIHB5LTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgPGJyIC8+PGJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+4oCce3sgdGFibGU/Lm5hbWUgfX3igJ08L2JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPj9cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodCBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGUuY29uZmlybURlbGV0ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uUHJlc2V0KHRhYmxlLCAnZGVsZXRlUHJlc2V0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gSXRlbSBFbmQgSGVyZSAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICpuZ0lmPVwiYWN0aXZlU3ViQnV0dG9uID09ICdzYXZlLXByZXNldCdcIlxuICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBwLTMgYmFkZ2UgbXQtNCBzYXZlLXByZXNldC1kcm9wZG93biBtdC0xXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJzYXZlUHJlc2V0RHJvcGRvd25cIlxuICAgIHN0eWxlPVwibWluLXdpZHRoOiAyNTBweFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCBmcy0xNHB4IG1iLTJcIj5cbiAgICAgIHt7IGlzVGFibGVQcmVzZXROb3RDaGFuZ2VkID8gXCJTYXZlIHByZXNldFwiIDogXCJVcGRhdGUgUHJlc2V0XCIgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZnMtMTRweCBtYi0yXCIgc3R5bGU9XCJsaW5lLWhlaWdodDogMjBweFwiPlxuICAgICAgVGhpcyB3aWxsIHNhdmUgdGhlIGN1cnJlbnQgdGFibGUgYWRqdXN0bWVudHMgYXMgYSBwcmVzZXQuXG4gICAgPC9kaXY+XG4gICAgPCEtLSBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgPGxhYmVsIGZvcj1cInByZXNldE5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnMtMTJweCBmdy1ib2xkXCJcbiAgICAgICAgPlByZXNldCBOYW1lPC9sYWJlbFxuICAgICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNwcmVzZXROYW1lQ3RybD1cIm5nTW9kZWxcIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVzZXROYW1lXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaXMtaW52YWxpZCc6XG4gICAgICAgICAgICAgIHByZXNldE5hbWVDdHJsLmludmFsaWQgJiZcbiAgICAgICAgICAgICAgKHByZXNldE5hbWVDdHJsLmRpcnR5IHx8IHByZXNldE5hbWVDdHJsLnRvdWNoZWQpXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIHBzLTJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgcHJlc2V0IG5hbWVcIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDaGVja2JveCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBtYi0yXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcmVzZXRGaWx0ZXJcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBpZD1cInNhdmVGaWx0ZXJzXCJcbiAgICAgIC8+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG10LTFcIiBmb3I9XCJzYXZlRmlsdGVyc1wiPlxuICAgICAgICBTYXZlIGFjdGl2ZSBmaWx0ZXJzXG4gICAgICA8L2xhYmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTYXZlIEJ1dHRvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTJcIiBzdHlsZT1cImhlaWdodDogMzJweFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi1saWdodFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHRvZ2dsZUFjdGlvbnMoJ3RhYmxlLXByZXNldHMnKVwiXG4gICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBbZGlzYWJsZWRdPVwiY2xvc2VEcm9wZG93bi5wcmVzZXQubG9hZGluZ1wiXG4gICAgICAgIChjbGljayk9XCJzYXZlUHJlc2V0KHByZXNldE5hbWVDdHJsKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiICpuZ0lmPVwiaXNUYWJsZVByZXNldE5vdENoYW5nZWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNsb3NlRHJvcGRvd24ucHJlc2V0LmxvYWRpbmdcIlxuICAgICAgICAgICAgPlNhdmU8L25nLWNvbnRhaW5lclxuICAgICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2xvc2VEcm9wZG93bi5wcmVzZXQubG9hZGluZ1wiXG4gICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiPjwvc3BhblxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIndoaXRlLXNwYWNlOiBub3dyYXBcIiAqbmdJZj1cIiFpc1RhYmxlUHJlc2V0Tm90Q2hhbmdlZFwiXG4gICAgICAgICAgPlVwZGF0ZSBQcmVzZXQ8L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93SGlkZUNvbHVtbnM+XG4gIDxkaXZcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICBjbGFzcz1cInAtMyBzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIGRyb3Bkb3duLW1lbnUgc2hvdyBzaGFkb3cgY3VzdG9tLW1lbnUgdGFibGUtbGF5b3V0XCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweFwiXG4gID5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCJcbiAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtMTBweFwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvbnMoJ3NldHRpbmcnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8aDYgY2xhc3M9XCJtYi0wIG1zLTJcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDBcIj5Db2x1bW5zPC9oNj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0Q29sdW1ucygpXCJcbiAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IHRleHQtZGVjb3JhdGlvbi1ub25lIGQtbm9uZVwiXG4gICAgICAgID5SZXNldDwvYVxuICAgICAgPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZ2xvYmFsLXNlYXJjaFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvc2VhcmNoLnN2ZydcIlxuICAgICAgICAgIGNsYXNzPVwibXgtMiBwb3NpdGlvbi1hYnNvbHV0ZSBpY29uIGRhdGEtZ3JpZC1zdmctaWNvblwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29sdW1uXCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInRvcFNob3dIaWRlQ29sdW1uc1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFByZXNldCBMaXN0IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IGF1dG87IHNjcm9sbGJhci13aWR0aDogdGhpblwiXG4gICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAtIDIyMFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm11dGVkLXRleHQgc2hvdy1oaWRlLXRhYmxlLWxhYmVsIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtblwiPlxuICAgICAgICBTaG93IGluIHRhYmxlXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgIGlkPVwiaGlkZV9hbGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxDb2x1bW5zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsQ29sdW1uc1Zpc2liaWxpdHkoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBmdy1zZW1pYm9sZFwiIGZvcj1cImhpZGVfYWxsXCI+XG4gICAgICAgICAgICAgIFNob3cvSGlkZSBBbGwgXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEl0ZW0gLS0+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBjb2wgb2YgY29sdW1ucyB8IGZpbHRlciA6IHRvcFNob3dIaWRlQ29sdW1ucyA6ICdoZWFkZXInO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGaWVsZFxuICAgICAgICBcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJjb2wuaXNfdmlzaWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9ncmlwLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYXAgZGF0YS1ncmlkLXN2Zy1pY29uXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItZ3JhcCBkYXRhLWdyaWQtc3ZnLWljb25cIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgJiYgIWNvbD8ucXVlcnk/Ll9pZHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbHVtblZpc2liaWxpdHkoY29sLCBmYWxzZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInZpc2libGVDb2x1bW5zKCkubGVuZ3RoIDw9IDIgfHwgY29sPy5pc19hbHdheXNfdmlzaWJsZVwiXG4gICAgICAgICAgICBbY2xhc3MucGUtbm9uZV09XCJ2aXNpYmxlQ29sdW1ucygpLmxlbmd0aCA8PSAyIHx8IGNvbD8uaXNfYWx3YXlzX3Zpc2libGVcIlxuICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNTBdPVwidmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggPD0gMiB8fCBjb2w/LmlzX2Fsd2F5c192aXNpYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2V5ZS5zdmcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29sPy5xdWVyeT8uZmlyc3RfdmFsdWUgfHwgY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBzdHlsZT1cIm9wYWNpdHk6IDAuNVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUuc3ZnJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIG1lLTJcIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBJdGVtIEVuZCBIZXJlIC0tPlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiXG4gICAgICAgICpuZ0lmPVwiaGFzQW55VmlzaWJsZUNvbHVtbiAmJiBoYXNBbnlJblZpc2libGVDb2x1bW5cIlxuICAgICAgPjwvZGl2PlxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibXV0ZWQtdGV4dCBzaG93LWhpZGUtdGFibGUtbGFiZWwgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgKm5nSWY9XCJoYXNBbnlJblZpc2libGVDb2x1bW5cIlxuICAgICAgPlxuICAgICAgICBIaWRlIGluIHRhYmxlXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgaWQ9XCJzaG93X2FsbFwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFsbENvbHVtbnNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxDb2x1bW5zVmlzaWJpbGl0eSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LXNlbWlib2xkXCIgZm9yPVwic2hvd19hbGxcIj5cbiAgICAgICAgICAgICAgU2hvdy9IaWRlIEFsbCBcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnMgfCBmaWx0ZXIgOiB0b3BTaG93SGlkZUNvbHVtbnMgOiAnaGVhZGVyJzsgdHJhY2tCeTogdHJhY2tCeUZpZWxkXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhY29sLmlzX3Zpc2libGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYm9yZGVyLTAgcHgtMCBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0xXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbD8ucGlubmVkXCJcbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2dyaXAtdmVydGljYWwuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGN1cnNvci1ncmFwXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sPy5waW5uZWRcIlxuICAgICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvcGluLWJsdWUuc3ZnJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGN1cnNvci1ncmFwXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGRcIj5cbiAgICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVDb2x1bW5WaXNpYmlsaXR5KGNvbCwgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9leWUtY3Jvc3Muc3ZnJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMlwiXG4gICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBJdGVtIEVuZCBIZXJlIC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyQ29sdW1ucyBsZXQtY29sPVwiY29sdW1uXCI+XG4gIDxkaXZcbiAgICBAc2xpZGVUb2dnbGVcbiAgICAqbmdJZj1cIiFpc0ZpbHRlck9wZW4gJiYgYWN0aXZlVG9wQnV0dG9uID09ICdmaWx0ZXItY29sdW1ucydcIlxuICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgIGNsYXNzPVwic2hhZG93IGFjdGlvbnMtZHJvcGRvd24gbXQtMSBzaG93IHNoYWRvdyBjdXN0b20tbWVudSB0YWJsZS1sYXlvdXQgZmlsdGVyLWNvbHVtbnNcIlxuICAgIHN0eWxlPVwid2lkdGg6IDI4MHB4OyByaWdodDogdW5zZXQ7IG1heC13aWR0aDogMjMwcHhcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiY2hlY2tib3hlc0JhY2tncm91bmRDb2xvclwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWItMiBweC0zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGdsb2JhbC1zZWFyY2hcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbaW5saW5lU1ZHXT1cInNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL3NlYXJjaC5zdmcnXCJcbiAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBteC0yIHBvc2l0aW9uLWFic29sdXRlIGljb25cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5XCJcbiAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImFkZEZpbHRlckNvbHVtbklucHV0XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWZsdXNoXCJcbiAgICAgIHN0eWxlPVwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDUwMHB4KTsgb3ZlcmZsb3c6IGF1dG9cIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IGNvbCBvZiBjb2x1bW5zIHwgZmlsdGVyIDogYWRkRmlsdGVyQ29sdW1uSW5wdXQgOiAnaGVhZGVyJztcbiAgICAgICAgICB0cmFja0J5OiB0cmFja0J5RmllbGRcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyKGNvbClcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBjb2wuaXNfdmlzaWJsZSAmJlxuICAgICAgICAgICAgIWNvbD8ucXVlcnk/LmZpcnN0X3ZhbHVlICYmXG4gICAgICAgICAgICAhY29sPy5xdWVyeT8uX2lkcz8ubGVuZ3RoICYmIGNvbD8udHlwZSAhPT0gJ2ltYWdlJyAmJiBjb2wuaXNfc2VhcmNoX2FibGVcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTFcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAtM3B4XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIj5cbiAgICAgICAgICAgICAge3sgY29sLmhlYWRlciAgfCB0aXRsZWNhc2UgIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93biAtLT5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiaXNGaWx0ZXJPcGVuICYmIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdkcm9wZG93bicgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2FycmF5J1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dCBmaWx0ZXItY29sdW1ucyBwYi0yXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyODBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgbXktMiBib3JkZXItYmVsb3cgcHktMSBwYi0yIG1iLTMgZC1mbGV4IHBzLTFcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25zKCdmaWx0ZXItY29sdW1ucycpOyBpc0FjdGl2ZUZpbHRlck9wZW4gPSBmYWxzZVwiXG4gICAgICAgIFtpbmxpbmVTVkddPVwic2luZ2xlU3BhQXNzZXRzUGF0aCArICdkYXRhLWdyaWQvaWNvbnMvYXJyb3ctbGVmdC5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gbWUtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWNhcGl0YWxpemVcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiXG4gICAgICA+PC9zcGFuXG4gICAgICA+PGI+e3sgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LmhlYWRlciB8IHRpdGxlY2FzZSAgfX08L2I+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTIgcHgtM1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNvbC0xMiBnbG9iYWwtc2VhcmNoIHBvc2l0aW9uLXJlbGF0aXZlIGJvcmRlciByb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwIHB4LTIgZmlsdGVyLXNlcmFjaC1pbnB0XCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImJhZGdlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgbWUtMSBtYi0xIHRvcC1yb3ctZmlsdGVyLWRyb3Bkb3duIHRleHQtY2FwaXRhbGl6ZVwiIHN0eWxlPVwidGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHNlbGVjdGVkPy52YWx1ZSA/IHNlbGVjdGVkLnZhbHVlIDogc2VsZWN0ZWQgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKHNlbGVjdGVkKVwiXG4gICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9jcm9zcy1wcmltYXJ5LnN2ZydcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cIm1lLTJcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGJvcmRlci0wIGZsZXgtZ3Jvdy0xXCJcbiAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWxlY3RlZEZpbHRlck9wdGlvbnM/Lmxlbmd0aCA/ICcnIDogJ0ZpbHRlciBieSdcIlxuICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dEZvckZpbHRlckRyb3BEb3duXCJcbiAgICAgICAgICAoa2V5ZG93bi5iYWNrc3BhY2UpPVwiaGFuZGxlQmFja3NwYWNlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIlxuICAgICAgc3R5bGU9XCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjAwcHgpOyBvdmVyZmxvdzogYXV0b1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgY29sIG9mIHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyLmNvbHVtbl9kcm9wZG93bl92YWx1ZVxuICAgICAgICAgICAgfCBmaWx0ZXIgOiBzZWFyY2hUZXh0Rm9yRmlsdGVyRHJvcERvd24gOiAndmFsdWUnO1xuICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJvcmRlci0wIHB4LTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2lkXT1cImlcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjdXJyZW50RmlsdGVyU2VsZWN0ZWRJZHMuaGFzKGNvbC5pZCB8fCBjb2wuX2lkIHx8IGNvbClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbkluRmlsdGVyKGNvbClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctc2VtaWJvbGQgdGV4dC1jYXBpdGFsaXplXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIiBbZm9yXT1cImlcIj5cbiAgICAgICAgICAgICAge3sgY29sPy52YWx1ZSB8fCBjb2w/Lm5hbWUgfHwgY29sIHwgdGl0bGVjYXNlICB9fVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIHB4LTIgYm9yZGVyLXRvcFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogMzhweFwiXG4gICAgPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLWxpZ2h0IGJvcmRlciB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMSBidG4tbGlnaHRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZXNldEZpbHRlckNoYW5nZXMoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMycHhcIlxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtMVwiXG4gICAgICAgIChjbGljayk9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgPlxuICAgICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi10b3A6IC0ycHhcIj5TYXZlPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9yIFRleHQgZmllbGRzIGFuZCBudW1iZXIgZmllbGRzLS0+XG5cbiAgPGRpdlxuICAgIEBzbGlkZVRvZ2dsZVxuICAgICpuZ0lmPVwiXG4gICAgICBpc0ZpbHRlck9wZW4gJiZcbiAgICAgIChzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJyB8fFxuICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAndGltZScgfHxcbiAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnKVxuICAgIFwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgY2xhc3M9XCJzaGFkb3cgYWN0aW9ucy1kcm9wZG93biBtdC0xIHNob3cgc2hhZG93IGN1c3RvbS1tZW51IHRhYmxlLWxheW91dCBmaWx0ZXItY29sdW1ucyBwYi0yXCJcbiAgICBzdHlsZT1cIndpZHRoOiAyMTBweDsgcmlnaHQ6IHVuc2V0OyBtYXgtd2lkdGg6IDIzMHB4XCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImNoZWNrYm94ZXNCYWNrZ3JvdW5kQ29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInB4LTMgYm9yZGVyLWJlbG93IHB5LTEgcGItMiBkLWZsZXggcHMtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9hcnJvdy1sZWZ0LnN2ZydcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9ucygnZmlsdGVyLWNvbHVtbnMnKTsgaXNBY3RpdmVGaWx0ZXJPcGVuID0gZmFsc2VcIlxuICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBtZS0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgID48L3NwYW5cbiAgICAgID48Yj57eyBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8uaGVhZGVyIH19PC9iPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcG9zaXRpb24tcmVsYXRpdmUgcC0yIHRleHQtZmlsdGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbSBjdXN0b20tc2VsZWN0IGJvcmRlclwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJmaXJzdENvbmRpdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluXCI+Q29udGFpbnM8L29wdGlvbj5cbiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZG9lc19ub3RfY29udGFpblwiPkRvZXMgTm90IENvbnRhaW48L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPlN0YXJ0cyBXaXRoPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5FbmRzIFdpdGg8L29wdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnZGF0ZScgfHwgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3RpbWUnXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90X2VxdWFsXCI+Tm90IEVxdWFsPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkJlZm9yZTwvb3B0aW9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJlZm9yZVwiPkxlc3MgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFmdGVyXCI+R3JlYXRlciBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncmVhdGVyX3RoZW5fZXF1YWxcIj5HcmVhdGVyIHRoZW4gRXF1YWwgdG8gPC9vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBmaXJzdCB2YWx1ZVwiXG4gICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICBzZWxlY3RlZENvbHVtbkZvckZpbHRlcj8udHlwZSA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICA/ICd0ZXh0J1xuICAgICAgICAgICAgICA6IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpcnN0VmFsdWVcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbXktMyBkLWZsZXggZmxleC1yb3dcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbEFuZFwiXG4gICAgICAgICAgICAgIG5hbWU9XCJsb2dpY2FsT3BlcmF0b3JcIlxuICAgICAgICAgICAgICB2YWx1ZT1cImFuZFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxBbmRcIlxuICAgICAgICAgICAgICA+QU5EPC9sYWJlbFxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tY2hlY2staW5saW5lIGNvbC00IG0tMCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgaWQ9XCJsb2dpY2FsT3JcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJvclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZGl0aW9uXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1iLTAgbXQtMVwiIGZvcj1cImxvZ2ljYWxPclwiPk9SPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZSBjb2wtNCBtLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIGlkPVwibG9naWNhbE5vbmVcIlxuICAgICAgICAgICAgICBuYW1lPVwibG9naWNhbE9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgdmFsdWU9XCJub25lXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb25kaXRpb25cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbWItMCBtdC0xXCIgZm9yPVwibG9naWNhbE5vbmVcIlxuICAgICAgICAgICAgICA+Tm9uZTwvbGFiZWxcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmRpdGlvbiAhPT0gJ25vbmUnICYmIGZpcnN0VmFsdWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBtdC0zXCI+XG4gICAgICAgICAgICA8IS0tIFNlY29uZCBjb25kaXRpb24gc2VsZWN0IC0tPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtIGJvcmRlclwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kQ29uZGl0aW9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICdzdHJpbmcnXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNvbnRhaW5cIj5Db250YWluczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJkb2VzX25vdF9jb250YWluXCI+RG9lcyBOb3QgQ29udGFpbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFsczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5TdGFydHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkVuZHMgV2l0aDwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ2RhdGUnIHx8IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlID09ICd0aW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcXVhbFwiPkVxdWFscyBUbzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RfZXF1YWxcIj5Ob3QgRXF1YWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYWZ0ZXJcIj5BZnRlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJiZWZvcmVcIj5CZWZvcmU8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ251bWJlcidcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXF1YWxcIj5FcXVhbHMgVG88L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYmVmb3JlXCI+TGVzcyBUaGVuIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhZnRlclwiPkdyZWF0ZXIgVGhlbiA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibGVzc190aGVuX2VxdWFsXCI+bGVzcyB0aGVuIEVxdWFsIHRvPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImdyZWF0ZXJfdGhlbl9lcXVhbFwiPkdyZWF0ZXIgdGhlbiBFcXVhbCB0byA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgPCEtLSBTZWNvbmQgdmFsdWUgaW5wdXQgLS0+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2x1bW5Gb3JGaWx0ZXI/LnR5cGUgPT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgID8gJ3RleHQnXG4gICAgICAgICAgICAgICAgICA6IHNlbGVjdGVkQ29sdW1uRm9yRmlsdGVyPy50eXBlXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgc2Vjb25kIHZhbHVlXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2Vjb25kVmFsdWVcIlxuICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgcHgtMiBib3JkZXItdG9wXCJcbiAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzOHB4XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplICYmICFmaXJzdFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMnB4XCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1saWdodCBib3JkZXIgdy0xMDAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG10LTEgYnRuLWxpZ2h0XCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVzZXRUZXh0RmlsdGVyQ2hhbmdlcygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCIoY3VycmVudEZpbHRlclNlbGVjdGVkSWRzPy5zaXplID09PSAwICYmICFmaXJzdFZhbHVlKSB8fCAoY29uZGl0aW9uICE9PSAnbm9uZScgJiYgIXNlY29uZFZhbHVlKVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMzJweFwiXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHctMTAwIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC0xXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLXRvcDogLTJweFwiPkFwcGx5PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFZGl0IGRyb3Bkb3duIGhlcmUgLS0+XG48bmctdGVtcGxhdGUgbGV0LWNvbD5cbiAgPGRpdiBjbGFzcz1cImRyb3AtZG93bi1lZGl0XCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI2Z1bGxUZXh0VGVtcGxhdGVcbiAgbGV0LXJvdz1cInJvd1wiXG4gIGxldC1jb2w9XCJjb2xcIlxuICBsZXQtaXNBcnJheT1cImlzQXJyYXlcIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmdWxsLXRleHQtYm94XCJcbiAgICAoZGJsY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgIFtzdHlsZS5tYXhIZWlnaHQucHhdPVwiZGF0YUdyaWRDb250YWluZXIub2Zmc2V0SGVpZ2h0IC8gMlwiXG4gID5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZyhyb3csIGNvbClcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCIhaXNBcnJheVwiXG4gICAgICAgIGNsYXNzPVwiZnVsbC10ZXh0LWNvbnRlbnRcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cImRhdGFHcmlkQ29udGFpbmVyLm9mZnNldEhlaWdodCAvIDJcIlxuICAgICAgICAoZGJsY2xpY2spPVwiXG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGVuYWJsZUVkaXQocm93LCBjb2wsIHRydWUpXG4gICAgICAgIFwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgID5cbiAgICAgICAge3tcbiAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/LnZhbHVlIHx8XG4gICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShyb3csIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKHJvdywgY29sLmZpZWxkKVxuICAgICAgICB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNBcnJheVwiPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TmVzdGVkVmFsdWUocm93LCBjb2wuZmllbGQpOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGkgKm5nSWY9XCJpICE9PSAwXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIGl0ZW0/LmRlcGFydG1lbnRfbmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5yb2xlTmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBpdGVtPy5mdWxsX25hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgaXRlbT8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIi1cIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmcocm93LCBjb2wpXCI+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgKGRibGNsaWNrKT1cIlxuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlbmFibGVFZGl0KHJvdywgY29sLCB0cnVlKVxuICAgICAgICBcIlxuICAgICAgICAjdGV4dE1vZGVsPVwibmdNb2RlbFwiXG4gICAgICAgIHJvd3M9XCI0XCJcbiAgICAgICAgI3RleHRBcmVhZElucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbC5maWVsZF1cIlxuICAgICAgICBuYW1lPVwie3sgY29sLmZpZWxkIH19XCJcbiAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgKGJsdXIpPVwiZGlzYWJsZUVkaXQocm93LCBjb2wsIHRleHRNb2RlbClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0ZXh0QXJlYWRJbnB1dC5ibHVyKClcIlxuICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2lzLWludmFsaWQnOiB0ZXh0TW9kZWwuaW52YWxpZFxuICAgICAgICB9XCJcbiAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgPjwvdGV4dGFyZWE+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0SW1hZ2VQbGFjZWhvbGRlciBsZXQtcm93PVwicm93XCIgbGV0LWNvbD1cImNvbFwiPlxuICA8c3BhblxuICAgIGNsYXNzPVwicHgtMiBkLWZsZXggdy0xMDAgY2VsbC1jb250ZW50IGltYWdlLXBsYWNlaG9sZGVyXCJcbiAgICBbdGl0bGVdPVwicm93Py5mdWxsX25hbWUgfHwgcm93Py5uYW1lIHx8ICdOL0EnXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIHJvdz8ubG9nbyB8fFxuICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgIHJvdz8uaW52b2ljZT8uaW52b2ljZV9pbWFnZSB8fFxuICAgICAgICAgIHJvdz8uaW52b2ljZV9pbWFnZTtcbiAgICAgICAgZWxzZSBwbGFjZWhvbGRlclxuICAgICAgXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICAoY2xpY2spPVwiZnVsbHNjcmVlbkltYWdlID0gcm93Py5sb2dvIHx8IHJvdz8ucHJvZmlsZV9waWN0dXJlcz8uWzRdPy5wYXRoIHx8XG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlXCJcbiAgICAgICAgY2xhc3M9XCJwaWNcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEwXCJcbiAgICAgICAgW2NsYXNzLmFzc2V0cy1waWNdPVwiZ3JpZFR5cGUgPT0gJ0Fzc2V0cydcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgW3dpZHRoXT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwicm93SGVpZ2h0IC0gMTBcIlxuICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8ucHJvZmlsZV9waWN0dXJlcz8uWzRdPy5wYXRoIHx8XG4gICAgICAgICAgICByb3c/LmxvZ28gfHxcbiAgICAgICAgICAgIHJvdz8uYXNzZXRJbWFnZSB8fFxuICAgICAgICAgICAgcm93Py5pbnZvaWNlX2ltYWdlXG4gICAgICAgICAgXCJcbiAgICAgICAgICBhbHQ9XCJpY29uXCJcbiAgICAgICAgICBjbGFzcz1cIm9wdGlvbi1pY29uXCJcbiAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSA8ZGl2XG4gICAgICBjbGFzcz1cImZ1bGxzY3JlZW4tb3ZlcmxheVwiXG4gICAgICAqbmdJZj1cImZ1bGxzY3JlZW5JbWFnZVwiXG4gICAgICAoY2xpY2spPVwiZnVsbHNjcmVlbkltYWdlID0gbnVsbFwiXG4gICAgPlxuICAgICAgPGltZyBbc3JjXT1cImZ1bGxzY3JlZW5JbWFnZVwiIGNsYXNzPVwiZnVsbHNjcmVlbi1pbWdcIiAvPlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXI+XG4gICAgICA8c3BhblxuICAgICAgICBbbmdDbGFzc109XCJnZXREeW5hbWljQ2xhc3Mocm93Py5mdWxsX25hbWUgfHwgcm93Py5uYW1lKVwiXG4gICAgICAgIGNsYXNzPVwicGljIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcm91bmRlZC1jaXJjbGVcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVpZ2h0IC0gMTJcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cInJvd0hlaWdodCAvIDNcIlxuICAgICAgICBbY2xhc3MuYXNzZXRzLXBpY109XCJncmlkVHlwZSA9PSAnQXNzZXRzJ1wiXG4gICAgICA+XG4gICAgICAgIHt7IGdldEluaXRpYWxzKHJvdz8uZnVsbF9uYW1lKSB9fVxuICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmlnaHQgQ2xpY2sgTWVudWUgLS0+XG48ZGl2XG4gIFtjbGFzcy5pbnZpc2libGVdPVwiIXBvc2l0aW9uZWRZZXRcIlxuICBjbGFzcz1cImNvbnRleHQtbWVudSBwLTJcIlxuICAqbmdJZj1cImFjdGlvbkhpZGUgJiYgYWN0aW9ucz8ubGVuZ3RoXCJcbiAgW25nU3R5bGVdPVwieyAndG9wLnB4JzogeVBvcywgJ2xlZnQucHgnOiB4UG9zIH1cIlxuICBbY2xhc3Muc2hvd109XCJpc1Zpc2libGVcIlxuICBhcHBlbmRUbz1cImJvZHlcIlxuPlxuICA8dWw+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIlxuICAgICAgY2xhc3M9XCJyb3VuZGVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgKGNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soYWN0aW9uKVwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgW2lubGluZVNWR109XCJzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy8nICsgYWN0aW9uICsgJy5zdmcnXCJcbiAgICAgICAgY2xhc3M9XCJkYXRhLWdyaWQtc3ZnLWljb24gcmlnaHQtY2xpY2stbWVudS1pY29ucyBtZS0yXCJcbiAgICAgID48L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZSBmdy01MDBcIj57eyBhY3Rpb24gfX08L3NwYW4+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuXG48IS0tIERldGFpbHMgVG9nZ2xlIGZyb20gYm90dG9tIC0tPlxuXG48bmctdGVtcGxhdGUgI25lc3RlZFRhYmxlVGVtcGxhdGUgbGV0LXJvdz5cbiAgPGRpdlxuICAgIGNsYXNzPVwibmVzdGVkLXRhYmxlIHRhYmxlIHRhYmxlLXNtIHctMTAwIG1iLTAgY2VudGVyLW5lc3RlZC10YWJsZSB3LTEwMFwiXG4gICAgc3R5bGU9XCJ0YWJsZS1sYXlvdXQ6IGZpeGVkICFpbXBvcnRhbnRcIlxuICAgICNuZXN0ZWRUYWJsZUNvbnRhaW5lclxuICA+XG4gICAgPHRoZWFkXG4gICAgICAjbmVzdGVkSGVhZGVyXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cIm5lc3RlZFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwicm93Py5kZXRhaWwuY29sdW1uc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wQ29sdW1uKCRldmVudCwgcm93KVwiXG4gICAgICAgIChjZGtEcm9wTGlzdFNvcnRlZCk9XCJvbk5lc3RlZENvbFNvcnQoJGV2ZW50LCBwcmV2aWV3TmVzdGVkQ29scylcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIm5lc3RlZFRhYmxlSGVhZGVyUm93SGVpZ2h0XCJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggdHIgYm9yZGVyLWJlbG93XCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2Ygcm93LmRldGFpbC5jb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgW3N0eWxlLm1heFdpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICBjbGFzcz1cInB4LTQgdGhcIlxuICAgICAgICAgIFthdHRyLmZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJuZXN0ZWRUYWJsZUhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgY2RrRHJhZ1xuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggaC0xMDAganVzdGlmeS1jb250ZW50LWJldHdlZW4gcG9zaXRpb24tcmVsYXRpdmUgYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiIChjbGljayk9XCJzb3J0TmVzdGVkQ29sKGNvbCwgcm93KVwiPlxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRTdWJTb3J0Q29sdW1uID09IGNvbC5maWVsZFwiXG4gICAgICAgICAgICAgICAgW2lubGluZVNWR109XCJcbiAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggK1xuICAgICAgICAgICAgICAgICAgKGNvbD8ub3JkZXJfYnkgPT0gJ2Rlc2MnXG4gICAgICAgICAgICAgICAgICAgID8gJ2RhdGEtZ3JpZC9pY29ucy9zb3J0LWRlc2Muc3ZnJ1xuICAgICAgICAgICAgICAgICAgICA6ICdkYXRhLWdyaWQvaWNvbnMvc29ydC1hc2Muc3ZnJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0YS1ncmlkLXN2Zy1pY29uIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBtcy0yIHN0YXJ0LTUwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGhyZWUtZG90cyBwLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVGhyZWVEb3RzTWVudSgkZXZlbnQsIGNvbClcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9pY29ucy90aHJlZS1kb3RzLXZlcnRpY2FsLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgICA8IS0tIE9ubHkgc2hvdyBtZW51IGlmIHRoaXMgY29sdW1uIGlzIGFjdGl2ZSAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlQ29sID09PSBjb2xcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAtNTAlOyB6LWluZGV4OiAyMTsgbGVmdDogMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5NZW51O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29sOiBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgaXNOZXN0ZWRUYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiByb3c/LmRldGFpbC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgb25SZXNpemVDb2x1bW4oJGV2ZW50LCBjb2wpO1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbaW5saW5lU1ZHXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTcGFBc3NldHNQYXRoICsgJ2RhdGEtZ3JpZC9pY29ucy9yZXNpemUtaGFuZGxlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQcmV2aWV3PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiBib3JkZXIgZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZVNwYUFzc2V0c1BhdGggKyAnZGF0YS1ncmlkL2ljb25zL2Fycm93cy1tb3ZlLnN2ZydcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRhdGEtZ3JpZC1zdmctaWNvbiBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2Pnt7IGNvbC5oZWFkZXIgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC90aGVhZD5cbiAgICA8ZGl2XG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwibmVzdGVkSGVhZGVyLm9mZnNldFdpZHRoIC0gMTBcIlxuICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICA+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgIFtpdGVtU2l6ZV09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgIGNsYXNzPVwidmlld3BvcnRcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIlxuICAgICAgICAgIChyb3c/LmRldGFpbD8ucmVzdWx0Py5sZW5ndGggPCA1XG4gICAgICAgICAgICA/IG5lc3RlZFRhYmxlcm93SGVpZ2h0ICogcm93Py5kZXRhaWw/LnJlc3VsdD8ubGVuZ3RoICsgNDBcbiAgICAgICAgICAgIDogMzAwKSArIChoYXNIb3Jpem9udGFsU2Nyb2xsID8gLTEyIDogMSlcbiAgICAgICAgXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIm5lc3RlZEhlYWRlci5vZmZzZXRXaWR0aCAtIDEwXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWJlbG93IGQtZmxleCB0clwiXG4gICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgZCBvZiByb3c/LmRldGFpbD8ucmVzdWx0OyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVyb3dIZWlnaHRcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJuZXN0ZWRIZWFkZXI/Lm9mZnNldFdpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluV2lkdGgucHhdPVwibmVzdGVkSGVhZGVyPy5vZmZzZXRXaWR0aFwiXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJib2R5QmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCRldmVudCwgZClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJweC00IHB5LTAgdGRcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBwcmV2aWV3TmVzdGVkQ29sczsgbGV0IGogPSBpbmRleFwiXG4gICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwibmVzdGVkVGFibGVyb3dGb250c2l6ZVwiXG4gICAgICAgICAgICBbYXR0ci5maWVsZF09XCJjb2wuZmllbGRcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbD8ud2lkdGggfHwgMjUwXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCJjb2w/LndpZHRoIHx8IDI1MFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiY29sPy53aWR0aCB8fCAyNTBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodCAtIDFcIlxuICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbD8ud2lkdGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIHt7IGRbY29sLmZpZWxkXSB8fCAoY29sLmlzX2Ftb3VudCA/IDAgOiBcIi1cIikgfX0gLS0+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjY2VsbFRleHRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZWxsaXBzaXMgZmxleC1ncm93LTFcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICAgIGNvbD8udHlwZSA9PT0gJ2RhdGUnXG4gICAgICAgICAgICAgICAgICAgID8gKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfCBkYXRlIDogZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpIHx8ICctJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sPy50eXBlICE9PSAnaW1hZ2UnXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzX2Ftb3VudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sXG4gICAgICAgICAgICAgICAgICB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIWlzTmVzdGVkVmFsdWVBcnJheShkLCBjb2wuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2w/LnR5cGUgPT09ICdkYXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoaXNEYXRlKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKSB8IGRhdGU6IGRhdGVGb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoZ2V0TmVzdGVkVmFsdWUoZCwgY29sLmZpZWxkKT8udmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbC5pc19hbW91bnQgPyAwOiAnLScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LlswXT8uZGVwYXJ0bWVudF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROZXN0ZWRWYWx1ZShkLCBjb2wuZmllbGQpPy5bMF0/LnJvbGVOYW1lIHx8IGdldE5lc3RlZFZhbHVlKGQsIGNvbC5maWVsZCk/LlswXT8uZnVsbF9uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLScpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0VG90YWxBbW91bnQoY29sKSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2w/LnR5cGUgPT0gJ2ltYWdlJ1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRJbWFnZVBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogY29sLFxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xlZnRSaWdodE5lc3RlZFBsYWNlaG9sZGVyIGxldC1yb3c+XG4gIDx0YWJsZVxuICAgIGNsYXNzPVwibmVzdGVkLXRhYmxlIHRhYmxlIHRhYmxlLXNtIHctMTAwIG1iLTBcIlxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiYm9keUJhY2tncm91bmRDb2xvclwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJcbiAgICAgIGdyaWRUeXBlID09ICdBc3NldHMnXG4gICAgICAgID8gKG5lc3RlZFRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRIZWlnaHQgPz8gMCkgKyAxMlxuICAgICAgICA6ICh0YXNrTWFuYWdlbWVudENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0SGVpZ2h0ID8/IDApXG4gICAgXCJcbiAgPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRoZWFkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHIgZC1mbGV4IGJvcmRlci1iZWxvd1wiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibmVzdGVkVGFibGVIZWFkZXJSb3dIZWlnaHRcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aFwiICpuZ0Zvcj1cImxldCBfIG9mIFsxLCAyLCAzLCA0LCA1XVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRib2R5XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHIgYm9yZGVyLWJlbG93XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBfIG9mIHJvdz8uZGV0YWlsPy5yZXN1bHRcIlxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZENvbG9yXT1cImhlYWRlckJhY2tncm91bmRDb2xvclwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZFwiICpuZ0Zvcj1cImxldCBfXyBvZiBbMSwgMiwgMywgNCwgNV1cIiBjbGFzcz1cInB5LTBcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJuZXN0ZWRUYWJsZXJvd0hlaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIm5lc3RlZFRhYmxlcm93SGVpZ2h0XCJcbiAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC90YWJsZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGFza01hbmFnZW1lbnRUZW1wbGF0ZSBsZXQtdGFza0RldGFpbHM9XCJ0YXNrRGV0YWlsc1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJwLTRcIlxuICAgICN0YXNrTWFuYWdlbWVudENvbnRhaW5lclxuICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwibmVzdGVkVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgIFtzdHlsZS5mb250RmFpbWx5XT1cImZvbnRGYWltbHlcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+RGVzY3JpcHRpb248L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50IGZpcnN0RGl2XCI+XG4gICAgICAgIHt7IHRhc2tEZXRhaWxzLmRlc2NyaXB0aW9uIH19XG4gICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxwXG4gICAgICAgICAgW3N0eWxlLmZvbnRTaXplXT1cImJvZHlUZXh0Rm9udHNTaXplXCJcbiAgICAgICAgICBjbGFzcz1cIml0ZW0tY29udGVudCBmaXJzdERpdiB0YXNrRGVzY3JpcHRpb24gcGUtNFwiXG4gICAgICAgICAgW2lubmVySFRNTF09XCJnZXRTYWZlQ29tbWVudCh0YXNrRGV0YWlscz8uZWRpdG9yX2Rlc2NyaXB0aW9uKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wZW5GdWxsSW1hZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS10aXRsZVwiPkF0dGFjaG1lbnRzPC9kaXY+XG4gICAgICAgIDxoNSAqbmdJZj1cInRhc2tEZXRhaWxzPy5hdHRhY2htZW50cz8ubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICBObyBBdHRhY2htZW50cyBmb3VuZFxuICAgICAgICA8L2g1PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJ0YXNrRGV0YWlscz8uYXR0YWNobWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJpdGVtLWNvbnRlbnQgZC1mbGV4IGZsZXgtd3JhcFwiXG4gICAgICAgICAgc3R5bGU9XCJnYXA6IDEwcHhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhdHRhY2hlbWVudCBvZiB0YXNrRGV0YWlscz8uYXR0YWNobWVudHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJzeW1ib2wtbGFiZWwgZnMtMiBmdy1zZW1pYm9sZCB0ZXh0LXN1Y2Nlc3MgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgdGFza0RldGFpbHM/LmF0dGFjaG1lbnRzX25hbWVbaV0gfHwgJ0F0dGFjaG1lbnQnIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQXR0Y2htZW50KGF0dGFjaGVtZW50KVwiXG4gICAgICAgICAgICAgIFtpbmxpbmVTVkddPVwiXG4gICAgICAgICAgICAgICAgc2luZ2xlU3BhQXNzZXRzUGF0aCArXG4gICAgICAgICAgICAgICAgJ2RhdGEtZ3JpZC9kb2N1bWVudC1pY29ucy8nICtcbiAgICAgICAgICAgICAgICBnZXRFeHRlbnRpb24oYXR0YWNoZW1lbnQpICtcbiAgICAgICAgICAgICAgICAnLnN2ZydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICBDb21tZW50cyAoe3sgdGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGggfX0pXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aDUgKm5nSWY9XCJ0YXNrRGV0YWlscz8uY29tbWVudHM/Lmxlbmd0aCA9PSAwXCI+Tm8gQ29tbWVudHMgZm91bmQ8L2g1PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGFza0RldGFpbHM/LmNvbW1lbnRzPy5sZW5ndGhcIiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21tZW50XCIgKm5nRm9yPVwibGV0IGNvbW1lbnQgb2YgdGFza0RldGFpbHMuY29tbWVudHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGNsYXNzPVwicGljIGltYWdlLWlucHV0LXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHQgLSAxMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIlxuICAgICAgICAgICAgICAgIHNyYz1cInt7IGNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nbyB9fVwiXG4gICAgICAgICAgICAgICAgYWx0PVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwhLS0gPGFwcC1kZWZhdWx0LWltYWdlLXBsYWNlaG9sZGVyICpuZ0lmPVwiIWNvbW1lbnQ/LmNvbW1lbnRfYnkubG9nb1wiIHRpdGxlPVwie3sgY29tbWVudC5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVwiIFtuYW1lXT1cImNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWVcIj48L2FwcC1kZWZhdWx0LWltYWdlLXBsYWNlaG9sZGVyPiAtLT5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb21tZW50Py5jb21tZW50X2J5LmxvZ29cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldER5bmFtaWNDbGFzcyhjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwaWMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciByb3VuZGVkLWNpcmNsZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodCAtIDEyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuZm9udFNpemUucHhdPVwicm93SGVpZ2h0IC8gM1wiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyBjb21tZW50LmNvbW1lbnRfYnkuZnVsbF9uYW1lIH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldEluaXRpYWxzKGNvbW1lbnQuY29tbWVudF9ieS5mdWxsX25hbWUpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtYXV0aG9yIGZzLTE0cHhcIj5cbiAgICAgICAgICAgICAgICB7eyBjb21tZW50Py5jb21tZW50X2J5LmZ1bGxfbmFtZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbWVudC1jb250ZW50IGZvckNvbW1lbnRJbWdcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0U2FmZUNvbW1lbnQoY29tbWVudC5jb21tZW50KVwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbW1lbnQtdGltZXN0YW1wXCI+XG4gICAgICAgICAgICAgICAge3sgY29tbWVudC5jb21tZW50X2RhdGUgfCBkYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tbWVudC10aW1lc3RhbXBcIj5cbiAgICAgICAgICAgICAgICBSZXBsaWVzOiAoe3sgY29tbWVudC5yZXBsaWVzLmxlbmd0aCB9fSlcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|