barsa-novin-ray-core 2.2.63 → 2.2.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -956,4 +956,8 @@ export function validateAllFormFields(formGroup) {
956
956
  }
957
957
  });
958
958
  }
959
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFleEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhHLE1BQU0sQ0FBTixJQUFZLG9CQUtYO0FBTEQsV0FBWSxvQkFBb0I7SUFDNUIscUZBQW1CLENBQUE7SUFDbkIsbUZBQWtCLENBQUE7SUFDbEIsbUZBQWtCLENBQUE7SUFDbEIsNkVBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTFcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQUsvQjtBQUNELE1BQU0sVUFBVSxlQUFlLENBQzNCLGVBQXFDLEVBQ3JDLE9BQTJCLEVBQzNCLE1BQThCLEVBQzlCLFNBQW9CO0lBRXBCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixRQUFRLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEtBQUssb0JBQW9CLENBQUMsZUFBZTtZQUNyQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1lBQzNCLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsUUFBUSxHQUFHLG9CQUFvQixDQUFDO1lBQ2hDLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUNwQixNQUFNO1FBQ1YsS0FBSyxvQkFB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QUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzlDLEtBQUs7UUFDTCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztRQUMzQyxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUNqQyxLQUFLO1lBQ0wsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxLQUFLO1lBQ0wscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ3pDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG5pbXBvcnQgeyBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XHJcbmltcG9ydCB7IEJhcnNhQXBpIH0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL2JhcnNhLWFwaSc7XHJcbmltcG9ydCB7XHJcbiAgICBBYmJyZXZhdGlvbkRldmljZVNpemUsXHJcbiAgICBDb2xTZXR0aW5nLFxyXG4gICAgRWpyYXlPbGdvLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcclxuICAgIEdyaWRTZXR0aW5nLFxyXG4gICAgTGF5b3V0U2V0dGluZyxcclxuICAgIE1lbnVJdGVtLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBTb3J0U2V0dGluZyxcclxuICAgIFRyZWVOb2RlT2JqXHJcbn0gZnJvbSAnLi9hYnN0cmFjdC1jbGFzc2VzL21vZGVscyc7XHJcbmltcG9ydCB7IERhdGVIaWpyaVNlcnZpY2UsIERhdGVNaWxhZGlTZXJ2aWNlLCBEYXRlU2VydmljZSwgRGF0ZVNoYW1zaVNlcnZpY2UgfSBmcm9tICcuL2RhdGUtc2VydmljZXMnO1xyXG5pbXBvcnQgKiBhcyBEZXZpY2UgZnJvbSAnLi9kZXZpY2UnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9sb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuZXhwb3J0IGVudW0gVGFibGVIZWFkZXJXaWR0aE1vZGUge1xyXG4gICAgRml0VG9Sb3dDb250ZW50ID0gMSxcclxuICAgIEZpdFRvQ29udGFpbmVyID0gMixcclxuICAgIEZyZWVDb2x1bW5TaXplID0gMyxcclxuICAgIENvbHVtbldpZHRoID0gNFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWJsZVRoV2lkdGgoXHJcbiAgICB0YWJsZUhlYWRlck1vZGU6IFRhYmxlSGVhZGVyV2lkdGhNb2RlLFxyXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLFxyXG4gICAgdGhMaXN0OiBIVE1MVGFibGVDZWxsRWxlbWVudFtdLFxyXG4gICAgcmVuZGVyZXIyOiBSZW5kZXJlcjJcclxuKTogdm9pZCB7XHJcbiAgICBsZXQgcHJvcE5hbWUgPSAnJztcclxuICAgIHN3aXRjaCAodGFibGVIZWFkZXJNb2RlKSB7XHJcbiAgICAgICAgY2FzZSBUYWJsZUhlYWRlcldpZHRoTW9kZS5GaXRUb1Jvd0NvbnRlbnQ6XHJcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRGaXRUb0NvbnRlbnQnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvQ29udGFpbmVyOlxyXG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckRml0Q29udGFpbmVyV2lkdGgnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZyZWVDb2x1bW5TaXplOlxyXG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckV2lkdGgnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkNvbHVtbldpZHRoOlxyXG4gICAgICAgICAgICBwcm9wTmFtZSA9ICckQ29sdW1uV2lkdGgnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoTGlzdC5mb3JFYWNoKChjLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd3ggPSBfY2FsY1dpZHRoT2ZUaChjb2x1bW5zW2ldLCBpLCBwcm9wTmFtZSwgdGhMaXN0KTtcclxuICAgICAgICB3eCAmJiByZW5kZXJlcjIuc2V0U3R5bGUoYywgJ3dpZHRoJywgd3gpO1xyXG4gICAgfSk7XHJcbn1cclxuZnVuY3Rpb24gX2NhbGNXaWR0aE9mVGgoY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uLCBpOiBudW1iZXIsIHByb3BOYW1lOiBzdHJpbmcsIHRoTGlzdCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGlmIChjb2x1bW4uJElzSW1hZ2VPcmljb24gJiYgaSA8IHRoTGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRUeXBlSWQgPSArY29sdW1uLkZpZWxkVHlwZUlkO1xyXG4gICAgICAgIGlmIChmaWVsZFR5cGVJZCA9PT0gNiB8fCBmaWVsZFR5cGVJZCA9PT0gNSB8fCBmaWVsZFR5cGVJZCA9PT0gNDIpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcyNHB4JztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29sdW1uLiRJc0ltYWdlT3JpY29uICYmIGkgPCB0aExpc3QubGVuZ3RoIC0gMSA/ICc0MnB4JyA6IGNvbHVtbltwcm9wTmFtZV07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbHVtbkNvbnRlbnQoY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgc2V0Q29sdW1uV2lkdGhCeU1heE1vQ29udGVudFdpZHRoKG1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGgoXHJcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50LFxyXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdLFxyXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdXHJcbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XHJcbiAgICBjb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxyXG4gICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICBjb25zdCBjb250ZXh0TWVudVdpZHRoID0gY2FsY0NvbnRleHRNZW51V2lkdGgoY29udGV4dE1lbnVJdGVtcywgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3cpO1xyXG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XHJcbn1cclxuZnVuY3Rpb24gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbik6IG51bWJlciB7XHJcbiAgICBpZiAoY29sdW1uLiRDb2x1bW5XaWR0aE51bSkge1xyXG4gICAgICAgIHJldHVybiBjb2x1bW4uJENvbHVtbldpZHRoTnVtO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29sQ2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY29sdW1uLkFsaWFzKSArIDE2ICsgMTA7XHJcbiAgICBjb2x1bW4uJENvbHVtbldpZHRoTnVtID0gTWF0aC5jZWlsKGNvbENhcHRpb25XaWR0aCk7XHJcbiAgICBjb2x1bW4uJENvbHVtbldpZHRoID0gYCR7Y29sdW1uLiRDb2x1bW5XaWR0aE51bX1weGA7XHJcbiAgICByZXR1cm4gY29sQ2FwdGlvbldpZHRoO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4pIHtcclxuICAgIGNvbnN0IHdpZHRoID0gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShtb0RhdGFMaXN0LCBjb2x1bW4pO1xyXG4gICAgY29sdW1uLiRDb250ZW50V2lkdGggPSBgJHtNYXRoLmNlaWwod2lkdGgpfXB4YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZU1vRGF0YUxpc3RDb250ZW50V2lkdGhCeUNvbHVtbk5hbWUoXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW5cclxuKTogbnVtYmVyIHtcclxuICAgIGxldCBtYXhXaWR0aCA9IDA7XHJcbiAgICBtb0RhdGFMaXN0LmZvckVhY2goKGMsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2FwdGlvbiA9IGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KGNvbHVtbi5OYW1lLCBjLCB1bmRlZmluZWQsIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGNhcHRpb25XaWR0aCA9IG1lYXN1cmVUZXh0KGNhcHRpb24pICsgMTY7XHJcbiAgICAgICAgaWYgKG1heFdpZHRoIDwgY2FwdGlvbldpZHRoKSB7XHJcbiAgICAgICAgICAgIG1heFdpZHRoID0gY2FwdGlvbldpZHRoO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChtYXhXaWR0aCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUZyZWVDb2x1bW5TaXplKGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSk6IFJlcG9ydFZpZXdDb2x1bW5bXSB7XHJcbiAgICBsZXQgYWxsQ29sV2lkdGggPSAwO1xyXG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKTtcclxuXHJcbiAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeCA9IHNldENvbHVtbkNhcHRpb25XaWR0aChjb2wpO1xyXG4gICAgICAgIGNvbnN0IHcgPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IHg7XHJcbiAgICAgICAgYWxsQ29sV2lkdGggKz0gdztcclxuICAgICAgICBjb2wuJFdpZHRoID0gaW5kZXggPT09IHZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEgPyAnMTAwJScgOiBgJHt3fXB4YDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIFsuLi5jb2x1bW5zXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uV2lkdGhGaXRUb0NvbnRhaW5lcihcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjYW5WaWV3OiBib29sZWFuLFxyXG4gICAgZGlzYWJsZUNvbnRleHRNZW51T3ZlcmZsb3c6IGJvb2xlYW4sXHJcbiAgICBjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLFxyXG4gICAgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdXHJcbik6IHsgY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdOyBjb250ZXh0TWVudVdpZHRoOiBudW1iZXIgfSB7XHJcbiAgICBsZXQgaGFzRGVmaW5lZFdpZHRoID0gdHJ1ZTtcclxuICAgIGxldCBjb250YWluZXJXaWR0aCA9IGNvbHVtbnMubWFwKChjKSA9PiBjLldpZHRoKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcclxuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkge1xyXG4gICAgICAgIGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xyXG4gICAgICAgIGhhc0RlZmluZWRXaWR0aCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGFsbENvbFdpZHRoID0gMDtcclxuICAgIGNvbnN0IGlzTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgIGxldCByZW1haW5QZXJjZW50ID0gMDtcclxuICAgIGNvbnN0IGxDb2xzID0gY29sdW1ucy5maWx0ZXIoKGMsIGkpID0+ICFjLkhpZGRlbiAmJiAhKGkgPT09IDAgJiYgYy5GaWVsZFR5cGVJZCA9PT0gNDEpKTtcclxuICAgIGxDb2xzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgICAvLyDYp9qv2LEg2YHbjNmE2K8g2KfYsiDZhtmI2Lkg2LHZhtqvINmG2KjZiNivINmIINiz2KrZiNmGINin2YjZhCDZh9mFINmG2KjZiNivXHJcbiAgICAgICAgY29uc3QgeCA9IHNldENvbHVtbkNhcHRpb25XaWR0aChjb2wpO1xyXG4gICAgICAgIGNvbnN0IHcgPSBjb2wuV2lkdGggJiYgY29sLldpZHRoID4gMCA/IGNvbC5XaWR0aCA6IHg7XHJcbiAgICAgICAgYWxsQ29sV2lkdGggKz0gdztcclxuICAgICAgICBjb25zdCBwZXJjZW50ID0gKHcgLyBjb250YWluZXJXaWR0aCkgKiAxMDA7XHJcbiAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IGlzTW9iaWxlIHx8IGNvbC5XaWR0aCA9PT0gMCA/ICcxMDAlJyA6IGAke3BlcmNlbnR9JWA7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gbENvbHMubGVuZ3RoIC0gMSAmJiAhaGFzRGVmaW5lZFdpZHRoKSB7XHJcbiAgICAgICAgICAgIGNvbC4kRml0Q29udGFpbmVyV2lkdGggPSAxMDAgLSByZW1haW5QZXJjZW50ICsgJyUnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbWFpblBlcmNlbnQgKz0gcGVyY2VudDtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnN0IGNhblZpZXdCdXR0b25XaWR0aCA9IGNhblZpZXcgPyA0MCA6IDA7XHJcbiAgICAvLyBjb25zdCBzZWxlY3Rpb25XaWR0aCA9IDMwO1xyXG5cclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBjYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICAvLyBjb25zdCBjb250YWluZXJXaWR0aEFsbENvbHVtbnMgPSBjb250YWluZXJXaWR0aCAtIHNlbGVjdGlvbldpZHRoIC0gY2FuVmlld0J1dHRvbldpZHRoIC0gY29udGV4dE1lbnVXaWR0aCAtIDEyO1xyXG4gICAgLy8gYWxsQ29sV2lkdGggKz0gY29udGFpbmVyV2lkdGhBbGxDb2x1bW5zIC0gYWxsQ29sV2lkdGg7Ly8g2YXYrdin2LPYqNmHINii2K7YsduM2YYg2LPYqtmI2YYu2obZiNmGIHdpZHRoINmF2LTYrti124wg2YbYr9in2LHYr1xyXG4gICAgLy8gY29sdW1uc1xyXG4gICAgLy8gICAgIC5maWx0ZXIoKGMpID0+ICFjLkhpZGRlbilcclxuICAgIC8vICAgICAuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5jZWlsKChjb250YWluZXJXaWR0aEFsbENvbHVtbnMgKiBjb2wuV2lkdGgpIC8gYWxsQ29sV2lkdGgpO1xyXG4gICAgLy8gICAgICAgICBjb2wuV2lkdGggPSBuZXdXaWR0aDtcclxuICAgIC8vICAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IGAke25ld1dpZHRofXB4YDtcclxuICAgIC8vICAgICB9KTtcclxuICAgIHJldHVybiB7IGNvbHVtbnM6IFsuLi5jb2x1bW5zXSwgY29udGV4dE1lbnVXaWR0aCB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zOiBNZW51SXRlbVtdLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICBsZXQgY29udGV4dE1lbnVXaWR0aCA9IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMSA/IDQwIDogMDtcclxuICAgIGNvbnN0IGJ0blBhZGRpbmcgPSAxNCArIDIgKyAxMDsgLy8gcGFkZGluZyArIGJvcmRlciArIGlmIHRleHQgaXMgb3ZlcmZsb3dlZCB0aGVuIGFkZCA1IHBpeGVsLnNvIHdlIGFsd2F5cyA1IHB4IHRvIGl0LlxyXG4gICAgY29uc3QgdGRQYWRkaW5nID0gMTUgKyAxOyAvLyBwYWRkaW5nICsgYm9yZGVyXHJcbiAgICBjb25zdCBidXR0b25JY29uV2lkdGggPSAxNiArIDY7IC8vIHNpemUgKyBtYXJnaW5cclxuICAgIGlmIChkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyB8fCBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIGNvbnRleHRNZW51V2lkdGggPSAwO1xyXG4gICAgICAgIGNvbnRleHRNZW51SXRlbXMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IG1lYXN1cmVUZXh0KGMudGV4dCkgKyBidG5QYWRkaW5nICsgdGRQYWRkaW5nO1xyXG4gICAgICAgICAgICBjb250ZXh0TWVudVdpZHRoICs9IGMuaWNvbiA/IGJ1dHRvbkljb25XaWR0aCA6IDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGV4dE1lbnVXaWR0aDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbkxvY2FsTW9kZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9mZmxpbmNlQWN0aXZlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoQmFyc2FBcGkuT2ZmbGluZSwgJ1NldHRpbmdzLklzQWN0aXZlJywgZmFsc2UpO1xyXG4gICAgY29uc3Qgb2ZmbGluZVRydWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShCYXJzYUFwaS5PZmZsaW5lLCAnU2V0dGluZ3MuSXNPZmZsaW5lJywgZmFsc2UpO1xyXG4gICAgcmV0dXJuIG9mZmxpbmNlQWN0aXZlICYmIG9mZmxpbmVUcnVlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbFdpZHRoKGl0ZW06IGFueSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmaWVsZFh0eXBlID0gaXRlbS5GaWVsZFVpPy5vcmlnaW5hbFh0eXBlO1xyXG4gICAgaWYgKFxyXG4gICAgICAgIGZpZWxkWHR5cGUgPT09ICdVaS5CdXR0b24nIHx8XHJcbiAgICAgICAgZmllbGRYdHlwZSA9PT0gJ1VpLkNoZWNrQm94JyB8fFxyXG4gICAgICAgICFpdGVtLlRleHRWaXNpYmxlIHx8XHJcbiAgICAgICAgaXRlbS5DYXB0aW9uU2V0dGluZz8uQWxpZ25Nb2RlID09PSAnQXV0b1NpemUnXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgbGFiZWxDYXB0aW9uID0gaXRlbS5DYXB0aW9uO1xyXG4gICAgaWYgKGxhYmVsQ2FwdGlvbiA9PT0gJyZ6d25qOycpIHtcclxuICAgICAgICBsYWJlbENhcHRpb24gPSAnJztcclxuICAgIH1cclxuICAgIGxhYmVsQ2FwdGlvbiA9IGxhYmVsQ2FwdGlvbiArICcgKiAnO1xyXG4gICAgLy8gaWYgKGl0ZW0uRmllbGRVaT8uU2V0dGluZz8uSXNNYW5kYXRvcnkpIHtcclxuICAgIC8vICAgICBpZiAobGFiZWxDYXB0aW9uLmluZGV4T2YoJyonKSA8IDApIHtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICAgIGxhYmVsQ2FwdGlvbiA9IGxhYmVsQ2FwdGlvbi5yZXBsYWNlKCcqJywgJycpO1xyXG4gICAgLy8gfVxyXG4gICAgbGFiZWxDYXB0aW9uICs9ICc6JztcclxuICAgIGNvbnN0IGxhYmVsV2lkdGggPSBtZWFzdXJlVGV4dChsYWJlbENhcHRpb24pO1xyXG4gICAgbGV0IGxhYmVsV2l0aFBhZGRpbmcgPSBsYWJlbFdpZHRoICsgMTA7XHJcbiAgICBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5GaWVsZEljb24pIHtcclxuICAgICAgICBsYWJlbFdpdGhQYWRkaW5nICs9IDI0O1xyXG4gICAgfVxyXG4gICAgaWYgKGl0ZW0uRmllbGRVaT8uU2V0dGluZz8uSGVscERlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgbGFiZWxXaXRoUGFkZGluZyArPSAyNDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sV2lkdGggPSBNYXRoLmNlaWwobGFiZWxXaXRoUGFkZGluZyk7XHJcbiAgICByZXR1cm4gY29udHJvbFdpZHRoO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5WYWx1ZU9mTW9EYXRhTGlzdChcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgQ29sdW1ucz86IHsgW2tleTogc3RyaW5nXTogYW55OyBOYW1lOiBzdHJpbmc7IENhcHRpb246IHN0cmluZyB9W10sXHJcbiAgICBjYXB0aW9uPzogYm9vbGVhblxyXG4pOiBhbnkge1xyXG4gICAgbGV0IGZpZWxkTmFtZSA9IENvbHVtbnMgPyBDb2x1bW5zLmZpbmQoKGMpID0+IGMuTmFtZSA9PT0gbmFtZSB8fCBjLkFsaWFzID09PSBuYW1lKT8uTmFtZSA6IG5hbWU7XHJcbiAgICBpZiAoIWZpZWxkTmFtZSkge1xyXG4gICAgICAgIGZpZWxkTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsID0gZmllbGROYW1lID8gbW9bZmllbGROYW1lXSA6IHVuZGVmaW5lZDtcclxuICAgIGlmIChjYXB0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNhcHRpb25WYWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdPy4kQ2FwdGlvbiA6IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWwgPSBjYXB0aW9uVmFsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dJZkFscmVhZHlMb2FkZWQocGFyZW50TW9kdWxlOiBhbnksIG1vZHVsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHBhcmVudE1vZHVsZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gSW1wb3J0ICR7bW9kdWxlTmFtZX0gaW4gdGhlIEFwcE1vZHVsZSBvbmx5LmApO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IG1lYXN1cmVUZXh0VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dCh0ZXh0OiBzdHJpbmcsIGZvbnRTaXplPzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmIChtZWFzdXJlVGV4dFZhbHVlc1t0ZXh0XSkge1xyXG4gICAgICAgIHJldHVybiBtZWFzdXJlVGV4dFZhbHVlc1t0ZXh0XTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtZWFzdXJlVGV4dERvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWFzdXJlVGV4dCcpIGFzIEhUTUxDYW52YXNFbGVtZW50O1xyXG4gICAgaWYgKCFtZWFzdXJlVGV4dERvbSkge1xyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdHggPSBtZWFzdXJlVGV4dERvbS5nZXRDb250ZXh0KCcyZCcpIGFzIGFueTtcclxuICAgIGZvbnRTaXplID0gZm9udFNpemUgPyBmb250U2l6ZSA6ICcwLjg4NXJlbSc7XHJcbiAgICBjdHguZm9udCA9IGBub3JtYWwgJHtmb250U2l6ZX0gSVJBTllla2FuRGlnaXRzYDtcclxuICAgIGNvbnN0IHggPSBjdHgubWVhc3VyZVRleHQodGV4dCkud2lkdGg7XHJcbiAgICBtZWFzdXJlVGV4dFZhbHVlc1t0ZXh0XSA9IHg7XHJcbiAgICByZXR1cm4geDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2VucmF0ZUlubGluZU1vSWQoKSB7XHJcbiAgICByZXR1cm4gKEJhcnNhQXBpLmlkR2VuZXJhdG9yLS0pLnRvU3RyaW5nKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGVudW1WYWx1ZVRvU3RyaW5nU2l6ZSh2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHZhbHVlKSB7XHJcbiAgICAgICAgY2FzZSAnMSc6XHJcbiAgICAgICAgICAgIHJldHVybiAncyc7XHJcbiAgICAgICAgY2FzZSAnMic6XHJcbiAgICAgICAgICAgIHJldHVybiAnbSc7XHJcbiAgICAgICAgY2FzZSAnMyc6XHJcbiAgICAgICAgICAgIHJldHVybiAnbCc7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucz8pOiB2b2lkIHtcclxuICAgIGlmIChidXR0b24uQ29tbWFuZCAmJiBidXR0b24uQ29tbWFuZC5IYW5kbGVyKSB7XHJcbiAgICAgICAgYnV0dG9uLkNvbW1hbmQuSGFuZGxlcihidXR0b24sIG9wdGlvbnMpO1xyXG4gICAgfSBlbHNlIGlmIChidXR0b24uaGFuZGxlcikge1xyXG4gICAgICAgIGJ1dHRvbi5oYW5kbGVyLmJpbmQoYnV0dG9uLnNjb3BlKShidXR0b24sIG9wdGlvbnMpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlxdWVJZChwYXJ0czogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHN0cmluZ0Fycjogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHM7IGkrKykge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXHJcbiAgICAgICAgY29uc3QgUzQgPSAoKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKSB8IDApLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICBjb25zdCBTNF86IHN0cmluZyA9IFM0Lmxlbmd0aCA+IDAgPyBTNC5zdWJzdHJpbmcoMSkgOiAnJztcclxuICAgICAgICBzdHJpbmdBcnIucHVzaChTNF8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cmluZ0Fyci5qb2luKCctJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlU2VydmljZShsb2dTZXJ2aWNlOiBMb2dTZXJ2aWNlLCBjdWx0dXJlPyk6IERhdGVTZXJ2aWNlIHtcclxuICAgIGNvbnN0IGRlZmF1bHRDdWx0dXJlID0gY3VsdHVyZSA/PyBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkN1bHR1cmU7XHJcbiAgICBzd2l0Y2ggKGRlZmF1bHRDdWx0dXJlKSB7XHJcbiAgICAgICAgY2FzZSAnZmEtSVInOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVTaGFtc2lTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGNhc2UgJ2FyLUFFJzpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlSGlqcmlTZXJ2aWNlKGxvZ1NlcnZpY2UpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZU1pbGFkaVNlcnZpY2UobG9nU2VydmljZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbEl0ZW1zUGVyQ2hpbGRyZW4oXHJcbiAgICBpdGVtOiBUcmVlTm9kZU9iaixcclxuICAgIGxldmVsOiBudW1iZXIsXHJcbiAgICBhcnJheTogTWV0YW9iamVjdERhdGFNb2RlbFtdLFxyXG4gICAgcGFyZW50Tm9kZTogVHJlZU5vZGVPYmosXHJcbiAgICBhdXRvT3BlbkxldmVsczogbnVtYmVyXHJcbik6IGFueSB7XHJcbiAgICBsZXQgbmV3SXRlbTogYW55ID0gaXRlbTtcclxuICAgIGlmIChsZXZlbCA+IDApIHtcclxuICAgICAgICBpdGVtLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWwgPSBsZXZlbDtcclxuICAgICAgICBpdGVtLmlzRXhwYW5kID0gaXRlbS5pc0V4cGFuZCA/PyBhdXRvT3BlbkxldmVscyA+IGxldmVsO1xyXG4gICAgICAgIGl0ZW0udmlzaWJpbGl0eSA9IGl0ZW0ucGFyZW50Tm9kZS5pc0V4cGFuZDtcclxuICAgICAgICBhcnJheS5wdXNoKG5ld0l0ZW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdJdGVtID0gaXRlbTtcclxuICAgICAgICBuZXdJdGVtLmlzRXhwYW5kID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHNldE9uZURlcHRoTGV2ZWwoY2hpbGQpKTtcclxuICAgICAgICByZXR1cm4gaXRlbS5jaGlsZHJlbi5tYXAoKGkpID0+IGdldEFsbEl0ZW1zUGVyQ2hpbGRyZW4oaSwgbGV2ZWwgKyAxLCBhcnJheSwgbmV3SXRlbSwgYXV0b09wZW5MZXZlbHMpKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0T25lRGVwdGhMZXZlbChub2RlKTogdm9pZCB7XHJcbiAgICBsZXQgaGFzT25lRGVwdGggPSB0cnVlO1xyXG4gICAgbm9kZS5jaGlsZHJlbj8uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICBpZiAoY2hpbGQuRGF0YT8uJEhhc0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGhhc09uZURlcHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIG5vZGUuaGFzT25lRGVwdGhMZXZlbCA9IGhhc09uZURlcHRoO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpcmVmb3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVBhdGgoXHJcbiAgICB0eXBlOiBzdHJpbmcsXHJcbiAgICBtb0lkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgZmlsZUlkOiBzdHJpbmcsXHJcbiAgICBmaWVsZERlZklkPzogc3RyaW5nLFxyXG4gICAgc2l6ZT86IG51bWJlcixcclxuICAgIHNpemVIPzogbnVtYmVyXHJcbik6IHN0cmluZyB7XHJcbiAgICBtb0lkID0gbW9JZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQobW9JZCk7XHJcbiAgICBmaWxlSWQgPSBmaWxlSWQgPT0gbnVsbCA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVJZCk7XHJcbiAgICBmaWVsZERlZklkID0gZmllbGREZWZJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmllbGREZWZJZCk7XHJcbiAgICBzaXplID0gc2l6ZSA9PSBudWxsID8gMTI4IDogc2l6ZTtcclxuICAgIHNpemVIID0gc2l6ZUggPT0gbnVsbCA/IHNpemUgOiBzaXplSDtcclxuICAgIGNvbnN0IHVybCA9IGAvSUguYXNoeD90eT0ke3R5cGV9Jm1vSWQ9JHttb0lkfSZpZD0ke2ZpbGVJZH0mZmRJZD0ke2ZpZWxkRGVmSWR9JnNpPSR7c2l6ZX0mc2lIPSR7c2l6ZUh9YDtcclxuICAgIHJldHVybiB1cmw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmN0aW9uVG9DaGVjayk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiB7fS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIERldmljZVdpZHRoKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPiAwID8gd2luZG93LmlubmVyV2lkdGggOiBzY3JlZW4ud2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlclZhbHVlKGZpZWxkVmFsdWUsIHJldHVyblZhbHVlPzogdHJ1ZSk6IGFueSB7XHJcbiAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWUgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkVmFsdWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkVmFsdWUuVmFsdWU7XHJcbiAgICBjb25zdCB2YWx1ZUNhcHRpb246IHN0cmluZyA9IGZpZWxkVmFsdWUuVmFsdWUkQ2FwdGlvbjtcclxuICAgIGxldCB2YWx1ZU9iamVjdENhcHRpb24gPSBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICB2YWx1ZU9iamVjdENhcHRpb24gPSBmaWVsZFZhbHVlLlZhbHVlLiRDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlT2JqZWN0Q2FwdGlvbiAmJiAhcmV0dXJuVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWVPYmplY3RDYXB0aW9uO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlQ2FwdGlvbiAmJiAhdmFsdWVDYXB0aW9uLnN0YXJ0c1dpdGgoJ3RtcCcpICYmICFyZXR1cm5WYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZUNhcHRpb247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRJblZpZXdwb3J0MihlbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdG9wID0gZWwub2Zmc2V0VG9wO1xyXG4gICAgbGV0IGxlZnQgPSBlbC5vZmZzZXRMZWZ0O1xyXG4gICAgY29uc3Qgd2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcclxuICAgIGNvbnN0IGhlaWdodCA9IGVsLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICB3aGlsZSAoZWwub2Zmc2V0UGFyZW50KSB7XHJcbiAgICAgICAgZWwgPSBlbC5vZmZzZXRQYXJlbnQ7XHJcbiAgICAgICAgdG9wICs9IGVsLm9mZnNldFRvcDtcclxuICAgICAgICBsZWZ0ICs9IGVsLm9mZnNldExlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICB0b3AgPCB3aW5kb3cucGFnZVlPZmZzZXQgKyB3aW5kb3cuaW5uZXJIZWlnaHQgJiZcclxuICAgICAgICBsZWZ0IDwgd2luZG93LnBhZ2VYT2Zmc2V0ICsgd2luZG93LmlubmVyV2lkdGggJiZcclxuICAgICAgICB0b3AgKyBoZWlnaHQgPiB3aW5kb3cucGFnZVlPZmZzZXQgJiZcclxuICAgICAgICBsZWZ0ICsgd2lkdGggPiB3aW5kb3cucGFnZVhPZmZzZXRcclxuICAgICk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIFByZXZlbnREZWZhdWxFdmVudChlLCBwcm9wYWdhdGlvbkRpc2FibGUgPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAocHJvcGFnYXRpb25EaXNhYmxlKSB7XHJcbiAgICAgICAgc3RvcFByb3BhZ2F0aW9uKGUpO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZSk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SGVpZ2h0KGVsRG9tOiBIVE1MRWxlbWVudCk6IG51bWJlciB7XHJcbiAgICBsZXQgcGFyZW50RG9tID0gZWxEb20ucGFyZW50RWxlbWVudDtcclxuICAgIGxldCBwYXJlbnRIZWlnaHQgPSBwYXJlbnREb20/LmNsaWVudEhlaWdodCA/PyAwO1xyXG4gICAgd2hpbGUgKHBhcmVudERvbSAhPSBudWxsICYmIHBhcmVudEhlaWdodCA8IDQwKSB7XHJcbiAgICAgICAgcGFyZW50RG9tID0gcGFyZW50RG9tLnBhcmVudEVsZW1lbnQ7XHJcbiAgICAgICAgcGFyZW50SGVpZ2h0ID0gcGFyZW50RG9tPy5jbGllbnRIZWlnaHQgPz8gMDtcclxuICAgIH1cclxuICAgIHJldHVybiBwYXJlbnRIZWlnaHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnREZWZpbmVkKFxyXG4gICAgY29udHJvbFVpOiB7IG9yaWdpbmFsWHR5cGU6IHN0cmluZyB9LFxyXG4gICAgY3VzdG9tVWlTZXR0aW5nOiB7IE1vZHVsZTogc3RyaW5nOyBOYW1lOiBzdHJpbmc7IFNlbGVjdG9yOiBzdHJpbmcgfVxyXG4pOiB7XHJcbiAgICBtb2R1bGVOYW1lOiBzdHJpbmc7XHJcbiAgICBtb2R1bGVQYXRoOiBzdHJpbmc7XHJcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmc7XHJcbiAgICBzZWxlY3Rvcjogc3RyaW5nO1xyXG59IHtcclxuICAgIGxldCBtb2R1bGVOYW1lID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5EZWZhdWx0VWlNb2R1bGU7XHJcbiAgICBsZXQgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xyXG4gICAgbGV0IGNvbXBvbmVudE5hbWUgPSBjb250cm9sVWkub3JpZ2luYWxYdHlwZS5yZXBsYWNlKCcuJywgJycpLnJlcGxhY2UoJ18nLCAnJyk7XHJcbiAgICBsZXQgc2VsZWN0b3I6IHN0cmluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShjb21wb25lbnROYW1lKTtcclxuICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEsIHNlbGVjdG9yLmxlbmd0aCk7XHJcbiAgICBzZWxlY3RvciA9IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VzdG9tVWlQcmVmaXggKyAnLScgKyBzZWxlY3RvcjtcclxuICAgIGlmIChjdXN0b21VaVNldHRpbmcgJiYgY3VzdG9tVWlTZXR0aW5nLk1vZHVsZSkge1xyXG4gICAgICAgIG1vZHVsZU5hbWUgPSBjdXN0b21VaVNldHRpbmcuTW9kdWxlO1xyXG4gICAgICAgIG1vZHVsZUtlYmFiTmFtZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLkdldEtlYmFiQ2FzZShtb2R1bGVOYW1lKTtcclxuICAgICAgICBjb21wb25lbnROYW1lID0gY3VzdG9tVWlTZXR0aW5nLk5hbWU7XHJcbiAgICAgICAgc2VsZWN0b3IgPSBjdXN0b21VaVNldHRpbmcuU2VsZWN0b3I7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gbW9kdWxlS2ViYWJOYW1lLnNsaWNlKDEsIG1vZHVsZUtlYmFiTmFtZS5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIHsgbW9kdWxlTmFtZSwgbW9kdWxlUGF0aCwgY29tcG9uZW50TmFtZSwgc2VsZWN0b3IgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNTYWZhcmkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzU2FmYXJpKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRkYoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzRkYoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNQaG9uZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNQaG9uZSgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc0Rlc2t0b3AoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gRGV2aWNlLmlzRGVza3RvcCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1RhYmxldCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNUYWJsZXQoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGV2aWNlSXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdtb2JpJykgPiAwIHx8IGdldERldmljZUlzUGhvbmUoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xTaXplTW9kZShlbDogSFRNTEVsZW1lbnQsIGRldmljZVNpemU6ICdzJyB8ICdtJyB8ICdsJyB8ICd4bCcgPSAnbCcpOiBBYmJyZXZhdGlvbkRldmljZVNpemUge1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbC5vZmZzZXRXaWR0aDtcclxuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBkZXZpY2VTaXplO1xyXG4gICAgfVxyXG4gICAgaWYgKGRldmljZVNpemUgPT09ICdzJyB8fCBjb250YWluZXJXaWR0aCA8IDYwMCkge1xyXG4gICAgICAgIGRldmljZVNpemUgPSAncyc7XHJcbiAgICB9IGVsc2UgaWYgKGRldmljZVNpemUgPT09ICdtJyB8fCAoY29udGFpbmVyV2lkdGggPiA2MDAgJiYgY29udGFpbmVyV2lkdGggPCAxMjAwKSkge1xyXG4gICAgICAgIGRldmljZVNpemUgPSAnbSc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGV2aWNlU2l6ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEJ5dGVzKFxyXG4gICAgYnl0ZXMsXHJcbiAgICBkZWNpbWFscyA9IDIsXHJcbiAgICBzaXplOiAnQnl0ZXMnIHwgJ0tCJyB8ICdNQicgfCAnR0InIHwgJ1RCJyB8ICdQQicgfCAnRUInIHwgJ1pCJyB8ICdZQidcclxuKTogc3RyaW5nIHtcclxuICAgIGlmIChieXRlcyA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiAnMCBCeXRlcyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgayA9IDEwMjQ7XHJcbiAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcclxuICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xyXG4gICAgY29uc3QgaSA9IHNpemVzLmZpbmRJbmRleCgoYykgPT4gYyA9PT0gc2l6ZSk7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZChkbSkpICsgJyAnICsgc2l6ZXNbaV07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkRXh0ZW5zaW9uKHZhbGlkRXh0ZW5zaW9ucyk6IHN0cmluZyB7XHJcbiAgICBsZXQgX3ZhbGlkRXh0ZW5zaW9ucyA9ICcnO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRFeHRlbnNpb25zKSkge1xyXG4gICAgICAgIF92YWxpZEV4dGVuc2lvbnMgPSB2YWxpZEV4dGVuc2lvbnMubWFwKChjKSA9PiAnLicgKyBjLkV4dGVuc2lvbikuam9pbignLCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF92YWxpZEV4dGVuc2lvbnM7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEljb24odHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBCYXJzYUFwaS5Db21tb24uRmlsZS5GaWxlSWNvbkRpY3QxMjhbdHlwZV07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW1hZ2UodHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBbJ2ltZycsICdwbmcnLCAnanBlZycsICdqcGcnLCAnZ2lmJywgJ2JtcCcsICd0aWZmJywgJ2ltYWdlJywgJ2pmaWYnXS5pbmRleE9mKHR5cGUpID4gLTE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHZXRBbGxDb2x1bW5zU29ydGVkKGNvbnRleHQpOiBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPiB7XHJcbiAgICBjb25zdCBhbGxDb2x1bW5zID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuVmlldy5Db2x1bW5zJywgW10pLmZpbHRlcihcclxuICAgICAgICAoYykgPT4gYy5OYW1lICE9PSAnSWQnICYmIGMuTmFtZSAhPT0gJyRTdHlsZUluZGV4JyAmJiAhYy5IaWRkZW5cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY29sTGlzdDogQ29sU2V0dGluZ1tdID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nLkNvbFNldHRpbmdMaXN0JyxcclxuICAgICAgICBbXVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbHVtbnMgPSBuZXcgQXJyYXk8UmVwb3J0Vmlld0NvbHVtbj4oKTtcclxuICAgIGNvbExpc3QuZm9yRWFjaCgoY29sUykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbk9mQ29sTGlzdCA9IGFsbENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2xTLk5hbWUpO1xyXG4gICAgICAgIGlmIChjb2x1bW5PZkNvbExpc3QpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHsgLi4uY29sdW1uT2ZDb2xMaXN0LCBIaWRkZW46IGNvbFMuSXNIaWRkZW4sIFdpZHRoOiBjb2xTLldpZHRoIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgYWxsQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sU2V0dGluZyA9IGNvbExpc3QuZmluZCgoYykgPT4gYy5OYW1lID09PSBjb2x1bW4uTmFtZSk7XHJcbiAgICAgICAgaWYgKCFjb2xTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGluZGV4LCAwLCB7IC4uLmNvbHVtbiwgSGlkZGVuOiBjb2xMaXN0Lmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEdldFZpc2libGVWYWx1ZShvYmplY3QsIGZpZWxkKTogc3RyaW5nIHtcclxuICAgIGxldCBvdXRwdXRWYWx1ZTtcclxuICAgIGlmIChvYmplY3RbZmllbGRdPy4kQ2FwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgb3V0cHV0VmFsdWUgPSBvYmplY3RbZmllbGRdLiRDYXB0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddICE9PSB1bmRlZmluZWQgPyBvYmplY3RbZmllbGQgKyAnJENhcHRpb24nXSA6IG9iamVjdFtmaWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0VmFsdWU7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XHJcbiAgICAkR3JvdXA6IGFueTtcclxuICAgICRMZXZlbDogbnVtYmVyO1xyXG4gICAgJENvdW50OiBudW1iZXI7XHJcbiAgICAkRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgICAkUGFyZW50OiBhbnk7XHJcbiAgICAkQ2hpbGRyZW46IGFueVtdO1xyXG4gICAgJFZpc2liaWxpdHk6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBHcm91cEJ5KGNvbGxlY3Rpb246IGFueVtdLCBzb3J0U2V0dGluZ3M6IFNvcnRTZXR0aW5nW10pOiB7IGdyb3VwZWQ6IEdyb3VwOyBncm91cHM6IGFueVtdIH0ge1xyXG4gICAgY29uc3QgZ3JvdXBlZDogYW55ID0ge307XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gc29ydFNldHRpbmdzLm1hcCgoYykgPT4gYy5OYW1lKTtcclxuICAgIGNvbnN0IGdldFRpdGxlID0gKG1vLCBmaWVsZE5hbWUpOiBzdHJpbmcgPT4gR2V0VmlzaWJsZVZhbHVlKG1vLCBmaWVsZE5hbWUpO1xyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKChhKSA9PiB7XHJcbiAgICAgICAgZ3JvdXBzXHJcbiAgICAgICAgICAgIC5yZWR1Y2UoKG8sIGcsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVGl0bGUgPSBnZXRUaXRsZShhLCBnKTtcclxuICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0gPSBvW2dyb3VwVGl0bGVdIHx8IChpICsgMSA9PT0gZ3JvdXBzLmxlbmd0aCA/IFtdIDoge30pO1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1tncm91cFRpdGxlXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhLiRMZXZlbCA9IGdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gZ2V0VGl0bGUoYSwgZ3JvdXBzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyZW50ID0gZ3JvdXBlZFt0aXRsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LiRDb3VudCA9IChwYXJlbnQuJENvdW50ID8/IDApICsgMTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGdyb3Vwcy5sZW5ndGggLSAxOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbdGl0bGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gb1tncm91cFRpdGxlXS5sZW5ndGggKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYTIgPSBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kRXhwYW5kZWQgPSBhMj8uJEV4cGFuZGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIG9bZ3JvdXBUaXRsZV0uJFZpc2liaWxpdHkgPSBhMj8uJFZpc2liaWxpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb1tncm91cFRpdGxlXTtcclxuICAgICAgICAgICAgfSwgZ3JvdXBlZClcclxuICAgICAgICAgICAgLnB1c2goYSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IGdyb3VwZWQsIGdyb3VwcyB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRmluZEdyb3VwKGdyb3VwVGl0bGU6IHN0cmluZywgYTogYW55KTogYW55IHtcclxuICAgIGlmIChhLiRHcm91cCA9PT0gZ3JvdXBUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBhO1xyXG4gICAgfVxyXG4gICAgaWYgKGEuJFBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBGaW5kR3JvdXAoZ3JvdXBUaXRsZSwgYS4kUGFyZW50KTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmlsbEFsbExheW91dENvbnRyb2xzKGl0ZW06IExheW91dFNldHRpbmcsIGxheW91dENvbnRyb2xzOiBMYXlvdXRTZXR0aW5nW10pOiB2b2lkIHtcclxuICAgIGlmIChpdGVtLnh0eXBlID09PSAnTHkuTGF5b3V0Q29udHJvbCcpIHtcclxuICAgICAgICBsYXlvdXRDb250cm9scy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaXRlbS5pdGVtcy5mb3JFYWNoKChjKSA9PiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoYywgbGF5b3V0Q29udHJvbHMpKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRmluZFRvb2xiYXJJdGVtKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZywgcHJvcDogc3RyaW5nID0gJ3RleHQnKTogTWVudUl0ZW0gfCBudWxsIHtcclxuICAgIGlmICghdG9vbGJhckl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbmRJbkFycmF5ID0gKHRvb2xiYXJJdGVtczogTWVudUl0ZW1bXSwgdmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBpdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHRvb2xiYXJJdGVtcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjW3Byb3BdID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBjO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYy5tZW51Py5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGZpbmRJbkFycmF5KGMubWVudS5pdGVtcywgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGZpbmRJbkFycmF5KHRvb2xiYXJJdGVtcywgdmFsdWUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NDogTGF5b3V0U2V0dGluZywgbGF5b3V0VGl0bGU6IHN0cmluZyk6IExheW91dFNldHRpbmcgfCBudWxsIHtcclxuICAgIGlmICghbGF5b3V0VGl0bGUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChsYXlvdXQ5NC5DYXB0aW9uID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5UaXRsZSA9PT0gbGF5b3V0VGl0bGUgfHwgbGF5b3V0OTQuQ29udHJvbElkID09PSBsYXlvdXRUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBsYXlvdXQ5NDtcclxuICAgIH1cclxuICAgIGxldCB0ZW1wTGF5b3V0OTQ6IExheW91dFNldHRpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGlmIChsYXlvdXQ5NC5pdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXQ5NC5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoIXRlbXBMYXlvdXQ5NCkge1xyXG4gICAgICAgICAgICAgICAgdGVtcExheW91dDk0ID0gRmluZExheW91dFNldHRpbmdGcm9tTGF5b3V0OTQobGF5b3V0OTQuaXRlbXNbaV0sIGxheW91dFRpdGxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0ZW1wTGF5b3V0OTQ7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTogR3JpZFNldHRpbmcge1xyXG4gICAgY29uc3QgZ3JpZFNldHRpbmcgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkdyaWRTZXR0aW5nJywgbnVsbCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIENvbFNldHRpbmdMaXN0OiBncmlkU2V0dGluZz8uQ29sU2V0dGluZ0xpc3QgPz8gbnVsbCxcclxuICAgICAgICBTb3J0U2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Tb3J0U2V0dGluZ0xpc3QgPz8gW10sXHJcbiAgICAgICAgQXV0b1NpemVDb2x1bW5zOiBncmlkU2V0dGluZz8uQXV0b1NpemVDb2x1bW5zID8/IGZhbHNlXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNldEdyaWRTZXR0aW5ncyhjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10gfCBhbnlbXSwgY29udGV4dDogYW55KTogR3JpZFNldHRpbmcge1xyXG4gICAgY29uc3QgY29sTGlzdCA9IGNvbHVtbnM7XHJcbiAgICBjb25zdCBzZXR0aW5ncyA9IGdldEdyaWRTZXR0aW5ncyhjb250ZXh0KTtcclxuICAgIHNldHRpbmdzLkNvbFNldHRpbmdMaXN0ID0gY29sTGlzdC5tYXAoKGMpID0+ICh7XHJcbiAgICAgICAgSXNIaWRkZW46IGMuSGlkZGVuLFxyXG4gICAgICAgIE5hbWU6IGMuTmFtZSxcclxuICAgICAgICBXaWR0aDogYy5XaWR0aCxcclxuICAgICAgICBDYXB0aW9uOiBjLkNhcHRpb25cclxuICAgIH0pKTtcclxuICAgIHJldHVybiBzZXR0aW5ncztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkOiBzdHJpbmcpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgSWQ6ICcwJyxcclxuICAgICAgICAkQ2FwdGlvbjogJycsXHJcbiAgICAgICAgJFR5cGVEZWZJZDogdHlwZURlZklkLFxyXG4gICAgICAgICRTdGF0ZTogJ05ldycsXHJcbiAgICAgICAgJFR5cGU6ICdDb21tb24uTWV0YU9iamVjdFdlYicsXHJcbiAgICAgICAgJEZpZWxkRGljdDoge31cclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExheW91dDk0T2JqZWN0SW5mbygpOiBMYXlvdXRTZXR0aW5nIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgVHlwZTogJ1Jvb3QnLFxyXG4gICAgICAgIENvbnRyb2xJZDogJ9ix24zYtNmHJyxcclxuICAgICAgICB4dHlwZTogJ0x5LkxheW91dENvbnRhaW5lcicsXHJcbiAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogMjQgfSxcclxuICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBUeXBlOiAnVmVydGljYWxKb2luJyxcclxuICAgICAgICAgICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Sm9pbicsXHJcbiAgICAgICAgICAgICAgICBJc1ZlcnRpY2FsOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgQm91bmRzOiB7IHg6IDAsIHk6IDAsIHdpZHRoOiA0MzIsIGhlaWdodDogODIgfSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZDogc3RyaW5nKTogRm9ybVNldHRpbmcge1xyXG4gICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XHJcblxyXG4gICAgY29uc3QgZm9ybVBhbmVsU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0ge1xyXG4gICAgICAgIFZpZXc6IHtcclxuICAgICAgICAgICAgTGF5b3V0OTQ6IGdldExheW91dDk0T2JqZWN0SW5mbyxcclxuICAgICAgICAgICAgQ29udHJvbEluZm86IFtdLFxyXG4gICAgICAgICAgICBUeXBlRGVmSWQ6IHR5cGVEZWZJZFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgSXNTZWFyY2hQYW5lbDogdHJ1ZSxcclxuICAgICAgICBEYXRhOiB7XHJcbiAgICAgICAgICAgIE1vOiBtb1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gZm9ybVBhbmVsU2V0dGluZ3M7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZvcm1QYW5lbE1ldGFDb25kaXRpb25zKFxyXG4gICAgdHlwZURlZklkOiBzdHJpbmcsXHJcbiAgICBjb250cm9sc0luZm86IEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10sXHJcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxyXG4gICAgdmFsdWU6IGFueVxyXG4pOiBhbnkge1xyXG4gICAgY29uc3QgZm9ybVNldHRpbmdzID0gZ2V0Rm9ybVNldHRpbmdzKHR5cGVEZWZJZCk7XHJcbiAgICBmb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udHJvbHNJbmZvKSk7XHJcblxyXG4gICAgZm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaCguLi5jb250cm9sc0luZm8ubWFwKChjKSA9PiBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUpKSk7XHJcbiAgICBmb3JtU2V0dGluZ3MuRGF0YS5Nb1tjb250cm9sTmFtZV0gPSB2YWx1ZTtcclxuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcclxuICAgICAgICBTZXR0aW5nOiBmb3JtU2V0dGluZ3MsXHJcbiAgICAgICAgRmVhdHVyZXM6IHtcclxuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtUGFuZWxDdHJscjtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3TW9HcmlkRWRpdG9yKGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsIHR5cGVkZWZJZDogc3RyaW5nKTogUGFydGlhbDxGb3JtU2V0dGluZz4ge1xyXG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XHJcbiAgICByZXR1cm4geyAuLi5uZXdGb3JtU2V0dGluZ3MuRGF0YS5NbywgJFR5cGVEZWZJZDogdHlwZWRlZklkIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdyaWRFZGl0b3JGb3JtUGFuZWwoXHJcbiAgICBmb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nLFxyXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICB0eXBlZGVmOiBzdHJpbmcsXHJcbiAgICByZWxhdGlvbjogYW55LFxyXG4gICAgcmV3cml0ZUxheW91dDogYm9vbGVhbiA9IHRydWUsXHJcbiAgICBVbHZNYWluQ3RybHI6IGFueSA9IG51bGxcclxuKTogYW55IHtcclxuICAgIGNvbnN0IG5ld0Zvcm1TZXR0aW5nczogRm9ybVNldHRpbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZvcm1TZXR0aW5ncykpO1xyXG4gICAgbmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8gPSB7IC4uLm1vLCAkVHlwZURlZklkOiB0eXBlZGVmIH07XHJcbiAgICBpZiAocmV3cml0ZUxheW91dCkge1xyXG4gICAgICAgIG5ld0Zvcm1TZXR0aW5ncy5WaWV3LkxheW91dDk0ID0gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk7XHJcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQuaXRlbXNbMF0uaXRlbXMucHVzaChcclxuICAgICAgICAgICAgLi4ubmV3Rm9ybVNldHRpbmdzLlZpZXcuQ29udHJvbEluZm8ubWFwKChjKSA9PlxyXG4gICAgICAgICAgICAgICAgZ2V0TGF5b3V0Q29udHJvbChjLkNvbnRyb2xOYW1lLCBjLkNvbnRyb2xGaWVsZENhcHRpb25UcmFuc2xhdGVkLCBmYWxzZSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtUmVxdWVzdFBhcmFtcyA9IG5ldyBCYXJzYUFwaS5VbC5Gb3JtUmVxdWVzdFBhcmFtcyh7XHJcbiAgICAgICAgTW9JZDogbmV3Rm9ybVNldHRpbmdzLkRhdGEuTW8uSWQsXHJcbiAgICAgICAgVHlwZURlZklkOiB0eXBlZGVmLFxyXG4gICAgICAgIFJlbGF0aW9uOiByZWxhdGlvblxyXG4gICAgICAgIC8vIE1vQ29udGV4dDoge1xyXG4gICAgICAgIC8vICAgICBSZXBvcnRJZDogJycsXHJcbiAgICAgICAgLy8gICAgIFZpZXdJZDogJycsXHJcbiAgICAgICAgLy8gICAgIFZpZXdOYW1lOiAnJyxcclxuICAgICAgICAvLyAgICAgQ29uZEZvcm1hdGluZzogJycsXHJcbiAgICAgICAgLy8gICAgIEluY2x1ZGVJblJlcG9ydDogJydcclxuICAgICAgICAvLyB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGZvcm1QYW5lbEN0cmxyID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1QYW5lbEN0cmxyKHtcclxuICAgICAgICBTZXR0aW5nOiBuZXdGb3JtU2V0dGluZ3MsXHJcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uLFxyXG4gICAgICAgIFVsdk1haW5DdHJscjogVWx2TWFpbkN0cmxyLFxyXG4gICAgICAgIEZlYXR1cmVzOiB7XHJcbiAgICAgICAgICAgIFdvcmtmbG93OiBmYWxzZSxcclxuICAgICAgICAgICAgVG9vbGJhcjogZmFsc2UsXHJcbiAgICAgICAgICAgIEluZm9CYXI6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBGb3JtUmVxdWVzdFBhcmFtczogZm9ybVJlcXVlc3RQYXJhbXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0Q29udHJvbChcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICBjb250cm9sQ2FwdGlvbjogc3RyaW5nID0gJycsXHJcbiAgICBoaWRlOiBib29sZWFuID0gdHJ1ZVxyXG4pOiBQYXJ0aWFsPEdlbmVyYWxDb250cm9sSW5mb01vZGVsPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udHJvbCcsXHJcbiAgICAgICAgVHlwZTogJ0xheW91dENvbnRyb2xJdGVtJyxcclxuICAgICAgICBDb250cm9sSWQ6IGNvbnRyb2xOYW1lLFxyXG4gICAgICAgIElzVmVydGljYWw6IGZhbHNlLFxyXG4gICAgICAgIFRleHRMb2NhdGlvbjogJ1JpZ2h0JyxcclxuICAgICAgICBUZXh0VmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogIWhpZGUsXHJcbiAgICAgICAgaGlkZSxcclxuICAgICAgICBVc2VMYXlvdXRJdGVtVGV4dEZvckNvbnRyb2w6IGZhbHNlLFxyXG4gICAgICAgIENhcHRpb246IGNvbnRyb2xDYXB0aW9uLFxyXG4gICAgICAgIEFjY2Vzc2libGVOYW1lOiAnJyxcclxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIE1pblNpemU6IHsgd2lkdGg6IDg5LCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgTWF4U2l6ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIENvbnRyb2xCb3VuZHM6IHsgd2lkdGg6IDM4OCwgaGVpZ2h0OiAyMCB9LFxyXG4gICAgICAgIENvbnRyb2xNaW5TaXplOiB7IHdpZHRoOiA0NSwgaGVpZ2h0OiAyMCB9LFxyXG4gICAgICAgIENvbnRyb2xNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgUGFkZGluZzogWzIsIDIsIDIsIDJdLFxyXG4gICAgICAgIExhYmVsU2l6ZTogeyB3aWR0aDogMzUsIGhlaWdodDogMTMgfSxcclxuICAgICAgICBvcmlnaW5hbFh0eXBlOiAnJ1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xMaXN0KFxyXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBjb250cm9sRGJOYW1lczogc3RyaW5nW10sXHJcbiAgICBpc1NlYXJjaFBhbmVsOiBib29sZWFuLFxyXG4gICAgaXNHcmlkRWRpdG9yOiBib29sZWFuXHJcbik6IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBCYXJzYUFwaS5Db21tb24uQWpheC5HZXRTZXJ2ZXJEYXRhKFxyXG4gICAgICAgICAgICAnRm9ybTk0LkdldENvbnRyb2xJbmZvcycsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xJbmZvUGFyYW1ldGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgRmllbGREYk5hbWVzOiBjb250cm9sRGJOYW1lcyxcclxuICAgICAgICAgICAgICAgICAgICBNbzogbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKG1vKSxcclxuICAgICAgICAgICAgICAgICAgICBJc1NlYXJjaFBhbmVsOiBpc1NlYXJjaFBhbmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIElzR3JpZEVkaXRvcjogaXNHcmlkRWRpdG9yXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgTnpTYWZlQW55ID0gYW55O1xyXG5leHBvcnQgdHlwZSBOdW1iZXJJbnB1dCA9IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw7XHJcbmV4cG9ydCBpbnRlcmZhY2UgTmdTdHlsZUludGVyZmFjZSB7XHJcbiAgICBba2xhc3M6IHN0cmluZ106IE56U2FmZUFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbmRleGFibGVPYmplY3Qge1xyXG4gICAgW2tleTogc3RyaW5nXTogTnpTYWZlQW55O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQT86IEluZGV4YWJsZU9iamVjdCwgb2JqQj86IEluZGV4YWJsZU9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKG9iakEgPT09IG9iakIpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCAhb2JqQikge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xyXG4gICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcclxuXHJcbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYkhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5iaW5kKG9iakIpO1xyXG5cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxyXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwga2V5c0EubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNBW2lkeF07XHJcbiAgICAgICAgaWYgKCFiSGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyO1xyXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXI8RD4odmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2s6IEQpOiBudW1iZXIgfCBEO1xyXG5leHBvcnQgZnVuY3Rpb24gdG9OdW1iZXIodmFsdWU6IG51bWJlciB8IHN0cmluZywgZmFsbGJhY2tWYWx1ZTogbnVtYmVyID0gMCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gX2lzTnVtYmVyVmFsdWUodmFsdWUpID8gTnVtYmVyKHZhbHVlKSA6IGZhbGxiYWNrVmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gcHJvcERlY29yYXRvckZhY3Rvcnk8VCwgRD4oXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBmYWxsYmFjazogKHY6IFQpID0+IERcclxuKTogKHRhcmdldDogTnpTYWZlQW55LCBwcm9wTmFtZTogc3RyaW5nKSA9PiB2b2lkIHtcclxuICAgIGZ1bmN0aW9uIHByb3BEZWNvcmF0b3IoXHJcbiAgICAgICAgdGFyZ2V0OiBOelNhZmVBbnksXHJcbiAgICAgICAgcHJvcE5hbWU6IHN0cmluZyxcclxuICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3I/OiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxOelNhZmVBbnk+XHJcbiAgICApOiBOelNhZmVBbnkge1xyXG4gICAgICAgIGNvbnN0IHByaXZhdGVQcm9wTmFtZSA9IGAkJF9fem9ycm9Qcm9wRGVjb3JhdG9yX18ke3Byb3BOYW1lfWA7XHJcblxyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgIC8vIHdhcm4oYFRoZSBwcm9wIFwiJHtwcml2YXRlUHJvcE5hbWV9XCIgaXMgYWxyZWFkeSBleGlzdCwgaXQgd2lsbCBiZSBvdmVycmlkZWQgYnkgJHtuYW1lfSBkZWNvcmF0b3IuYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcml2YXRlUHJvcE5hbWUsIHtcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBnZXQoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLmdldFxyXG4gICAgICAgICAgICAgICAgICAgID8gb3JpZ2luYWxEZXNjcmlwdG9yLmdldC5iaW5kKHRoaXMpKClcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbcHJpdmF0ZVByb3BOYW1lXTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0KHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc2NyaXB0b3Iuc2V0LmJpbmQodGhpcykoZmFsbGJhY2sodmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXNbcHJpdmF0ZVByb3BOYW1lXSA9IGZhbGxiYWNrKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3I7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIElucHV0TnVtYmVyKGZhbGxiYWNrVmFsdWU/OiBOelNhZmVBbnkpOiBOelNhZmVBbnkge1xyXG4gICAgcmV0dXJuIHByb3BEZWNvcmF0b3JGYWN0b3J5KCdJbnB1dE51bWJlcicsICh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB0b051bWJlcih2YWx1ZSwgZmFsbGJhY2tWYWx1ZSkpO1xyXG59XHJcbmV4cG9ydCBlbnVtIEFmZml4UmVzcG9uZEV2ZW50cyB7XHJcbiAgICByZXNpemUgPSAncmVzaXplJyxcclxuICAgIHNjcm9sbCA9ICdzY3JvbGwnLFxyXG4gICAgdG91Y2hzdGFydCA9ICd0b3VjaHN0YXJ0JyxcclxuICAgIHRvdWNobW92ZSA9ICd0b3VjaG1vdmUnLFxyXG4gICAgdG91Y2hlbmQgPSAndG91Y2hlbmQnLFxyXG4gICAgcGFnZXNob3cgPSAncGFnZXNob3cnLFxyXG4gICAgbG9hZCA9ICdMT0FEJ1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgU2ltcGxlUmVjdCB7XHJcbiAgICB0b3A6IG51bWJlcjtcclxuICAgIGxlZnQ6IG51bWJlcjtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgaGVpZ2h0PzogbnVtYmVyO1xyXG4gICAgYm90dG9tPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNUYXJnZXRXaW5kb3codGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogdGFyZ2V0IGlzIFdpbmRvdyB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGFyZ2V0ID09PSB3aW5kb3c7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXRSZWN0KHRhcmdldDogRWxlbWVudCB8IFdpbmRvdyk6IFNpbXBsZVJlY3Qge1xyXG4gICAgcmV0dXJuICFpc1RhcmdldFdpbmRvdyh0YXJnZXQpXHJcbiAgICAgICAgPyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuICAgICAgICA6IHtcclxuICAgICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICBib3R0b206IDBcclxuICAgICAgICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZFZhbHVlKG5hbWU6IHN0cmluZywgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsIGNhcHRpb24/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChtby5HZXRGVmFsdWVCeUNhcHRpb24pIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gbW8uR2V0RlZhbHVlKG5hbWUpO1xyXG4gICAgICAgIGlmIChjYXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG1vLkdldEZDYXB0aW9uKG5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb24gPT09ICd1bmRlZmluZWQnICYmIG1vLkluaGVyaXRhbmNlSW5mbyAmJiAhKG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBQYXJlbnRGaWVsZE5hbWUgfSA9IG1vLkluaGVyaXRhbmNlSW5mbztcclxuICAgICAgICAgICAgY29uc3QgbW9QYXJlbnQgPSBtby5HZXRGVmFsdWUoUGFyZW50RmllbGROYW1lKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG1vUGFyZW50LkdldEZWYWx1ZShuYW1lKTtcclxuICAgICAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1vUGFyZW50LkdldEZDYXB0aW9uKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtby4kRmllbGREaWN0ICYmIG1vLiRGaWVsZERpY3RbbmFtZV0gPyBtby4kRmllbGREaWN0W25hbWVdIDogbmFtZTtcclxuICAgIGxldCB2YWwgPSBtb1tmaWVsZE5hbWVdO1xyXG4gICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKCFjYXB0aW9uVmFsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lICsgJyRDYXB0aW9uJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjYXB0aW9uVmFsKSB7XHJcbiAgICAgICAgICAgICAgICBjYXB0aW9uVmFsID0gdmFsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cclxuZXhwb3J0IGNvbnN0IGF2YWlsYWJsZVByZWZpeGVzID0gWydtb3onLCAnbXMnLCAnd2Via2l0J107XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGwoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XHJcbiAgICBsZXQgbGFzdFRpbWUgPSAwO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjazogRnJhbWVSZXF1ZXN0Q2FsbGJhY2spOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc3QgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcclxuICAgICAgICBjb25zdCBpZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpO1xyXG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xyXG4gICAgICAgIGxhc3RUaW1lID0gY3VyclRpbWUgKyB0aW1lVG9DYWxsO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEV4ZWN1dGVEeW5hbWljQ29tbWFuZChjb21tYW5kOiB7IElkOiBzdHJpbmcgfSwgbW86IE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgY29uc3QgZSA9IHsgY29tbWFuZCwgRHluYW1pY1NldHRpbmc6IG1vLCBNbzogbW8gfTtcclxuICAgIEJhcnNhQXBpLkNvbW1vbi5DdXN0b21Db2RlTWFuYWdlci5SdW5EeW5hbWljQ29tbWFuZChjb21tYW5kLklkLCBlKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZVdvcmtmbG93Q2hvaWNlRGVmKHNjb3BlLCBwYXJhbSwgc3VjY2VzczogKHJlc3VsdCkgPT4gdm9pZCwgZmFpbGVkOiAoZXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXHJcbiAgICAgICAgJ1dvcmtmbG93OTQuQ2hvaWNlU2VsZWN0JyxcclxuICAgICAgICBwYXJhbSxcclxuICAgICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3MocmVzdWx0KTtcclxuICAgICAgICB9LCAvLyBzdWNjZXNzXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGZhaWxlZChlcnJvcik7XHJcbiAgICAgICAgfSwgLy8gIGVycm9yXHJcbiAgICAgICAgKCkgPT4ge30sIC8vIGRvUmV0dXJuXHJcbiAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk6IHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUge1xyXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IDA7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xyXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzQ0NjVcclxuICAgICAgICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKChrZXkpID0+IGAke2tleX1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdylbMF07XHJcblxyXG4gICAgcmV0dXJuIHByZWZpeCA/ICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9UmVxdWVzdEFuaW1hdGlvbkZyYW1lYF0gOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaWQ6IG51bWJlcik6IE56U2FmZUFueSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZWZpeCA9IGF2YWlsYWJsZVByZWZpeGVzLmZpbHRlcihcclxuICAgICAgICAoa2V5KSA9PiBgJHtrZXl9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvdyB8fCBgJHtrZXl9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBpbiB3aW5kb3dcclxuICAgIClbMF07XHJcblxyXG4gICAgcmV0dXJuIHByZWZpeFxyXG4gICAgICAgID8gKFxyXG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsQW5pbWF0aW9uRnJhbWVgXSB8fFxyXG4gICAgICAgICAgICAgICh3aW5kb3cgYXMgTnpTYWZlQW55KVtgJHtwcmVmaXh9Q2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lYF1cclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgLmNhbGwodGhpcywgaWQpXHJcbiAgICAgICAgOiBjbGVhclRpbWVvdXQoaWQpO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFYXN5aW5nRm4gPSAodDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKSA9PiBudW1iZXI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZWFzZUluT3V0Q3ViaWModDogbnVtYmVyLCBiOiBudW1iZXIsIGM6IG51bWJlciwgZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGNjID0gYyAtIGI7XHJcbiAgICBsZXQgdHQgPSB0IC8gKGQgLyAyKTtcclxuICAgIGlmICh0dCA8IDEpIHtcclxuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiB0dCAqIHR0ICogdHQgKyBiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gKGNjIC8gMikgKiAoKHR0IC09IDIpICogdHQgKiB0dCArIDIpICsgYjtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBOelNjcm9sbFRvT3B0aW9ucyB7XHJcbiAgICAvKiogQW5pbWF0aW9uIGR1cmF0aW9uLCBkZWZhdWx0IGFzIDQ1MCAqL1xyXG4gICAgZHVyYXRpb24/OiBudW1iZXI7XHJcbiAgICAvKiogU2Nyb2xsIGNvbnRhaW5lciwgZGVmYXVsdCBhcyB3aW5kb3cgKi9cclxuICAgIGVhc2luZz86IEVhc3lpbmdGbjtcclxuICAgIC8qKiBTY3JvbGwgZW5kIGNhbGxiYWNrICovXHJcbiAgICBjYWxsYmFjaz8oKTogdm9pZDtcclxufVxyXG5leHBvcnQgY29uc3QgV29yZE1pbWVUeXBlID1cclxuICAgICcuZG9jLC5kb2N4LGFwcGxpY2F0aW9uL21zd29yZCxhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XHJcbmV4cG9ydCBjb25zdCBJbWFnZU1pbWVUeXBlID0gJy5qcGVnLC5qcGcsLmdpZiwucG5nLC5ibXAsLnRpZixpbWFnZS8qJztcclxuZXhwb3J0IGNvbnN0IFBkZk1pbWVUeXBlID0gJy5wZGYnO1xyXG5leHBvcnQgY29uc3QgQWxsRmlsZXNNaW1lVHlwZSA9ICcudHh0LC5wcHQsLnBkZiwuKic7XHJcbmV4cG9ydCBjb25zdCBWaWRlb01pbWVUeXBlID0gJ3ZpZGVvLyonO1xyXG5leHBvcnQgY29uc3QgQXVkaW9NaW1lVHlwZSA9ICdhdWRpby8qJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBDaGFuZ2VMYXlvdXRJbmZvQ3VzdG9tVWkobGF5b3V0SW5mbzogTGF5b3V0U2V0dGluZywgY29tcG9uZW50VWk6IEVqcmF5T2xnbyk6IHZvaWQge1xyXG4gICAgbGF5b3V0SW5mby5GaWVsZFVpLlNldHRpbmcuQ3VzdG9tVWkgPSBjb21wb25lbnRVaTtcclxufVxyXG5leHBvcnQgY29uc3QgbW9iaWxlX3JlZ2V4ID0gbmV3IFJlZ0V4cCgnXihcXFxcKzk4fDApPzlcXFxcZHs5fSQnKTtcclxuZXhwb3J0IGNvbnN0IG51bWJlcl9vbmx5ID0gbmV3IFJlZ0V4cCgnXlswLTldKyQnKTtcclxuZXhwb3J0IGZ1bmN0aW9uIGZvcmJpZGRlblZhbGlkYXRvcihuYW1lUmU6IFJlZ0V4cCk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZvcmJpZGRlbiA9IG5hbWVSZS50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgIHJldHVybiAhZm9yYmlkZGVuID8geyBmb3JiaWRkZW5OYW1lOiB7IHZhbHVlOiBjb250cm9sLnZhbHVlIH0gfSA6IG51bGw7XHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBHZXRJbWdUYWdzKHNldHRpbmcpIHtcclxuICAgIGxldCBzdHIgPSAnJztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZy5zb3VyY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3RyICs9XHJcbiAgICAgICAgICAgIFwiPGltZyBzcmM9J1wiICtcclxuICAgICAgICAgICAgc2V0dGluZy5zb3VyY2VzW2ldICtcclxuICAgICAgICAgICAgXCInICBjbGFzcz0nXCIgK1xyXG4gICAgICAgICAgICBnZXRDZW50ZXIoc2V0dGluZy5pc0NlbnRlcikgK1xyXG4gICAgICAgICAgICBcIicgIHN0eWxlPSdcIiArXHJcbiAgICAgICAgICAgIHNldHRpbmcuY3VzdG9tQ3NzICtcclxuICAgICAgICAgICAgXCInIC8+IFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEltYWdldG9QcmludChzZXR0aW5nKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgICc8aHRtbD48aGVhZD4nICtcclxuICAgICAgICAnPHNjcmlwdCBzcmM9XCIvTGliL3NjcmlwdHMvanF1ZXJ5LXgubWluLmpzXCI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9XCJMaWIvSW1hZ2VQcmludC9JbWFnZVByaW50SW50ZXJuYWwuanNcIj48L3NjcmlwdD4nICtcclxuICAgICAgICAnPC9oZWFkPjxib2R5IHN0eWxlPVwibWFyZ2luIDogMCAxIDAgMVwiPicgK1xyXG4gICAgICAgIEdldEltZ1RhZ3Moc2V0dGluZykgK1xyXG4gICAgICAgICc8L2JvZHk+PC9odG1sPidcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQcmludEltYWdlKHNldHRpbmcpIHtcclxuICAgIGxldCBwYWdlTGluayA9ICdhYm91dDpibGFuayc7XHJcbiAgICBsZXQgcHdhID0gd2luZG93Lm9wZW4ocGFnZUxpbmssICdfbmV3Jyk7XHJcbiAgICBwd2E/LmRvY3VtZW50Lm9wZW4oKTtcclxuICAgIGxldCBpbWFnZVRvUHJpbnQgPSBJbWFnZXRvUHJpbnQoc2V0dGluZyk7XHJcbiAgICBwd2E/LmRvY3VtZW50LndyaXRlKGltYWdlVG9QcmludCk7XHJcbiAgICBwd2E/LmRvY3VtZW50LmNsb3NlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENlbnRlcihpc0NlbnRlcikge1xyXG4gICAgaWYgKGlzQ2VudGVyKSByZXR1cm4gJ2NlbnRlcic7XHJcbiAgICByZXR1cm4gJyc7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIFNhdmVJbWFnZVRvRmlsZShuYW1lOiBzdHJpbmcsIHNyYzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0ID0gZ2V0VW5pcXVlSWQoNCk7XHJcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IHNyYztcclxuICAgIGxpbmsuZG93bmxvYWQgPSBuYW1lO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxpbmsucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgICB9LCAxMCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xyXG4gICAgLy97MX1cclxuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICAvL3syfVxyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTsgLy97M31cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XHJcbiAgICAgICAgICAgIC8vezR9XHJcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAvL3s1fVxyXG4gICAgICAgICAgICB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7IC8vezZ9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuIl19
959
+ export function getFocusableTagNames() {
960
+ return `button,button:not([disabled]),[href],input:not([disabled]),input,
961
+ select,select:not([disabled]),textarea,textarea:not([disabled]),[tabindex]:not([tabindex="-1"])`;
962
+ }
963
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFleEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFlLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUM7QUFHbkMsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBRXhHLE1BQU0sQ0FBTixJQUFZLG9CQUtYO0FBTEQsV0FBWSxvQkFBb0I7SUFDNUIscUZBQW1CLENBQUE7SUFDbkIsbUZBQWtCLENBQUE7SUFDbEIsbUZBQWtCLENBQUE7SUFDbEIsNkVBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTFcsb0JBQW9CLEtBQXBCLG9CQUFvQixRQUsvQjtBQUNELE1BQU0sVUFBVSxlQUFlLENBQzNCLGVBQXFDLEVBQ3JDLE9BQTJCLEVBQzNCLE1BQThCLEVBQzlCLFNBQW9CO0lBRXBCLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixRQUFRLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEtBQUssb0JBQW9CLENBQUMsZUFBZTtZQUNyQyxRQUFRLEdBQUcsZUFBZSxDQUFDO1lBQzNCLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsUUFBUSxHQUFHLG9CQUFvQixDQUFDO1lBQ2hDLE1BQU07UUFDVixLQUFLLG9CQUFvQixDQUFDLGNBQWM7WUFDcEMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUNwQixNQUFNO1FBQ1YsS0FBSyxvQkFB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QUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzlDLEtBQUs7UUFDTCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSztRQUMzQyxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUNqQyxLQUFLO1lBQ0wsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUN0QyxLQUFLO1lBQ0wscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ3pDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRCxNQUFNLFVBQVUsb0JBQW9CO0lBQ2hDLE9BQU87Z0hBQ3FHLENBQUM7QUFDakgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXHJcbmltcG9ydCB7IF9pc051bWJlclZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvYmFyc2EtYXBpJztcclxuaW1wb3J0IHtcclxuICAgIEFiYnJldmF0aW9uRGV2aWNlU2l6ZSxcclxuICAgIENvbFNldHRpbmcsXHJcbiAgICBFanJheU9sZ28sXHJcbiAgICBGb3JtU2V0dGluZyxcclxuICAgIEdlbmVyYWxDb250cm9sSW5mb01vZGVsLFxyXG4gICAgR3JpZFNldHRpbmcsXHJcbiAgICBMYXlvdXRTZXR0aW5nLFxyXG4gICAgTWVudUl0ZW0sXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFNvcnRTZXR0aW5nLFxyXG4gICAgVHJlZU5vZGVPYmpcclxufSBmcm9tICcuL2Fic3RyYWN0LWNsYXNzZXMvbW9kZWxzJztcclxuaW1wb3J0IHsgRGF0ZUhpanJpU2VydmljZSwgRGF0ZU1pbGFkaVNlcnZpY2UsIERhdGVTZXJ2aWNlLCBEYXRlU2hhbXNpU2VydmljZSB9IGZyb20gJy4vZGF0ZS1zZXJ2aWNlcyc7XHJcbmltcG9ydCAqIGFzIERldmljZSBmcm9tICcuL2RldmljZSc7XHJcbmltcG9ydCB7IExvZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2xvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgZW51bSBUYWJsZUhlYWRlcldpZHRoTW9kZSB7XHJcbiAgICBGaXRUb1Jvd0NvbnRlbnQgPSAxLFxyXG4gICAgRml0VG9Db250YWluZXIgPSAyLFxyXG4gICAgRnJlZUNvbHVtblNpemUgPSAzLFxyXG4gICAgQ29sdW1uV2lkdGggPSA0XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFRhYmxlVGhXaWR0aChcclxuICAgIHRhYmxlSGVhZGVyTW9kZTogVGFibGVIZWFkZXJXaWR0aE1vZGUsXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXHJcbiAgICB0aExpc3Q6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10sXHJcbiAgICByZW5kZXJlcjI6IFJlbmRlcmVyMlxyXG4pOiB2b2lkIHtcclxuICAgIGxldCBwcm9wTmFtZSA9ICcnO1xyXG4gICAgc3dpdGNoICh0YWJsZUhlYWRlck1vZGUpIHtcclxuICAgICAgICBjYXNlIFRhYmxlSGVhZGVyV2lkdGhNb2RlLkZpdFRvUm93Q29udGVudDpcclxuICAgICAgICAgICAgcHJvcE5hbWUgPSAnJEZpdFRvQ29udGVudCc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRml0VG9Db250YWluZXI6XHJcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRGaXRDb250YWluZXJXaWR0aCc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuRnJlZUNvbHVtblNpemU6XHJcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRXaWR0aCc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgVGFibGVIZWFkZXJXaWR0aE1vZGUuQ29sdW1uV2lkdGg6XHJcbiAgICAgICAgICAgIHByb3BOYW1lID0gJyRDb2x1bW5XaWR0aCc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhMaXN0LmZvckVhY2goKGMsIGkpID0+IHtcclxuICAgICAgICBjb25zdCB3eCA9IF9jYWxjV2lkdGhPZlRoKGNvbHVtbnNbaV0sIGksIHByb3BOYW1lLCB0aExpc3QpO1xyXG4gICAgICAgIHd4ICYmIHJlbmRlcmVyMi5zZXRTdHlsZShjLCAnd2lkdGgnLCB3eCk7XHJcbiAgICB9KTtcclxufVxyXG5mdW5jdGlvbiBfY2FsY1dpZHRoT2ZUaChjb2x1bW46IFJlcG9ydFZpZXdDb2x1bW4sIGk6IG51bWJlciwgcHJvcE5hbWU6IHN0cmluZywgdGhMaXN0KTogc3RyaW5nIHtcclxuICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbHVtbi4kSXNJbWFnZU9yaWNvbiAmJiBpIDwgdGhMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBjb25zdCBmaWVsZFR5cGVJZCA9ICtjb2x1bW4uRmllbGRUeXBlSWQ7XHJcbiAgICAgICAgaWYgKGZpZWxkVHlwZUlkID09PSA2IHx8IGZpZWxkVHlwZUlkID09PSA1IHx8IGZpZWxkVHlwZUlkID09PSA0Mikge1xyXG4gICAgICAgICAgICByZXR1cm4gJzI0cHgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW4uJElzSW1hZ2VPcmljb24gJiYgaSA8IHRoTGlzdC5sZW5ndGggLSAxID8gJzQycHgnIDogY29sdW1uW3Byb3BOYW1lXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQ29sdW1uQ29udGVudChjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IHZvaWQge1xyXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBzZXRDb2x1bW5XaWR0aEJ5TWF4TW9Db250ZW50V2lkdGgobW9EYXRhTGlzdCwgY29sdW1uKTtcclxuICAgIH0pO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aChcclxuICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW10sXHJcbiAgICBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIGNvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pXHJcbiAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBzZXRDb2x1bW5DYXB0aW9uV2lkdGgoY29sdW1uKTtcclxuICAgICAgICB9KTtcclxuICAgIGNvbnN0IGNvbnRleHRNZW51V2lkdGggPSBjYWxjQ29udGV4dE1lbnVXaWR0aChjb250ZXh0TWVudUl0ZW1zLCBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdyk7XHJcbiAgICByZXR1cm4geyBjb2x1bW5zOiBbLi4uY29sdW1uc10sIGNvbnRleHRNZW51V2lkdGggfTtcclxufVxyXG5mdW5jdGlvbiBzZXRDb2x1bW5DYXB0aW9uV2lkdGgoY29sdW1uOiBSZXBvcnRWaWV3Q29sdW1uKTogbnVtYmVyIHtcclxuICAgIGlmIChjb2x1bW4uJENvbHVtbldpZHRoTnVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbHVtbi4kQ29sdW1uV2lkdGhOdW07XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb2xDYXB0aW9uV2lkdGggPSBtZWFzdXJlVGV4dChjb2x1bW4uQWxpYXMpICsgMTYgKyAxMDtcclxuICAgIGNvbHVtbi4kQ29sdW1uV2lkdGhOdW0gPSBNYXRoLmNlaWwoY29sQ2FwdGlvbldpZHRoKTtcclxuICAgIGNvbHVtbi4kQ29sdW1uV2lkdGggPSBgJHtjb2x1bW4uJENvbHVtbldpZHRoTnVtfXB4YDtcclxuICAgIHJldHVybiBjb2xDYXB0aW9uV2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbHVtbldpZHRoQnlNYXhNb0NvbnRlbnRXaWR0aChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtbikge1xyXG4gICAgY29uc3Qgd2lkdGggPSBjYWxjdWxhdGVNb0RhdGFMaXN0Q29udGVudFdpZHRoQnlDb2x1bW5OYW1lKG1vRGF0YUxpc3QsIGNvbHVtbik7XHJcbiAgICBjb2x1bW4uJENvbnRlbnRXaWR0aCA9IGAke01hdGguY2VpbCh3aWR0aCl9cHhgO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlTW9EYXRhTGlzdENvbnRlbnRXaWR0aEJ5Q29sdW1uTmFtZShcclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSxcclxuICAgIGNvbHVtbjogUmVwb3J0Vmlld0NvbHVtblxyXG4pOiBudW1iZXIge1xyXG4gICAgbGV0IG1heFdpZHRoID0gMDtcclxuICAgIG1vRGF0YUxpc3QuZm9yRWFjaCgoYywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjYXB0aW9uID0gZ2V0Q29sdW1uVmFsdWVPZk1vRGF0YUxpc3QoY29sdW1uLk5hbWUsIGMsIHVuZGVmaW5lZCwgdHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgY2FwdGlvbldpZHRoID0gbWVhc3VyZVRleHQoY2FwdGlvbikgKyAxNjtcclxuICAgICAgICBpZiAobWF4V2lkdGggPCBjYXB0aW9uV2lkdGgpIHtcclxuICAgICAgICAgICAgbWF4V2lkdGggPSBjYXB0aW9uV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKG1heFdpZHRoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRnJlZUNvbHVtblNpemUoY29sdW1uczogUmVwb3J0Vmlld0NvbHVtbltdKTogUmVwb3J0Vmlld0NvbHVtbltdIHtcclxuICAgIGxldCBhbGxDb2xXaWR0aCA9IDA7XHJcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5IaWRkZW4pO1xyXG5cclxuICAgIHZpc2libGVDb2x1bW5zLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCB4ID0gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbCk7XHJcbiAgICAgICAgY29uc3QgdyA9IGNvbC5XaWR0aCAmJiBjb2wuV2lkdGggPiAwID8gY29sLldpZHRoIDogeDtcclxuICAgICAgICBhbGxDb2xXaWR0aCArPSB3O1xyXG4gICAgICAgIGNvbC4kV2lkdGggPSBpbmRleCA9PT0gdmlzaWJsZUNvbHVtbnMubGVuZ3RoIC0gMSA/ICcxMDAlJyA6IGAke3d9cHhgO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gWy4uLmNvbHVtbnNdO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb2x1bW5XaWR0aEZpdFRvQ29udGFpbmVyKFxyXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCxcclxuICAgIGNhblZpZXc6IGJvb2xlYW4sXHJcbiAgICBkaXNhYmxlQ29udGV4dE1lbnVPdmVyZmxvdzogYm9vbGVhbixcclxuICAgIGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sXHJcbiAgICBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW11cclxuKTogeyBjb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107IGNvbnRleHRNZW51V2lkdGg6IG51bWJlciB9IHtcclxuICAgIGxldCBoYXNEZWZpbmVkV2lkdGggPSB0cnVlO1xyXG4gICAgbGV0IGNvbnRhaW5lcldpZHRoID0gY29sdW1ucy5tYXAoKGMpID0+IGMuV2lkdGgpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xyXG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XHJcbiAgICAgICAgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgaGFzRGVmaW5lZFdpZHRoID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgYWxsQ29sV2lkdGggPSAwO1xyXG4gICAgY29uc3QgaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xyXG4gICAgbGV0IHJlbWFpblBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgbENvbHMgPSBjb2x1bW5zLmZpbHRlcigoYywgaSkgPT4gIWMuSGlkZGVuICYmICEoaSA9PT0gMCAmJiBjLkZpZWxkVHlwZUlkID09PSA0MSkpO1xyXG4gICAgbENvbHMuZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIC8vINin2q/YsSDZgduM2YTYryDYp9iyINmG2YjYuSDYsdmG2q8g2YbYqNmI2K8g2Ygg2LPYqtmI2YYg2KfZiNmEINmH2YUg2YbYqNmI2K9cclxuICAgICAgICBjb25zdCB4ID0gc2V0Q29sdW1uQ2FwdGlvbldpZHRoKGNvbCk7XHJcbiAgICAgICAgY29uc3QgdyA9IGNvbC5XaWR0aCAmJiBjb2wuV2lkdGggPiAwID8gY29sLldpZHRoIDogeDtcclxuICAgICAgICBhbGxDb2xXaWR0aCArPSB3O1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSAodyAvIGNvbnRhaW5lcldpZHRoKSAqIDEwMDtcclxuICAgICAgICBjb2wuJEZpdENvbnRhaW5lcldpZHRoID0gaXNNb2JpbGUgfHwgY29sLldpZHRoID09PSAwID8gJzEwMCUnIDogYCR7cGVyY2VudH0lYDtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID09PSBsQ29scy5sZW5ndGggLSAxICYmICFoYXNEZWZpbmVkV2lkdGgpIHtcclxuICAgICAgICAgICAgY29sLiRGaXRDb250YWluZXJXaWR0aCA9IDEwMCAtIHJlbWFpblBlcmNlbnQgKyAnJSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVtYWluUGVyY2VudCArPSBwZXJjZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gY29uc3QgY2FuVmlld0J1dHRvbldpZHRoID0gY2FuVmlldyA/IDQwIDogMDtcclxuICAgIC8vIGNvbnN0IHNlbGVjdGlvbldpZHRoID0gMzA7XHJcblxyXG4gICAgY29uc3QgY29udGV4dE1lbnVXaWR0aCA9IGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXMsIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93KTtcclxuICAgIC8vIGNvbnN0IGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyA9IGNvbnRhaW5lcldpZHRoIC0gc2VsZWN0aW9uV2lkdGggLSBjYW5WaWV3QnV0dG9uV2lkdGggLSBjb250ZXh0TWVudVdpZHRoIC0gMTI7XHJcbiAgICAvLyBhbGxDb2xXaWR0aCArPSBjb250YWluZXJXaWR0aEFsbENvbHVtbnMgLSBhbGxDb2xXaWR0aDsvLyDZhdit2KfYs9io2Ycg2KLYrtix24zZhiDYs9iq2YjZhi7ahtmI2YYgd2lkdGgg2YXYtNiu2LXbjCDZhtiv2KfYsdivXHJcbiAgICAvLyBjb2x1bW5zXHJcbiAgICAvLyAgICAgLmZpbHRlcigoYykgPT4gIWMuSGlkZGVuKVxyXG4gICAgLy8gICAgIC5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgIC8vICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLmNlaWwoKGNvbnRhaW5lcldpZHRoQWxsQ29sdW1ucyAqIGNvbC5XaWR0aCkgLyBhbGxDb2xXaWR0aCk7XHJcbiAgICAvLyAgICAgICAgIGNvbC5XaWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgLy8gICAgICAgICBjb2wuJEZpdENvbnRhaW5lcldpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgY29sdW1uczogWy4uLmNvbHVtbnNdLCBjb250ZXh0TWVudVdpZHRoIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGNDb250ZXh0TWVudVdpZHRoKGNvbnRleHRNZW51SXRlbXM6IE1lbnVJdGVtW10sIGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93OiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIGxldCBjb250ZXh0TWVudVdpZHRoID0gY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAxID8gNDAgOiAwO1xyXG4gICAgY29uc3QgYnRuUGFkZGluZyA9IDE0ICsgMiArIDEwOyAvLyBwYWRkaW5nICsgYm9yZGVyICsgaWYgdGV4dCBpcyBvdmVyZmxvd2VkIHRoZW4gYWRkIDUgcGl4ZWwuc28gd2UgYWx3YXlzIDUgcHggdG8gaXQuXHJcbiAgICBjb25zdCB0ZFBhZGRpbmcgPSAxNSArIDE7IC8vIHBhZGRpbmcgKyBib3JkZXJcclxuICAgIGNvbnN0IGJ1dHRvbkljb25XaWR0aCA9IDE2ICsgNjsgLy8gc2l6ZSArIG1hcmdpblxyXG4gICAgaWYgKGRpc2FibGVDb250ZXh0TWVudU92ZXJmbG93IHx8IGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgY29udGV4dE1lbnVXaWR0aCA9IDA7XHJcbiAgICAgICAgY29udGV4dE1lbnVJdGVtcy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gbWVhc3VyZVRleHQoYy50ZXh0KSArIGJ0blBhZGRpbmcgKyB0ZFBhZGRpbmc7XHJcbiAgICAgICAgICAgIGNvbnRleHRNZW51V2lkdGggKz0gYy5pY29uID8gYnV0dG9uSWNvbldpZHRoIDogMDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250ZXh0TWVudVdpZHRoO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc0luTG9jYWxNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb2ZmbGluY2VBY3RpdmUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShCYXJzYUFwaS5PZmZsaW5lLCAnU2V0dGluZ3MuSXNBY3RpdmUnLCBmYWxzZSk7XHJcbiAgICBjb25zdCBvZmZsaW5lVHJ1ZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKEJhcnNhQXBpLk9mZmxpbmUsICdTZXR0aW5ncy5Jc09mZmxpbmUnLCBmYWxzZSk7XHJcbiAgICByZXR1cm4gb2ZmbGluY2VBY3RpdmUgJiYgb2ZmbGluZVRydWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsV2lkdGgoaXRlbTogYW55KTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGZpZWxkWHR5cGUgPSBpdGVtLkZpZWxkVWk/Lm9yaWdpbmFsWHR5cGU7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgZmllbGRYdHlwZSA9PT0gJ1VpLkJ1dHRvbicgfHxcclxuICAgICAgICBmaWVsZFh0eXBlID09PSAnVWkuQ2hlY2tCb3gnIHx8XHJcbiAgICAgICAgIWl0ZW0uVGV4dFZpc2libGUgfHxcclxuICAgICAgICBpdGVtLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPT09ICdBdXRvU2l6ZSdcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBsYWJlbENhcHRpb24gPSBpdGVtLkNhcHRpb247XHJcbiAgICBpZiAobGFiZWxDYXB0aW9uID09PSAnJnp3bmo7Jykge1xyXG4gICAgICAgIGxhYmVsQ2FwdGlvbiA9ICcnO1xyXG4gICAgfVxyXG4gICAgbGFiZWxDYXB0aW9uID0gbGFiZWxDYXB0aW9uICsgJyAqICc7XHJcbiAgICAvLyBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5Jc01hbmRhdG9yeSkge1xyXG4gICAgLy8gICAgIGlmIChsYWJlbENhcHRpb24uaW5kZXhPZignKicpIDwgMCkge1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgbGFiZWxDYXB0aW9uID0gbGFiZWxDYXB0aW9uLnJlcGxhY2UoJyonLCAnJyk7XHJcbiAgICAvLyB9XHJcbiAgICBsYWJlbENhcHRpb24gKz0gJzonO1xyXG4gICAgY29uc3QgbGFiZWxXaWR0aCA9IG1lYXN1cmVUZXh0KGxhYmVsQ2FwdGlvbik7XHJcbiAgICBsZXQgbGFiZWxXaXRoUGFkZGluZyA9IGxhYmVsV2lkdGggKyAxMDtcclxuICAgIGlmIChpdGVtLkZpZWxkVWk/LlNldHRpbmc/LkZpZWxkSWNvbikge1xyXG4gICAgICAgIGxhYmVsV2l0aFBhZGRpbmcgKz0gMjQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5GaWVsZFVpPy5TZXR0aW5nPy5IZWxwRGVzY3JpcHRpb24pIHtcclxuICAgICAgICBsYWJlbFdpdGhQYWRkaW5nICs9IDI0O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xXaWR0aCA9IE1hdGguY2VpbChsYWJlbFdpdGhQYWRkaW5nKTtcclxuICAgIHJldHVybiBjb250cm9sV2lkdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbHVtblZhbHVlT2ZNb0RhdGFMaXN0KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgbW86IE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBDb2x1bW5zPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IE5hbWU6IHN0cmluZzsgQ2FwdGlvbjogc3RyaW5nIH1bXSxcclxuICAgIGNhcHRpb24/OiBib29sZWFuXHJcbik6IGFueSB7XHJcbiAgICBsZXQgZmllbGROYW1lID0gQ29sdW1ucyA/IENvbHVtbnMuZmluZCgoYykgPT4gYy5OYW1lID09PSBuYW1lIHx8IGMuQWxpYXMgPT09IG5hbWUpPy5OYW1lIDogbmFtZTtcclxuICAgIGlmICghZmllbGROYW1lKSB7XHJcbiAgICAgICAgZmllbGROYW1lID0gbmFtZTtcclxuICAgIH1cclxuICAgIGxldCB2YWwgPSBmaWVsZE5hbWUgPyBtb1tmaWVsZE5hbWVdIDogdW5kZWZpbmVkO1xyXG4gICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICBsZXQgY2FwdGlvblZhbCA9IGZpZWxkTmFtZSA/IG1vW2ZpZWxkTmFtZV0/LiRDYXB0aW9uIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvblZhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY2FwdGlvblZhbCA9IG1vW2ZpZWxkTmFtZSArICckQ2FwdGlvbiddO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGNhcHRpb25WYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhbCA9IGNhcHRpb25WYWw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmQWxyZWFkeUxvYWRlZChwYXJlbnRNb2R1bGU6IGFueSwgbW9kdWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAocGFyZW50TW9kdWxlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBJbXBvcnQgJHttb2R1bGVOYW1lfSBpbiB0aGUgQXBwTW9kdWxlIG9ubHkuYCk7XHJcbiAgICB9XHJcbn1cclxuY29uc3QgbWVhc3VyZVRleHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuZXhwb3J0IGZ1bmN0aW9uIG1lYXN1cmVUZXh0KHRleHQ6IHN0cmluZywgZm9udFNpemU/OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgaWYgKG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdKSB7XHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1lYXN1cmVUZXh0RG9tID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lYXN1cmVUZXh0JykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICBpZiAoIW1lYXN1cmVUZXh0RG9tKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN0eCA9IG1lYXN1cmVUZXh0RG9tLmdldENvbnRleHQoJzJkJykgYXMgYW55O1xyXG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IGZvbnRTaXplIDogJzAuODg1cmVtJztcclxuICAgIGN0eC5mb250ID0gYG5vcm1hbCAke2ZvbnRTaXplfSBJUkFOWWVrYW5EaWdpdHNgO1xyXG4gICAgY29uc3QgeCA9IGN0eC5tZWFzdXJlVGV4dCh0ZXh0KS53aWR0aDtcclxuICAgIG1lYXN1cmVUZXh0VmFsdWVzW3RleHRdID0geDtcclxuICAgIHJldHVybiB4O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5yYXRlSW5saW5lTW9JZCgpIHtcclxuICAgIHJldHVybiAoQmFyc2FBcGkuaWRHZW5lcmF0b3ItLSkudG9TdHJpbmcoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZW51bVZhbHVlVG9TdHJpbmdTaXplKHZhbHVlOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAodmFsdWUpIHtcclxuICAgICAgICBjYXNlICcxJzpcclxuICAgICAgICAgICAgcmV0dXJuICdzJztcclxuICAgICAgICBjYXNlICcyJzpcclxuICAgICAgICAgICAgcmV0dXJuICdtJztcclxuICAgICAgICBjYXNlICczJzpcclxuICAgICAgICAgICAgcmV0dXJuICdsJztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIoYnV0dG9uLCBvcHRpb25zPyk6IHZvaWQge1xyXG4gICAgaWYgKGJ1dHRvbi5Db21tYW5kICYmIGJ1dHRvbi5Db21tYW5kLkhhbmRsZXIpIHtcclxuICAgICAgICBidXR0b24uQ29tbWFuZC5IYW5kbGVyKGJ1dHRvbiwgb3B0aW9ucyk7XHJcbiAgICB9IGVsc2UgaWYgKGJ1dHRvbi5oYW5kbGVyKSB7XHJcbiAgICAgICAgYnV0dG9uLmhhbmRsZXIuYmluZChidXR0b24uc2NvcGUpKGJ1dHRvbiwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXF1ZUlkKHBhcnRzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RyaW5nQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0czsgaSsrKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcclxuICAgICAgICBjb25zdCBTNCA9ICgoKDEgKyBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDApIHwgMCkudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIGNvbnN0IFM0Xzogc3RyaW5nID0gUzQubGVuZ3RoID4gMCA/IFM0LnN1YnN0cmluZygxKSA6ICcnO1xyXG4gICAgICAgIHN0cmluZ0Fyci5wdXNoKFM0Xyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nQXJyLmpvaW4oJy0nKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVTZXJ2aWNlKGxvZ1NlcnZpY2U6IExvZ1NlcnZpY2UsIGN1bHR1cmU/KTogRGF0ZVNlcnZpY2Uge1xyXG4gICAgY29uc3QgZGVmYXVsdEN1bHR1cmUgPSBjdWx0dXJlID8/IEJhcnNhQXBpLkxvZ2luRm9ybURhdGEuQ3VsdHVyZTtcclxuICAgIHN3aXRjaCAoZGVmYXVsdEN1bHR1cmUpIHtcclxuICAgICAgICBjYXNlICdmYS1JUic6XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZVNoYW1zaVNlcnZpY2UobG9nU2VydmljZSk7XHJcbiAgICAgICAgY2FzZSAnYXItQUUnOlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGVIaWpyaVNlcnZpY2UobG9nU2VydmljZSk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlTWlsYWRpU2VydmljZShsb2dTZXJ2aWNlKTtcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsSXRlbXNQZXJDaGlsZHJlbihcclxuICAgIGl0ZW06IFRyZWVOb2RlT2JqLFxyXG4gICAgbGV2ZWw6IG51bWJlcixcclxuICAgIGFycmF5OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10sXHJcbiAgICBwYXJlbnROb2RlOiBUcmVlTm9kZU9iaixcclxuICAgIGF1dG9PcGVuTGV2ZWxzOiBudW1iZXJcclxuKTogYW55IHtcclxuICAgIGxldCBuZXdJdGVtOiBhbnkgPSBpdGVtO1xyXG4gICAgaWYgKGxldmVsID4gMCkge1xyXG4gICAgICAgIGl0ZW0ucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgaXRlbS5sZXZlbCA9IGxldmVsO1xyXG4gICAgICAgIGl0ZW0uaXNFeHBhbmQgPSBpdGVtLmlzRXhwYW5kID8/IGF1dG9PcGVuTGV2ZWxzID4gbGV2ZWw7XHJcbiAgICAgICAgaXRlbS52aXNpYmlsaXR5ID0gaXRlbS5wYXJlbnROb2RlLmlzRXhwYW5kO1xyXG4gICAgICAgIGFycmF5LnB1c2gobmV3SXRlbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0l0ZW0gPSBpdGVtO1xyXG4gICAgICAgIG5ld0l0ZW0uaXNFeHBhbmQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gc2V0T25lRGVwdGhMZXZlbChjaGlsZCkpO1xyXG4gICAgICAgIHJldHVybiBpdGVtLmNoaWxkcmVuLm1hcCgoaSkgPT4gZ2V0QWxsSXRlbXNQZXJDaGlsZHJlbihpLCBsZXZlbCArIDEsIGFycmF5LCBuZXdJdGVtLCBhdXRvT3BlbkxldmVscykpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRPbmVEZXB0aExldmVsKG5vZGUpOiB2b2lkIHtcclxuICAgIGxldCBoYXNPbmVEZXB0aCA9IHRydWU7XHJcbiAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgIGlmIChjaGlsZC5EYXRhPy4kSGFzQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgaGFzT25lRGVwdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgbm9kZS5oYXNPbmVEZXB0aExldmVsID0gaGFzT25lRGVwdGg7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRmlyZWZveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUGF0aChcclxuICAgIHR5cGU6IHN0cmluZyxcclxuICAgIG1vSWQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICBmaWxlSWQ6IHN0cmluZyxcclxuICAgIGZpZWxkRGVmSWQ/OiBzdHJpbmcsXHJcbiAgICBzaXplPzogbnVtYmVyLFxyXG4gICAgc2l6ZUg/OiBudW1iZXJcclxuKTogc3RyaW5nIHtcclxuICAgIG1vSWQgPSBtb0lkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChtb0lkKTtcclxuICAgIGZpbGVJZCA9IGZpbGVJZCA9PSBudWxsID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoZmlsZUlkKTtcclxuICAgIGZpZWxkRGVmSWQgPSBmaWVsZERlZklkID09IG51bGwgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudChmaWVsZERlZklkKTtcclxuICAgIHNpemUgPSBzaXplID09IG51bGwgPyAxMjggOiBzaXplO1xyXG4gICAgc2l6ZUggPSBzaXplSCA9PSBudWxsID8gc2l6ZSA6IHNpemVIO1xyXG4gICAgY29uc3QgdXJsID0gYC9JSC5hc2h4P3R5PSR7dHlwZX0mbW9JZD0ke21vSWR9JmlkPSR7ZmlsZUlkfSZmZElkPSR7ZmllbGREZWZJZH0mc2k9JHtzaXplfSZzaUg9JHtzaXplSH1gO1xyXG4gICAgcmV0dXJuIHVybDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIHt9LnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRGV2aWNlV2lkdGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDAgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHNjcmVlbi53aWR0aDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGVhZGVyVmFsdWUoZmllbGRWYWx1ZSwgcmV0dXJuVmFsdWU/OiB0cnVlKTogYW55IHtcclxuICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICByZXR1cm4gZmllbGRWYWx1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gZmllbGRWYWx1ZS5WYWx1ZTtcclxuICAgIGNvbnN0IHZhbHVlQ2FwdGlvbjogc3RyaW5nID0gZmllbGRWYWx1ZS5WYWx1ZSRDYXB0aW9uO1xyXG4gICAgbGV0IHZhbHVlT2JqZWN0Q2FwdGlvbiA9IG51bGw7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHZhbHVlT2JqZWN0Q2FwdGlvbiA9IGZpZWxkVmFsdWUuVmFsdWUuJENhcHRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVPYmplY3RDYXB0aW9uICYmICFyZXR1cm5WYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZU9iamVjdENhcHRpb247XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVDYXB0aW9uICYmICF2YWx1ZUNhcHRpb24uc3RhcnRzV2l0aCgndG1wJykgJiYgIXJldHVyblZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlQ2FwdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEluVmlld3BvcnQyKGVsOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCB0b3AgPSBlbC5vZmZzZXRUb3A7XHJcbiAgICBsZXQgbGVmdCA9IGVsLm9mZnNldExlZnQ7XHJcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gZWwub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgIHdoaWxlIChlbC5vZmZzZXRQYXJlbnQpIHtcclxuICAgICAgICBlbCA9IGVsLm9mZnNldFBhcmVudDtcclxuICAgICAgICB0b3AgKz0gZWwub2Zmc2V0VG9wO1xyXG4gICAgICAgIGxlZnQgKz0gZWwub2Zmc2V0TGVmdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAgIHRvcCA8IHdpbmRvdy5wYWdlWU9mZnNldCArIHdpbmRvdy5pbm5lckhlaWdodCAmJlxyXG4gICAgICAgIGxlZnQgPCB3aW5kb3cucGFnZVhPZmZzZXQgKyB3aW5kb3cuaW5uZXJXaWR0aCAmJlxyXG4gICAgICAgIHRvcCArIGhlaWdodCA+IHdpbmRvdy5wYWdlWU9mZnNldCAmJlxyXG4gICAgICAgIGxlZnQgKyB3aWR0aCA+IHdpbmRvdy5wYWdlWE9mZnNldFxyXG4gICAgKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gUHJldmVudERlZmF1bEV2ZW50KGUsIHByb3BhZ2F0aW9uRGlzYWJsZSA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmIChwcm9wYWdhdGlvbkRpc2FibGUpIHtcclxuICAgICAgICBzdG9wUHJvcGFnYXRpb24oZSk7XHJcbiAgICB9XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihlKTogdm9pZCB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRIZWlnaHQoZWxEb206IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcclxuICAgIGxldCBwYXJlbnREb20gPSBlbERvbS5wYXJlbnRFbGVtZW50O1xyXG4gICAgbGV0IHBhcmVudEhlaWdodCA9IHBhcmVudERvbT8uY2xpZW50SGVpZ2h0ID8/IDA7XHJcbiAgICB3aGlsZSAocGFyZW50RG9tICE9IG51bGwgJiYgcGFyZW50SGVpZ2h0IDwgNDApIHtcclxuICAgICAgICBwYXJlbnREb20gPSBwYXJlbnREb20ucGFyZW50RWxlbWVudDtcclxuICAgICAgICBwYXJlbnRIZWlnaHQgPSBwYXJlbnREb20/LmNsaWVudEhlaWdodCA/PyAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcmVudEhlaWdodDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXBvbmVudERlZmluZWQoXHJcbiAgICBjb250cm9sVWk6IHsgb3JpZ2luYWxYdHlwZTogc3RyaW5nIH0sXHJcbiAgICBjdXN0b21VaVNldHRpbmc6IHsgTW9kdWxlOiBzdHJpbmc7IE5hbWU6IHN0cmluZzsgU2VsZWN0b3I6IHN0cmluZyB9XHJcbik6IHtcclxuICAgIG1vZHVsZU5hbWU6IHN0cmluZztcclxuICAgIG1vZHVsZVBhdGg6IHN0cmluZztcclxuICAgIGNvbXBvbmVudE5hbWU6IHN0cmluZztcclxuICAgIHNlbGVjdG9yOiBzdHJpbmc7XHJcbn0ge1xyXG4gICAgbGV0IG1vZHVsZU5hbWUgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLkRlZmF1bHRVaU1vZHVsZTtcclxuICAgIGxldCBtb2R1bGVLZWJhYk5hbWUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5HZXRLZWJhYkNhc2UobW9kdWxlTmFtZSk7XHJcbiAgICBsZXQgY29tcG9uZW50TmFtZSA9IGNvbnRyb2xVaS5vcmlnaW5hbFh0eXBlLnJlcGxhY2UoJy4nLCAnJykucmVwbGFjZSgnXycsICcnKTtcclxuICAgIGxldCBzZWxlY3Rvcjogc3RyaW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKGNvbXBvbmVudE5hbWUpO1xyXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMSwgc2VsZWN0b3IubGVuZ3RoKTtcclxuICAgIHNlbGVjdG9yID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5DdXN0b21VaVByZWZpeCArICctJyArIHNlbGVjdG9yO1xyXG4gICAgaWYgKGN1c3RvbVVpU2V0dGluZyAmJiBjdXN0b21VaVNldHRpbmcuTW9kdWxlKSB7XHJcbiAgICAgICAgbW9kdWxlTmFtZSA9IGN1c3RvbVVpU2V0dGluZy5Nb2R1bGU7XHJcbiAgICAgICAgbW9kdWxlS2ViYWJOYW1lID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuR2V0S2ViYWJDYXNlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbXBvbmVudE5hbWUgPSBjdXN0b21VaVNldHRpbmcuTmFtZTtcclxuICAgICAgICBzZWxlY3RvciA9IGN1c3RvbVVpU2V0dGluZy5TZWxlY3RvcjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1vZHVsZVBhdGggPSBtb2R1bGVLZWJhYk5hbWUuc2xpY2UoMSwgbW9kdWxlS2ViYWJOYW1lLmxlbmd0aCk7XHJcbiAgICByZXR1cm4geyBtb2R1bGVOYW1lLCBtb2R1bGVQYXRoLCBjb21wb25lbnROYW1lLCBzZWxlY3RvciB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmFyaSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNTYWZhcmkoKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNGRigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNGRigpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc1Bob25lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERldmljZS5pc1Bob25lKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzRGVza3RvcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBEZXZpY2UuaXNEZXNrdG9wKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERldmljZUlzVGFibGV0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIERldmljZS5pc1RhYmxldCgpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREZXZpY2VJc01vYmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ21vYmknKSA+IDAgfHwgZ2V0RGV2aWNlSXNQaG9uZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbFNpemVNb2RlKGVsOiBIVE1MRWxlbWVudCwgZGV2aWNlU2l6ZTogJ3MnIHwgJ20nIHwgJ2wnIHwgJ3hsJyA9ICdsJyk6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZSB7XHJcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsLm9mZnNldFdpZHRoO1xyXG4gICAgaWYgKGNvbnRhaW5lcldpZHRoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGRldmljZVNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAoZGV2aWNlU2l6ZSA9PT0gJ3MnIHx8IGNvbnRhaW5lcldpZHRoIDwgNjAwKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdzJztcclxuICAgIH0gZWxzZSBpZiAoZGV2aWNlU2l6ZSA9PT0gJ20nIHx8IChjb250YWluZXJXaWR0aCA+IDYwMCAmJiBjb250YWluZXJXaWR0aCA8IDEyMDApKSB7XHJcbiAgICAgICAgZGV2aWNlU2l6ZSA9ICdtJztcclxuICAgIH1cclxuICAgIHJldHVybiBkZXZpY2VTaXplO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoXHJcbiAgICBieXRlcyxcclxuICAgIGRlY2ltYWxzID0gMixcclxuICAgIHNpemU6ICdCeXRlcycgfCAnS0InIHwgJ01CJyB8ICdHQicgfCAnVEInIHwgJ1BCJyB8ICdFQicgfCAnWkInIHwgJ1lCJ1xyXG4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuICcwIEJ5dGVzJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrID0gMTAyNDtcclxuICAgIGNvbnN0IGRtID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xyXG4gICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XHJcbiAgICBjb25zdCBpID0gc2l6ZXMuZmluZEluZGV4KChjKSA9PiBjID09PSBzaXplKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSkgKyAnICcgKyBzaXplc1tpXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFeHRlbnNpb24odmFsaWRFeHRlbnNpb25zKTogc3RyaW5nIHtcclxuICAgIGxldCBfdmFsaWRFeHRlbnNpb25zID0gJyc7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWxpZEV4dGVuc2lvbnMpKSB7XHJcbiAgICAgICAgX3ZhbGlkRXh0ZW5zaW9ucyA9IHZhbGlkRXh0ZW5zaW9ucy5tYXAoKGMpID0+ICcuJyArIGMuRXh0ZW5zaW9uKS5qb2luKCcsJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX3ZhbGlkRXh0ZW5zaW9ucztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEJhcnNhQXBpLkNvbW1vbi5GaWxlLkZpbGVJY29uRGljdDEyOFt0eXBlXTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbWFnZSh0eXBlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIFsnaW1nJywgJ3BuZycsICdqcGVnJywgJ2pwZycsICdnaWYnLCAnYm1wJywgJ3RpZmYnLCAnaW1hZ2UnLCAnamZpZiddLmluZGV4T2YodHlwZSkgPiAtMTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdldEFsbENvbHVtbnNTb3J0ZWQoY29udGV4dCk6IEFycmF5PFJlcG9ydFZpZXdDb2x1bW4+IHtcclxuICAgIGNvbnN0IGFsbENvbHVtbnMgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5WaWV3LkNvbHVtbnMnLCBbXSkuZmlsdGVyKFxyXG4gICAgICAgIChjKSA9PiBjLk5hbWUgIT09ICdJZCcgJiYgYy5OYW1lICE9PSAnJFN0eWxlSW5kZXgnICYmICFjLkhpZGRlblxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb2xMaXN0OiBDb2xTZXR0aW5nW10gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShcclxuICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcuQ29sU2V0dGluZ0xpc3QnLFxyXG4gICAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxSZXBvcnRWaWV3Q29sdW1uPigpO1xyXG4gICAgY29sTGlzdC5mb3JFYWNoKChjb2xTKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sdW1uT2ZDb2xMaXN0ID0gYWxsQ29sdW1ucy5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbFMuTmFtZSk7XHJcbiAgICAgICAgaWYgKGNvbHVtbk9mQ29sTGlzdCkge1xyXG4gICAgICAgICAgICBjb2x1bW5zLnB1c2goeyAuLi5jb2x1bW5PZkNvbExpc3QsIEhpZGRlbjogY29sUy5Jc0hpZGRlbiwgV2lkdGg6IGNvbFMuV2lkdGggfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBhbGxDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjb2xTZXR0aW5nID0gY29sTGlzdC5maW5kKChjKSA9PiBjLk5hbWUgPT09IGNvbHVtbi5OYW1lKTtcclxuICAgICAgICBpZiAoIWNvbFNldHRpbmcpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoaW5kZXgsIDAsIHsgLi4uY29sdW1uLCBIaWRkZW46IGNvbExpc3QubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29sdW1ucztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gR2V0VmlzaWJsZVZhbHVlKG9iamVjdCwgZmllbGQpOiBzdHJpbmcge1xyXG4gICAgbGV0IG91dHB1dFZhbHVlO1xyXG4gICAgaWYgKG9iamVjdFtmaWVsZF0/LiRDYXB0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBvdXRwdXRWYWx1ZSA9IG9iamVjdFtmaWVsZF0uJENhcHRpb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG91dHB1dFZhbHVlID0gb2JqZWN0W2ZpZWxkICsgJyRDYXB0aW9uJ10gIT09IHVuZGVmaW5lZCA/IG9iamVjdFtmaWVsZCArICckQ2FwdGlvbiddIDogb2JqZWN0W2ZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXRWYWx1ZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwIHtcclxuICAgICRHcm91cDogYW55O1xyXG4gICAgJExldmVsOiBudW1iZXI7XHJcbiAgICAkQ291bnQ6IG51bWJlcjtcclxuICAgICRFeHBhbmRlZDogYm9vbGVhbjtcclxuICAgICRQYXJlbnQ6IGFueTtcclxuICAgICRDaGlsZHJlbjogYW55W107XHJcbiAgICAkVmlzaWJpbGl0eTogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEdyb3VwQnkoY29sbGVjdGlvbjogYW55W10sIHNvcnRTZXR0aW5nczogU29ydFNldHRpbmdbXSk6IHsgZ3JvdXBlZDogR3JvdXA7IGdyb3VwczogYW55W10gfSB7XHJcbiAgICBjb25zdCBncm91cGVkOiBhbnkgPSB7fTtcclxuXHJcbiAgICBjb25zdCBncm91cHMgPSBzb3J0U2V0dGluZ3MubWFwKChjKSA9PiBjLk5hbWUpO1xyXG4gICAgY29uc3QgZ2V0VGl0bGUgPSAobW8sIGZpZWxkTmFtZSk6IHN0cmluZyA9PiBHZXRWaXNpYmxlVmFsdWUobW8sIGZpZWxkTmFtZSk7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGEpID0+IHtcclxuICAgICAgICBncm91cHNcclxuICAgICAgICAgICAgLnJlZHVjZSgobywgZywgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBUaXRsZSA9IGdldFRpdGxlKGEsIGcpO1xyXG4gICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXSA9IG9bZ3JvdXBUaXRsZV0gfHwgKGkgKyAxID09PSBncm91cHMubGVuZ3RoID8gW10gOiB7fSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvW2dyb3VwVGl0bGVdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGEuJExldmVsID0gZ3JvdXBzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBnZXRUaXRsZShhLCBncm91cHNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnQgPSBncm91cGVkW3RpdGxlXTtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuJENvdW50ID0gKHBhcmVudC4kQ291bnQgPz8gMCkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgZ3JvdXBzLmxlbmd0aCAtIDE7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGdldFRpdGxlKGEsIGdyb3Vwc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFt0aXRsZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC4kQ291bnQgPSBvW2dyb3VwVGl0bGVdLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhMiA9IEZpbmRHcm91cChncm91cFRpdGxlLCBhKTtcclxuICAgICAgICAgICAgICAgICAgICBvW2dyb3VwVGl0bGVdLiRFeHBhbmRlZCA9IGEyPy4kRXhwYW5kZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgb1tncm91cFRpdGxlXS4kVmlzaWJpbGl0eSA9IGEyPy4kVmlzaWJpbGl0eTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBvW2dyb3VwVGl0bGVdO1xyXG4gICAgICAgICAgICB9LCBncm91cGVkKVxyXG4gICAgICAgICAgICAucHVzaChhKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgZ3JvdXBlZCwgZ3JvdXBzIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kR3JvdXAoZ3JvdXBUaXRsZTogc3RyaW5nLCBhOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGEuJEdyb3VwID09PSBncm91cFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGE7XHJcbiAgICB9XHJcbiAgICBpZiAoYS4kUGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIEZpbmRHcm91cChncm91cFRpdGxlLCBhLiRQYXJlbnQpO1xyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaWxsQWxsTGF5b3V0Q29udHJvbHMoaXRlbTogTGF5b3V0U2V0dGluZywgbGF5b3V0Q29udHJvbHM6IExheW91dFNldHRpbmdbXSk6IHZvaWQge1xyXG4gICAgaWYgKGl0ZW0ueHR5cGUgPT09ICdMeS5MYXlvdXRDb250cm9sJykge1xyXG4gICAgICAgIGxheW91dENvbnRyb2xzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpdGVtLml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpdGVtLml0ZW1zLmZvckVhY2goKGMpID0+IEZpbGxBbGxMYXlvdXRDb250cm9scyhjLCBsYXlvdXRDb250cm9scykpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBGaW5kVG9vbGJhckl0ZW0odG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nLCBwcm9wOiBzdHJpbmcgPSAndGV4dCcpOiBNZW51SXRlbSB8IG51bGwge1xyXG4gICAgaWYgKCF0b29sYmFySXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmluZEluQXJyYXkgPSAodG9vbGJhckl0ZW1zOiBNZW51SXRlbVtdLCB2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IGl0ZW06IE1lbnVJdGVtIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgdG9vbGJhckl0ZW1zLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiAhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNbcHJvcF0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGM7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjLm1lbnU/Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gZmluZEluQXJyYXkoYy5tZW51Lml0ZW1zLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgIH07XHJcbiAgICByZXR1cm4gZmluZEluQXJyYXkodG9vbGJhckl0ZW1zLCB2YWx1ZSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEZpbmRMYXlvdXRTZXR0aW5nRnJvbUxheW91dDk0KGxheW91dDk0OiBMYXlvdXRTZXR0aW5nLCBsYXlvdXRUaXRsZTogc3RyaW5nKTogTGF5b3V0U2V0dGluZyB8IG51bGwge1xyXG4gICAgaWYgKCFsYXlvdXRUaXRsZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGxheW91dDk0LkNhcHRpb24gPT09IGxheW91dFRpdGxlIHx8IGxheW91dDk0LlRpdGxlID09PSBsYXlvdXRUaXRsZSB8fCBsYXlvdXQ5NC5Db250cm9sSWQgPT09IGxheW91dFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGxheW91dDk0O1xyXG4gICAgfVxyXG4gICAgbGV0IHRlbXBMYXlvdXQ5NDogTGF5b3V0U2V0dGluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgaWYgKGxheW91dDk0Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dDk0Lml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghdGVtcExheW91dDk0KSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wTGF5b3V0OTQgPSBGaW5kTGF5b3V0U2V0dGluZ0Zyb21MYXlvdXQ5NChsYXlvdXQ5NC5pdGVtc1tpXSwgbGF5b3V0VGl0bGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRlbXBMYXlvdXQ5NDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZFNldHRpbmdzKGNvbnRleHQpOiBHcmlkU2V0dGluZyB7XHJcbiAgICBjb25zdCBncmlkU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLlZpZXcuR3JpZFNldHRpbmcnLCBudWxsKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgQ29sU2V0dGluZ0xpc3Q6IGdyaWRTZXR0aW5nPy5Db2xTZXR0aW5nTGlzdCA/PyBudWxsLFxyXG4gICAgICAgIFNvcnRTZXR0aW5nTGlzdDogZ3JpZFNldHRpbmc/LlNvcnRTZXR0aW5nTGlzdCA/PyBbXSxcclxuICAgICAgICBBdXRvU2l6ZUNvbHVtbnM6IGdyaWRTZXR0aW5nPy5BdXRvU2l6ZUNvbHVtbnMgPz8gZmFsc2VcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc2V0R3JpZFNldHRpbmdzKGNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXSB8IGFueVtdLCBjb250ZXh0OiBhbnkpOiBHcmlkU2V0dGluZyB7XHJcbiAgICBjb25zdCBjb2xMaXN0ID0gY29sdW1ucztcclxuICAgIGNvbnN0IHNldHRpbmdzID0gZ2V0R3JpZFNldHRpbmdzKGNvbnRleHQpO1xyXG4gICAgc2V0dGluZ3MuQ29sU2V0dGluZ0xpc3QgPSBjb2xMaXN0Lm1hcCgoYykgPT4gKHtcclxuICAgICAgICBJc0hpZGRlbjogYy5IaWRkZW4sXHJcbiAgICAgICAgTmFtZTogYy5OYW1lLFxyXG4gICAgICAgIFdpZHRoOiBjLldpZHRoLFxyXG4gICAgICAgIENhcHRpb246IGMuQ2FwdGlvblxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIHNldHRpbmdzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQ6IHN0cmluZyk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBJZDogJzAnLFxyXG4gICAgICAgICRDYXB0aW9uOiAnJyxcclxuICAgICAgICAkVHlwZURlZklkOiB0eXBlRGVmSWQsXHJcbiAgICAgICAgJFN0YXRlOiAnTmV3JyxcclxuICAgICAgICAkVHlwZTogJ0NvbW1vbi5NZXRhT2JqZWN0V2ViJyxcclxuICAgICAgICAkRmllbGREaWN0OiB7fVxyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5b3V0OTRPYmplY3RJbmZvKCk6IExheW91dFNldHRpbmcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBUeXBlOiAnUm9vdCcsXHJcbiAgICAgICAgQ29udHJvbElkOiAn2LHbjNi02YcnLFxyXG4gICAgICAgIHh0eXBlOiAnTHkuTGF5b3V0Q29udGFpbmVyJyxcclxuICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiAyNCB9LFxyXG4gICAgICAgIGl0ZW1zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIFR5cGU6ICdWZXJ0aWNhbEpvaW4nLFxyXG4gICAgICAgICAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRKb2luJyxcclxuICAgICAgICAgICAgICAgIElzVmVydGljYWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBCb3VuZHM6IHsgeDogMCwgeTogMCwgd2lkdGg6IDQzMiwgaGVpZ2h0OiA4MiB9LFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9O1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkOiBzdHJpbmcpOiBGb3JtU2V0dGluZyB7XHJcbiAgICBjb25zdCBtbyA9IEdldERlZmF1bHRNb09iamVjdEluZm8odHlwZURlZklkKTtcclxuXHJcbiAgICBjb25zdCBmb3JtUGFuZWxTZXR0aW5nczogRm9ybVNldHRpbmcgPSB7XHJcbiAgICAgICAgVmlldzoge1xyXG4gICAgICAgICAgICBMYXlvdXQ5NDogZ2V0TGF5b3V0OTRPYmplY3RJbmZvLFxyXG4gICAgICAgICAgICBDb250cm9sSW5mbzogW10sXHJcbiAgICAgICAgICAgIFR5cGVEZWZJZDogdHlwZURlZklkXHJcbiAgICAgICAgfSxcclxuICAgICAgICBJc1NlYXJjaFBhbmVsOiB0cnVlLFxyXG4gICAgICAgIERhdGE6IHtcclxuICAgICAgICAgICAgTW86IG1vXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBmb3JtUGFuZWxTZXR0aW5ncztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVBhbmVsTWV0YUNvbmRpdGlvbnMoXHJcbiAgICB0eXBlRGVmSWQ6IHN0cmluZyxcclxuICAgIGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSxcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogYW55XHJcbik6IGFueSB7XHJcbiAgICBjb25zdCBmb3JtU2V0dGluZ3MgPSBnZXRGb3JtU2V0dGluZ3ModHlwZURlZklkKTtcclxuICAgIGZvcm1TZXR0aW5ncy5WaWV3LkNvbnRyb2xJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250cm9sc0luZm8pKTtcclxuXHJcbiAgICBmb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKC4uLmNvbnRyb2xzSW5mby5tYXAoKGMpID0+IGdldExheW91dENvbnRyb2woYy5Db250cm9sTmFtZSkpKTtcclxuICAgIGZvcm1TZXR0aW5ncy5EYXRhLk1vW2NvbnRyb2xOYW1lXSA9IHZhbHVlO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IGZvcm1TZXR0aW5ncyxcclxuICAgICAgICBGZWF0dXJlczoge1xyXG4gICAgICAgICAgICBXb3JrZmxvdzogZmFsc2UsXHJcbiAgICAgICAgICAgIFRvb2xiYXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBJbmZvQmFyOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGZvcm1QYW5lbEN0cmxyO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZywgdHlwZWRlZklkOiBzdHJpbmcpOiBQYXJ0aWFsPEZvcm1TZXR0aW5nPiB7XHJcbiAgICBjb25zdCBuZXdGb3JtU2V0dGluZ3M6IEZvcm1TZXR0aW5nID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmb3JtU2V0dGluZ3MpKTtcclxuICAgIHJldHVybiB7IC4uLm5ld0Zvcm1TZXR0aW5ncy5EYXRhLk1vLCAkVHlwZURlZklkOiB0eXBlZGVmSWQgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZEVkaXRvckZvcm1QYW5lbChcclxuICAgIGZvcm1TZXR0aW5nczogRm9ybVNldHRpbmcsXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIHR5cGVkZWY6IHN0cmluZyxcclxuICAgIHJlbGF0aW9uOiBhbnksXHJcbiAgICByZXdyaXRlTGF5b3V0OiBib29sZWFuID0gdHJ1ZSxcclxuICAgIFVsdk1haW5DdHJscjogYW55ID0gbnVsbFxyXG4pOiBhbnkge1xyXG4gICAgY29uc3QgbmV3Rm9ybVNldHRpbmdzOiBGb3JtU2V0dGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZm9ybVNldHRpbmdzKSk7XHJcbiAgICBuZXdGb3JtU2V0dGluZ3MuRGF0YS5NbyA9IHsgLi4ubW8sICRUeXBlRGVmSWQ6IHR5cGVkZWYgfTtcclxuICAgIGlmIChyZXdyaXRlTGF5b3V0KSB7XHJcbiAgICAgICAgbmV3Rm9ybVNldHRpbmdzLlZpZXcuTGF5b3V0OTQgPSBnZXRMYXlvdXQ5NE9iamVjdEluZm8oKTtcclxuICAgICAgICBuZXdGb3JtU2V0dGluZ3MuVmlldy5MYXlvdXQ5NC5pdGVtc1swXS5pdGVtcy5wdXNoKFxyXG4gICAgICAgICAgICAuLi5uZXdGb3JtU2V0dGluZ3MuVmlldy5Db250cm9sSW5mby5tYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICBnZXRMYXlvdXRDb250cm9sKGMuQ29udHJvbE5hbWUsIGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsIGZhbHNlKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1SZXF1ZXN0UGFyYW1zID0gbmV3IEJhcnNhQXBpLlVsLkZvcm1SZXF1ZXN0UGFyYW1zKHtcclxuICAgICAgICBNb0lkOiBuZXdGb3JtU2V0dGluZ3MuRGF0YS5Nby5JZCxcclxuICAgICAgICBUeXBlRGVmSWQ6IHR5cGVkZWYsXHJcbiAgICAgICAgUmVsYXRpb246IHJlbGF0aW9uXHJcbiAgICAgICAgLy8gTW9Db250ZXh0OiB7XHJcbiAgICAgICAgLy8gICAgIFJlcG9ydElkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld0lkOiAnJyxcclxuICAgICAgICAvLyAgICAgVmlld05hbWU6ICcnLFxyXG4gICAgICAgIC8vICAgICBDb25kRm9ybWF0aW5nOiAnJyxcclxuICAgICAgICAvLyAgICAgSW5jbHVkZUluUmVwb3J0OiAnJ1xyXG4gICAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgZm9ybVBhbmVsQ3RybHIgPSBuZXcgQmFyc2FBcGkuVWwuRm9ybVBhbmVsQ3RybHIoe1xyXG4gICAgICAgIFNldHRpbmc6IG5ld0Zvcm1TZXR0aW5ncyxcclxuICAgICAgICBSZWxhdGlvbjogcmVsYXRpb24sXHJcbiAgICAgICAgVWx2TWFpbkN0cmxyOiBVbHZNYWluQ3RybHIsXHJcbiAgICAgICAgRmVhdHVyZXM6IHtcclxuICAgICAgICAgICAgV29ya2Zsb3c6IGZhbHNlLFxyXG4gICAgICAgICAgICBUb29sYmFyOiBmYWxzZSxcclxuICAgICAgICAgICAgSW5mb0JhcjogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIEZvcm1SZXF1ZXN0UGFyYW1zOiBmb3JtUmVxdWVzdFBhcmFtc1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZm9ybVBhbmVsQ3RybHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXlvdXRDb250cm9sKFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRyb2xDYXB0aW9uOiBzdHJpbmcgPSAnJyxcclxuICAgIGhpZGU6IGJvb2xlYW4gPSB0cnVlXHJcbik6IFBhcnRpYWw8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgeHR5cGU6ICdMeS5MYXlvdXRDb250cm9sJyxcclxuICAgICAgICBUeXBlOiAnTGF5b3V0Q29udHJvbEl0ZW0nLFxyXG4gICAgICAgIENvbnRyb2xJZDogY29udHJvbE5hbWUsXHJcbiAgICAgICAgSXNWZXJ0aWNhbDogZmFsc2UsXHJcbiAgICAgICAgVGV4dExvY2F0aW9uOiAnUmlnaHQnLFxyXG4gICAgICAgIFRleHRWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBWaXNpYmxlOiAhaGlkZSxcclxuICAgICAgICBoaWRlLFxyXG4gICAgICAgIFVzZUxheW91dEl0ZW1UZXh0Rm9yQ29udHJvbDogZmFsc2UsXHJcbiAgICAgICAgQ2FwdGlvbjogY29udHJvbENhcHRpb24sXHJcbiAgICAgICAgQWNjZXNzaWJsZU5hbWU6ICcnLFxyXG4gICAgICAgIEJvdW5kczogeyB4OiAwLCB5OiAwLCB3aWR0aDogNDMyLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgTWluU2l6ZTogeyB3aWR0aDogODksIGhlaWdodDogMjQgfSxcclxuICAgICAgICBNYXhTaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDI0IH0sXHJcbiAgICAgICAgQ29udHJvbEJvdW5kczogeyB3aWR0aDogMzg4LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1pblNpemU6IHsgd2lkdGg6IDQ1LCBoZWlnaHQ6IDIwIH0sXHJcbiAgICAgICAgQ29udHJvbE1heFNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMjAgfSxcclxuICAgICAgICBQYWRkaW5nOiBbMiwgMiwgMiwgMl0sXHJcbiAgICAgICAgTGFiZWxTaXplOiB7IHdpZHRoOiAzNSwgaGVpZ2h0OiAxMyB9LFxyXG4gICAgICAgIG9yaWdpbmFsWHR5cGU6ICcnXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbExpc3QoXHJcbiAgICBtbzogTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIGNvbnRyb2xEYk5hbWVzOiBzdHJpbmdbXSxcclxuICAgIGlzU2VhcmNoUGFuZWw6IGJvb2xlYW4sXHJcbiAgICBpc0dyaWRFZGl0b3I6IGJvb2xlYW5cclxuKTogUHJvbWlzZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXHJcbiAgICAgICAgICAgICdGb3JtOTQuR2V0Q29udHJvbEluZm9zJyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbEluZm9QYXJhbWV0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICBGaWVsZERiTmFtZXM6IGNvbnRyb2xEYk5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIE1vOiBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIobW8pLFxyXG4gICAgICAgICAgICAgICAgICAgIElzU2VhcmNoUGFuZWw6IGlzU2VhcmNoUGFuZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgSXNHcmlkRWRpdG9yOiBpc0dyaWRFZGl0b3JcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKG0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBOelNhZmVBbnkgPSBhbnk7XHJcbmV4cG9ydCB0eXBlIE51bWJlcklucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcclxuZXhwb3J0IGludGVyZmFjZSBOZ1N0eWxlSW50ZXJmYWNlIHtcclxuICAgIFtrbGFzczogc3RyaW5nXTogTnpTYWZlQW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4YWJsZU9iamVjdCB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBOelNhZmVBbnk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBPzogSW5kZXhhYmxlT2JqZWN0LCBvYmpCPzogSW5kZXhhYmxlT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAob2JqQSA9PT0gb2JqQikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgIW9iakEgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8ICFvYmpCKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XHJcbiAgICBjb25zdCBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xyXG5cclxuICAgIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XHJcblxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBrZXlzQS5sZW5ndGg7IGlkeCsrKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c0FbaWR4XTtcclxuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9iakFba2V5XSAhPT0gb2JqQltrZXldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXI7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcjxEPih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFjazogRCk6IG51bWJlciB8IEQ7XHJcbmV4cG9ydCBmdW5jdGlvbiB0b051bWJlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIgPSAwKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSkgPyBOdW1iZXIodmFsdWUpIDogZmFsbGJhY2tWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBwcm9wRGVjb3JhdG9yRmFjdG9yeTxULCBEPihcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGZhbGxiYWNrOiAodjogVCkgPT4gRFxyXG4pOiAodGFyZ2V0OiBOelNhZmVBbnksIHByb3BOYW1lOiBzdHJpbmcpID0+IHZvaWQge1xyXG4gICAgZnVuY3Rpb24gcHJvcERlY29yYXRvcihcclxuICAgICAgICB0YXJnZXQ6IE56U2FmZUFueSxcclxuICAgICAgICBwcm9wTmFtZTogc3RyaW5nLFxyXG4gICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPE56U2FmZUFueT5cclxuICAgICk6IE56U2FmZUFueSB7XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZVByb3BOYW1lID0gYCQkX196b3Jyb1Byb3BEZWNvcmF0b3JfXyR7cHJvcE5hbWV9YDtcclxuXHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSkpIHtcclxuICAgICAgICAgICAgLy8gd2FybihgVGhlIHByb3AgXCIke3ByaXZhdGVQcm9wTmFtZX1cIiBpcyBhbHJlYWR5IGV4aXN0LCBpdCB3aWxsIGJlIG92ZXJyaWRlZCBieSAke25hbWV9IGRlY29yYXRvci5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByaXZhdGVQcm9wTmFtZSwge1xyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdldCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRGVzY3JpcHRvciAmJiBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgPyBvcmlnaW5hbERlc2NyaXB0b3IuZ2V0LmJpbmQodGhpcykoKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpc1twcml2YXRlUHJvcE5hbWVdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXQodmFsdWU6IFQpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRGVzY3JpcHRvci5zZXQuYmluZCh0aGlzKShmYWxsYmFjayh2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpc1twcml2YXRlUHJvcE5hbWVdID0gZmFsbGJhY2sodmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvcjtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gSW5wdXROdW1iZXIoZmFsbGJhY2tWYWx1ZT86IE56U2FmZUFueSk6IE56U2FmZUFueSB7XHJcbiAgICByZXR1cm4gcHJvcERlY29yYXRvckZhY3RvcnkoJ0lucHV0TnVtYmVyJywgKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IHRvTnVtYmVyKHZhbHVlLCBmYWxsYmFja1ZhbHVlKSk7XHJcbn1cclxuZXhwb3J0IGVudW0gQWZmaXhSZXNwb25kRXZlbnRzIHtcclxuICAgIHJlc2l6ZSA9ICdyZXNpemUnLFxyXG4gICAgc2Nyb2xsID0gJ3Njcm9sbCcsXHJcbiAgICB0b3VjaHN0YXJ0ID0gJ3RvdWNoc3RhcnQnLFxyXG4gICAgdG91Y2htb3ZlID0gJ3RvdWNobW92ZScsXHJcbiAgICB0b3VjaGVuZCA9ICd0b3VjaGVuZCcsXHJcbiAgICBwYWdlc2hvdyA9ICdwYWdlc2hvdycsXHJcbiAgICBsb2FkID0gJ0xPQUQnXHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTaW1wbGVSZWN0IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgd2lkdGg/OiBudW1iZXI7XHJcbiAgICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgICBib3R0b20/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1RhcmdldFdpbmRvdyh0YXJnZXQ6IEVsZW1lbnQgfCBXaW5kb3cpOiB0YXJnZXQgaXMgV2luZG93IHtcclxuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgPT09IHdpbmRvdztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhcmdldFJlY3QodGFyZ2V0OiBFbGVtZW50IHwgV2luZG93KTogU2ltcGxlUmVjdCB7XHJcbiAgICByZXR1cm4gIWlzVGFyZ2V0V2luZG93KHRhcmdldClcclxuICAgICAgICA/IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgICAgIGJvdHRvbTogMFxyXG4gICAgICAgICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkVmFsdWUobmFtZTogc3RyaW5nLCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCwgY2FwdGlvbj86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKG1vLkdldEZWYWx1ZUJ5Q2FwdGlvbikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBtby5HZXRGVmFsdWUobmFtZSk7XHJcbiAgICAgICAgaWYgKGNhcHRpb24pIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbW8uR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiA9PT0gJ3VuZGVmaW5lZCcgJiYgbW8uSW5oZXJpdGFuY2VJbmZvICYmICEobW8uJEZpZWxkRGljdCAmJiBtby4kRmllbGREaWN0W25hbWVdKSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IFBhcmVudEZpZWxkTmFtZSB9ID0gbW8uSW5oZXJpdGFuY2VJbmZvO1xyXG4gICAgICAgICAgICBjb25zdCBtb1BhcmVudCA9IG1vLkdldEZWYWx1ZShQYXJlbnRGaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RlZhbHVlKG5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gbW9QYXJlbnQuR2V0RkNhcHRpb24obmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IG1vLiRGaWVsZERpY3QgJiYgbW8uJEZpZWxkRGljdFtuYW1lXSA/IG1vLiRGaWVsZERpY3RbbmFtZV0gOiBuYW1lO1xyXG4gICAgbGV0IHZhbCA9IG1vW2ZpZWxkTmFtZV07XHJcbiAgICBpZiAoY2FwdGlvbikge1xyXG4gICAgICAgIGxldCBjYXB0aW9uVmFsID0gbW9bZmllbGROYW1lXT8uJENhcHRpb247XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYXB0aW9uVmFsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSBtb1tmaWVsZE5hbWUgKyAnJENhcHRpb24nXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNhcHRpb25WYWwpIHtcclxuICAgICAgICAgICAgICAgIGNhcHRpb25WYWwgPSB2YWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsID0gY2FwdGlvblZhbDtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xyXG5leHBvcnQgY29uc3QgYXZhaWxhYmxlUHJlZml4ZXMgPSBbJ21veicsICdtcycsICd3ZWJraXQnXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbCgpOiB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHtcclxuICAgIGxldCBsYXN0VGltZSA9IDA7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxiYWNrOiBGcmFtZVJlcXVlc3RDYWxsYmFjayk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zdCB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgfSwgdGltZVRvQ2FsbCk7XHJcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZUR5bmFtaWNDb21tYW5kKGNvbW1hbmQ6IHsgSWQ6IHN0cmluZyB9LCBtbzogTWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGwgPSBudWxsKTogdm9pZCB7XHJcbiAgICBjb25zdCBlID0geyBjb21tYW5kLCBEeW5hbWljU2V0dGluZzogbW8sIE1vOiBtbyB9O1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkN1c3RvbUNvZGVNYW5hZ2VyLlJ1bkR5bmFtaWNDb21tYW5kKGNvbW1hbmQuSWQsIGUpO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBFeGVjdXRlV29ya2Zsb3dDaG9pY2VEZWYoc2NvcGUsIHBhcmFtLCBzdWNjZXNzOiAocmVzdWx0KSA9PiB2b2lkLCBmYWlsZWQ6IChlcnJvcikgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcclxuICAgICAgICAnV29ya2Zsb3c5NC5DaG9pY2VTZWxlY3QnLFxyXG4gICAgICAgIHBhcmFtLFxyXG4gICAgICAgIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgc3VjY2VzcyhyZXN1bHQpO1xyXG4gICAgICAgIH0sIC8vIHN1Y2Nlc3NcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgZmFpbGVkKGVycm9yKTtcclxuICAgICAgICB9LCAvLyAgZXJyb3JcclxuICAgICAgICAoKSA9PiB7fSwgLy8gZG9SZXR1cm5cclxuICAgICAgICBzY29wZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTogdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gKCkgPT4gMDtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNDQ2NVxyXG4gICAgICAgIHJldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmVmaXggPSBhdmFpbGFibGVQcmVmaXhlcy5maWx0ZXIoKGtleSkgPT4gYCR7a2V5fVJlcXVlc3RBbmltYXRpb25GcmFtZWAgaW4gd2luZG93KVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4ID8gKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1SZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKCk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZShpZDogbnVtYmVyKTogTnpTYWZlQW55IHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJlZml4ID0gYXZhaWxhYmxlUHJlZml4ZXMuZmlsdGVyKFxyXG4gICAgICAgIChrZXkpID0+IGAke2tleX1DYW5jZWxBbmltYXRpb25GcmFtZWAgaW4gd2luZG93IHx8IGAke2tleX1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGluIHdpbmRvd1xyXG4gICAgKVswXTtcclxuXHJcbiAgICByZXR1cm4gcHJlZml4XHJcbiAgICAgICAgPyAoXHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxBbmltYXRpb25GcmFtZWBdIHx8XHJcbiAgICAgICAgICAgICAgKHdpbmRvdyBhcyBOelNhZmVBbnkpW2Ake3ByZWZpeH1DYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWVgXVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICAuY2FsbCh0aGlzLCBpZClcclxuICAgICAgICA6IGNsZWFyVGltZW91dChpZCk7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEVhc3lpbmdGbiA9ICh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpID0+IG51bWJlcjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh0OiBudW1iZXIsIGI6IG51bWJlciwgYzogbnVtYmVyLCBkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgY29uc3QgY2MgPSBjIC0gYjtcclxuICAgIGxldCB0dCA9IHQgLyAoZCAvIDIpO1xyXG4gICAgaWYgKHR0IDwgMSkge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqIHR0ICogdHQgKiB0dCArIGI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAoY2MgLyAyKSAqICgodHQgLT0gMikgKiB0dCAqIHR0ICsgMikgKyBiO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE56U2Nyb2xsVG9PcHRpb25zIHtcclxuICAgIC8qKiBBbmltYXRpb24gZHVyYXRpb24sIGRlZmF1bHQgYXMgNDUwICovXHJcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcclxuICAgIC8qKiBTY3JvbGwgY29udGFpbmVyLCBkZWZhdWx0IGFzIHdpbmRvdyAqL1xyXG4gICAgZWFzaW5nPzogRWFzeWluZ0ZuO1xyXG4gICAgLyoqIFNjcm9sbCBlbmQgY2FsbGJhY2sgKi9cclxuICAgIGNhbGxiYWNrPygpOiB2b2lkO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXb3JkTWltZVR5cGUgPVxyXG4gICAgJy5kb2MsLmRvY3gsYXBwbGljYXRpb24vbXN3b3JkLGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50JztcclxuZXhwb3J0IGNvbnN0IEltYWdlTWltZVR5cGUgPSAnLmpwZWcsLmpwZywuZ2lmLC5wbmcsLmJtcCwudGlmLGltYWdlLyonO1xyXG5leHBvcnQgY29uc3QgUGRmTWltZVR5cGUgPSAnLnBkZic7XHJcbmV4cG9ydCBjb25zdCBBbGxGaWxlc01pbWVUeXBlID0gJy50eHQsLnBwdCwucGRmLC4qJztcclxuZXhwb3J0IGNvbnN0IFZpZGVvTWltZVR5cGUgPSAndmlkZW8vKic7XHJcbmV4cG9ydCBjb25zdCBBdWRpb01pbWVUeXBlID0gJ2F1ZGlvLyonO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENoYW5nZUxheW91dEluZm9DdXN0b21VaShsYXlvdXRJbmZvOiBMYXlvdXRTZXR0aW5nLCBjb21wb25lbnRVaTogRWpyYXlPbGdvKTogdm9pZCB7XHJcbiAgICBsYXlvdXRJbmZvLkZpZWxkVWkuU2V0dGluZy5DdXN0b21VaSA9IGNvbXBvbmVudFVpO1xyXG59XHJcbmV4cG9ydCBjb25zdCBtb2JpbGVfcmVnZXggPSBuZXcgUmVnRXhwKCdeKFxcXFwrOTh8MCk/OVxcXFxkezl9JCcpO1xyXG5leHBvcnQgY29uc3QgbnVtYmVyX29ubHkgPSBuZXcgUmVnRXhwKCdeWzAtOV0rJCcpO1xyXG5leHBvcnQgZnVuY3Rpb24gZm9yYmlkZGVuVmFsaWRhdG9yKG5hbWVSZTogUmVnRXhwKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9yYmlkZGVuID0gbmFtZVJlLnRlc3QoY29udHJvbC52YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuICFmb3JiaWRkZW4gPyB7IGZvcmJpZGRlbk5hbWU6IHsgdmFsdWU6IGNvbnRyb2wudmFsdWUgfSB9IDogbnVsbDtcclxuICAgIH07XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIEdldEltZ1RhZ3Moc2V0dGluZykge1xyXG4gICAgbGV0IHN0ciA9ICcnO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nLnNvdXJjZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzdHIgKz1cclxuICAgICAgICAgICAgXCI8aW1nIHNyYz0nXCIgK1xyXG4gICAgICAgICAgICBzZXR0aW5nLnNvdXJjZXNbaV0gK1xyXG4gICAgICAgICAgICBcIicgIGNsYXNzPSdcIiArXHJcbiAgICAgICAgICAgIGdldENlbnRlcihzZXR0aW5nLmlzQ2VudGVyKSArXHJcbiAgICAgICAgICAgIFwiJyAgc3R5bGU9J1wiICtcclxuICAgICAgICAgICAgc2V0dGluZy5jdXN0b21Dc3MgK1xyXG4gICAgICAgICAgICBcIicgLz4gXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSW1hZ2V0b1ByaW50KHNldHRpbmcpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICAgJzxodG1sPjxoZWFkPicgK1xyXG4gICAgICAgICc8c2NyaXB0IHNyYz1cIi9MaWIvc2NyaXB0cy9qcXVlcnkteC5taW4uanNcIj48L3NjcmlwdD48c2NyaXB0IHNyYz1cIkxpYi9JbWFnZVByaW50L0ltYWdlUHJpbnRJbnRlcm5hbC5qc1wiPjwvc2NyaXB0PicgK1xyXG4gICAgICAgICc8L2hlYWQ+PGJvZHkgc3R5bGU9XCJtYXJnaW4gOiAwIDEgMCAxXCI+JyArXHJcbiAgICAgICAgR2V0SW1nVGFncyhzZXR0aW5nKSArXHJcbiAgICAgICAgJzwvYm9keT48L2h0bWw+J1xyXG4gICAgKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFByaW50SW1hZ2Uoc2V0dGluZykge1xyXG4gICAgbGV0IHBhZ2VMaW5rID0gJ2Fib3V0OmJsYW5rJztcclxuICAgIGxldCBwd2EgPSB3aW5kb3cub3BlbihwYWdlTGluaywgJ19uZXcnKTtcclxuICAgIHB3YT8uZG9jdW1lbnQub3BlbigpO1xyXG4gICAgbGV0IGltYWdlVG9QcmludCA9IEltYWdldG9QcmludChzZXR0aW5nKTtcclxuICAgIHB3YT8uZG9jdW1lbnQud3JpdGUoaW1hZ2VUb1ByaW50KTtcclxuICAgIHB3YT8uZG9jdW1lbnQuY2xvc2UoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2VudGVyKGlzQ2VudGVyKSB7XHJcbiAgICBpZiAoaXNDZW50ZXIpIHJldHVybiAnY2VudGVyJztcclxuICAgIHJldHVybiAnJztcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gU2F2ZUltYWdlVG9GaWxlKG5hbWU6IHN0cmluZywgc3JjOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHQgPSBnZXRVbmlxdWVJZCg0KTtcclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgbGluay5ocmVmID0gc3JjO1xyXG4gICAgbGluay5kb3dubG9hZCA9IG5hbWU7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGluay5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgIH0sIDEwKTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICAvL3sxfVxyXG4gICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIC8vezJ9XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpOyAvL3szfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgLy97NH1cclxuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgICAgICAgIC8vezV9XHJcbiAgICAgICAgICAgIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTsgLy97Nn1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlVGFnTmFtZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgYnV0dG9uLGJ1dHRvbjpub3QoW2Rpc2FibGVkXSksW2hyZWZdLGlucHV0Om5vdChbZGlzYWJsZWRdKSxpbnB1dCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdCxzZWxlY3Q6bm90KFtkaXNhYmxlZF0pLHRleHRhcmVhLHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSxbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSlgO1xyXG59XHJcbiJdfQ==